From 922ed536fddbe3f187299c9da6171889af1d34b9 Mon Sep 17 00:00:00 2001 From: "Peter J. Keleher" <keleher@cs.umd.edu> Date: Fri, 1 May 2020 19:40:41 -0400 Subject: [PATCH] auto --- assign5/openTok/.DS_Store | Bin 6148 -> 0 bytes assign5/openTok/Podfile | 10 - assign5/openTok/Podfile.lock | 74 - .../Pods/Firebase/CoreOnly/Sources/Firebase.h | 172 - .../CoreOnly/Sources/module.modulemap | 4 - assign5/openTok/Pods/Firebase/LICENSE | 202 - assign5/openTok/Pods/Firebase/README.md | 282 - .../Interop/Auth/Public/FIRAuthInterop.h | 44 - .../openTok/Pods/FirebaseAuthInterop/LICENSE | 202 - .../Pods/FirebaseAuthInterop/README.md | 266 - .../Sources/FIRAnalyticsConfiguration.m | 62 - .../FirebaseCore/Sources/FIRApp.m | 938 ---- .../Sources/FIRAppAssociationRegistration.m | 47 - .../FirebaseCore/Sources/FIRBundleUtil.h | 53 - .../FirebaseCore/Sources/FIRBundleUtil.m | 75 - .../FirebaseCore/Sources/FIRComponent.m | 65 - .../Sources/FIRComponentContainer.m | 214 - .../FirebaseCore/Sources/FIRComponentType.m | 28 - .../FirebaseCore/Sources/FIRConfiguration.m | 46 - .../Sources/FIRCoreDiagnosticsConnector.m | 61 - .../FirebaseCore/Sources/FIRDependency.m | 44 - .../FirebaseCore/Sources/FIRDiagnosticsData.m | 66 - .../FirebaseCore/Sources/FIRErrors.m | 21 - .../FirebaseCore/Sources/FIRHeartbeatInfo.m | 61 - .../FirebaseCore/Sources/FIRLogger.m | 179 - .../FirebaseCore/Sources/FIROptions.m | 490 -- .../FirebaseCore/Sources/FIRVersion.h | 23 - .../FirebaseCore/Sources/FIRVersion.m | 33 - .../Private/FIRAnalyticsConfiguration.h | 56 - .../Private/FIRAppAssociationRegistration.h | 49 - .../Sources/Private/FIRAppInternal.h | 162 - .../Sources/Private/FIRComponent.h | 91 - .../Sources/Private/FIRComponentContainer.h | 44 - .../Private/FIRComponentContainerInternal.h | 49 - .../Sources/Private/FIRComponentType.h | 34 - .../Private/FIRConfigurationInternal.h | 29 - .../Private/FIRCoreDiagnosticsConnector.h | 35 - .../Sources/Private/FIRDependency.h | 45 - .../Sources/Private/FIRDiagnosticsData.h | 35 - .../Sources/Private/FIRErrorCode.h | 38 - .../FirebaseCore/Sources/Private/FIRErrors.h | 24 - .../Sources/Private/FIRHeartbeatInfo.h | 39 - .../FirebaseCore/Sources/Private/FIRLibrary.h | 45 - .../FirebaseCore/Sources/Private/FIRLogger.h | 151 - .../Sources/Private/FIROptionsInternal.h | 114 - .../FirebaseCore/Sources/Public/FIRApp.h | 127 - .../Sources/Public/FIRConfiguration.h | 45 - .../Sources/Public/FIRLoggerLevel.h | 38 - .../FirebaseCore/Sources/Public/FIROptions.h | 123 - .../Sources/Public/FirebaseCore.h | 20 - assign5/openTok/Pods/FirebaseCore/LICENSE | 202 - assign5/openTok/Pods/FirebaseCore/README.md | 282 - .../FIRCDLibrary/FIRCoreDiagnostics.m | 647 --- .../Protogen/nanopb/firebasecore.nanopb.c | 60 - .../Protogen/nanopb/firebasecore.nanopb.h | 193 - .../Pods/FirebaseCoreDiagnostics/LICENSE | 202 - .../Pods/FirebaseCoreDiagnostics/README.md | 282 - .../Public/FIRCoreDiagnosticsData.h | 61 - .../Public/FIRCoreDiagnosticsInterop.h | 34 - .../FirebaseCoreDiagnosticsInterop/LICENSE | 202 - .../FirebaseCoreDiagnosticsInterop/README.md | 251 - .../Firebase/Database/Api/FIRDataSnapshot.m | 105 - .../Firebase/Database/Api/FIRDatabase.m | 234 - .../Database/Api/FIRDatabaseComponent.h | 46 - .../Database/Api/FIRDatabaseComponent.m | 173 - .../Firebase/Database/Api/FIRDatabaseConfig.h | 70 - .../Firebase/Database/Api/FIRDatabaseConfig.m | 92 - .../Firebase/Database/Api/FIRDatabaseQuery.m | 677 --- .../Firebase/Database/Api/FIRMutableData.m | 149 - .../Firebase/Database/Api/FIRServerValue.m | 33 - .../Database/Api/FIRTransactionResult.m | 39 - .../Api/Private/FIRDataSnapshot_Private.h | 28 - .../Api/Private/FIRDatabaseQuery_Private.h | 43 - .../Private/FIRDatabaseReference_Private.h | 27 - .../Api/Private/FIRDatabase_Private.h | 37 - .../Api/Private/FIRMutableData_Private.h | 26 - .../Private/FIRTransactionResult_Private.h | 25 - .../Database/Api/Private/FTypedefs_Private.h | 60 - .../Firebase/Database/Constants/FConstants.h | 195 - .../Firebase/Database/Constants/FConstants.m | 185 - .../Firebase/Database/Core/FCompoundHash.h | 38 - .../Firebase/Database/Core/FCompoundHash.m | 259 - .../Firebase/Database/Core/FListenProvider.h | 32 - .../Firebase/Database/Core/FListenProvider.m | 25 - .../Database/Core/FPersistentConnection.h | 99 - .../Database/Core/FPersistentConnection.m | 1141 ---- .../Firebase/Database/Core/FQueryParams.h | 60 - .../Firebase/Database/Core/FQueryParams.m | 393 -- .../Firebase/Database/Core/FQuerySpec.h | 36 - .../Firebase/Database/Core/FQuerySpec.m | 86 - .../Firebase/Database/Core/FRangeMerge.h | 39 - .../Firebase/Database/Core/FRangeMerge.m | 134 - .../Firebase/Database/Core/FRepo.h | 93 - .../Firebase/Database/Core/FRepo.m | 1467 ------ .../Firebase/Database/Core/FRepoInfo.h | 40 - .../Firebase/Database/Core/FRepoInfo.m | 144 - .../Firebase/Database/Core/FRepoManager.h | 34 - .../Firebase/Database/Core/FRepoManager.m | 148 - .../Firebase/Database/Core/FRepo_Private.h | 42 - .../Firebase/Database/Core/FServerValues.h | 40 - .../Firebase/Database/Core/FServerValues.m | 269 - .../Firebase/Database/Core/FSnapshotHolder.h | 27 - .../Firebase/Database/Core/FSnapshotHolder.m | 46 - .../Database/Core/FSparseSnapshotTree.h | 34 - .../Database/Core/FSparseSnapshotTree.m | 144 - .../Firebase/Database/Core/FSyncPoint.h | 69 - .../Firebase/Database/Core/FSyncPoint.m | 302 -- .../Firebase/Database/Core/FSyncTree.h | 82 - .../Firebase/Database/Core/FSyncTree.m | 1042 ---- .../Firebase/Database/Core/FWriteRecord.h | 45 - .../Firebase/Database/Core/FWriteRecord.m | 139 - .../Firebase/Database/Core/FWriteTree.h | 70 - .../Firebase/Database/Core/FWriteTree.m | 577 --- .../Firebase/Database/Core/FWriteTreeRef.h | 57 - .../Firebase/Database/Core/FWriteTreeRef.m | 159 - .../Database/Core/Operation/FAckUserWrite.h | 37 - .../Database/Core/Operation/FAckUserWrite.m | 66 - .../Firebase/Database/Core/Operation/FMerge.h | 32 - .../Firebase/Database/Core/Operation/FMerge.m | 85 - .../Database/Core/Operation/FOperation.h | 34 - .../Core/Operation/FOperationSource.h | 37 - .../Core/Operation/FOperationSource.m | 86 - .../Database/Core/Operation/FOverwrite.h | 32 - .../Database/Core/Operation/FOverwrite.m | 67 - .../Database/Core/Utilities/FIRRetryHelper.h | 33 - .../Database/Core/Utilities/FIRRetryHelper.m | 140 - .../Database/Core/Utilities/FImmutableTree.h | 59 - .../Database/Core/Utilities/FImmutableTree.m | 486 -- .../Firebase/Database/Core/Utilities/FPath.h | 46 - .../Firebase/Database/Core/Utilities/FPath.m | 304 -- .../Firebase/Database/Core/Utilities/FTree.h | 52 - .../Firebase/Database/Core/Utilities/FTree.m | 193 - .../Database/Core/Utilities/FTreeNode.h | 25 - .../Database/Core/Utilities/FTreeNode.m | 35 - .../Firebase/Database/Core/View/FCacheNode.h | 46 - .../Firebase/Database/Core/View/FCacheNode.m | 60 - .../Database/Core/View/FCancelEvent.h | 31 - .../Database/Core/View/FCancelEvent.m | 57 - .../Firebase/Database/Core/View/FChange.h | 41 - .../Firebase/Database/Core/View/FChange.m | 72 - .../Core/View/FChildEventRegistration.h | 37 - .../Core/View/FChildEventRegistration.m | 112 - .../Firebase/Database/Core/View/FDataEvent.h | 41 - .../Firebase/Database/Core/View/FDataEvent.m | 83 - .../Firebase/Database/Core/View/FEvent.h | 27 - .../Database/Core/View/FEventRaiser.h | 36 - .../Database/Core/View/FEventRaiser.m | 74 - .../Database/Core/View/FEventRegistration.h | 38 - .../Core/View/FKeepSyncedEventRegistration.h | 28 - .../Core/View/FKeepSyncedEventRegistration.m | 70 - .../Core/View/FValueEventRegistration.h | 34 - .../Core/View/FValueEventRegistration.m | 102 - .../Firebase/Database/Core/View/FView.h | 56 - .../Firebase/Database/Core/View/FView.m | 266 - .../Firebase/Database/Core/View/FViewCache.h | 40 - .../Firebase/Database/Core/View/FViewCache.m | 72 - .../View/Filter/FChildChangeAccumulator.h | 27 - .../View/Filter/FChildChangeAccumulator.m | 99 - .../Core/View/Filter/FCompleteChildSource.h | 30 - .../Core/View/Filter/FIndexedFilter.h | 26 - .../Core/View/Filter/FIndexedFilter.m | 164 - .../Core/View/Filter/FLimitedFilter.h | 25 - .../Core/View/Filter/FLimitedFilter.m | 285 - .../Database/Core/View/Filter/FNodeFilter.h | 77 - .../Firebase/Database/FClock.h | 35 - .../Firebase/Database/FClock.m | 58 - .../Firebase/Database/FEventGenerator.h | 28 - .../Firebase/Database/FEventGenerator.m | 169 - .../Database/FIRDatabaseConfig_Private.h | 31 - .../Firebase/Database/FIRDatabaseReference.m | 528 -- .../Firebase/Database/FIndex.h | 51 - .../Firebase/Database/FIndex.m | 39 - .../Firebase/Database/FKeyIndex.h | 22 - .../Firebase/Database/FKeyIndex.m | 123 - .../Firebase/Database/FListenComplete.h | 28 - .../Firebase/Database/FListenComplete.m | 55 - .../Firebase/Database/FMaxNode.h | 22 - .../Firebase/Database/FMaxNode.m | 58 - .../Firebase/Database/FNamedNode.h | 31 - .../Firebase/Database/FNamedNode.m | 102 - .../Firebase/Database/FPathIndex.h | 23 - .../Firebase/Database/FPathIndex.m | 135 - .../Firebase/Database/FPriorityIndex.h | 23 - .../Firebase/Database/FPriorityIndex.m | 126 - .../Firebase/Database/FRangedFilter.h | 31 - .../Firebase/Database/FRangedFilter.m | 129 - .../Database/FTransformedEnumerator.h | 24 - .../Database/FTransformedEnumerator.m | 44 - .../Firebase/Database/FValueIndex.h | 22 - .../Firebase/Database/FValueIndex.m | 112 - .../Firebase/Database/FViewProcessor.h | 42 - .../Firebase/Database/FViewProcessor.m | 831 --- .../Firebase/Database/FViewProcessorResult.h | 29 - .../Firebase/Database/FViewProcessorResult.m | 35 - .../Database/Login/FAuthTokenProvider.h | 39 - .../Database/Login/FAuthTokenProvider.m | 123 - .../Database/Login/FIRNoopAuthTokenProvider.h | 22 - .../Database/Login/FIRNoopAuthTokenProvider.m | 34 - .../Database/Persistence/FCachePolicy.h | 41 - .../Database/Persistence/FCachePolicy.m | 82 - .../Persistence/FLevelDBStorageEngine.h | 39 - .../Persistence/FLevelDBStorageEngine.m | 990 ---- .../Database/Persistence/FPendingPut.h | 53 - .../Database/Persistence/FPendingPut.m | 113 - .../Persistence/FPersistenceManager.h | 60 - .../Persistence/FPersistenceManager.m | 231 - .../Database/Persistence/FPruneForest.h | 38 - .../Database/Persistence/FPruneForest.m | 194 - .../Database/Persistence/FStorageEngine.h | 60 - .../Database/Persistence/FTrackedQuery.h | 43 - .../Database/Persistence/FTrackedQuery.m | 113 - .../Persistence/FTrackedQueryManager.h | 52 - .../Persistence/FTrackedQueryManager.m | 375 -- .../Database/Public/FIRDataEventType.h | 39 - .../Database/Public/FIRDataSnapshot.h | 142 - .../Firebase/Database/Public/FIRDatabase.h | 182 - .../Database/Public/FIRDatabaseQuery.h | 395 -- .../Database/Public/FIRDatabaseReference.h | 861 --- .../Firebase/Database/Public/FIRMutableData.h | 128 - .../Firebase/Database/Public/FIRServerValue.h | 53 - .../Database/Public/FIRTransactionResult.h | 50 - .../Database/Public/FirebaseDatabase.h | 29 - .../Firebase/Database/Realtime/FConnection.h | 59 - .../Firebase/Database/Realtime/FConnection.m | 234 - .../Database/Realtime/FWebSocketConnection.h | 53 - .../Database/Realtime/FWebSocketConnection.m | 346 -- .../Database/Snapshot/FChildrenNode.h | 42 - .../Database/Snapshot/FChildrenNode.m | 418 -- .../Database/Snapshot/FCompoundWrite.h | 64 - .../Database/Snapshot/FCompoundWrite.m | 304 -- .../Firebase/Database/Snapshot/FEmptyNode.h | 24 - .../Firebase/Database/Snapshot/FEmptyNode.m | 30 - .../Firebase/Database/Snapshot/FIndexedNode.h | 55 - .../Firebase/Database/Snapshot/FIndexedNode.m | 218 - .../Firebase/Database/Snapshot/FLeafNode.h | 27 - .../Firebase/Database/Snapshot/FLeafNode.m | 266 - .../Firebase/Database/Snapshot/FNode.h | 50 - .../Database/Snapshot/FSnapshotUtilities.h | 49 - .../Database/Snapshot/FSnapshotUtilities.m | 394 -- .../Database/Utilities/FAtomicNumber.h | 23 - .../Database/Utilities/FAtomicNumber.m | 55 - .../Database/Utilities/FEventEmitter.h | 36 - .../Database/Utilities/FEventEmitter.m | 161 - .../Firebase/Database/Utilities/FNextPushId.h | 23 - .../Firebase/Database/Utilities/FNextPushId.m | 62 - .../Firebase/Database/Utilities/FParsedUrl.h | 25 - .../Firebase/Database/Utilities/FParsedUrl.m | 24 - .../Database/Utilities/FStringUtilities.h | 26 - .../Database/Utilities/FStringUtilities.m | 72 - .../Firebase/Database/Utilities/FTypedefs.h | 46 - .../Firebase/Database/Utilities/FUtilities.h | 82 - .../Firebase/Database/Utilities/FUtilities.m | 433 -- .../Firebase/Database/Utilities/FValidation.h | 55 - .../Firebase/Database/Utilities/FValidation.m | 461 -- .../Utilities/Tuples/FTupleBoolBlock.h | 25 - .../Utilities/Tuples/FTupleBoolBlock.m | 24 - .../Utilities/Tuples/FTupleCallbackStatus.h | 24 - .../Utilities/Tuples/FTupleCallbackStatus.m | 22 - .../Utilities/Tuples/FTupleFirebase.h | 26 - .../Utilities/Tuples/FTupleFirebase.m | 25 - .../Utilities/Tuples/FTupleNodePath.h | 28 - .../Utilities/Tuples/FTupleNodePath.m | 33 - .../Utilities/Tuples/FTupleObjectNode.h | 27 - .../Utilities/Tuples/FTupleObjectNode.m | 32 - .../Database/Utilities/Tuples/FTupleObjects.h | 24 - .../Database/Utilities/Tuples/FTupleObjects.m | 24 - .../Utilities/Tuples/FTupleOnDisconnect.h | 27 - .../Utilities/Tuples/FTupleOnDisconnect.m | 26 - .../Utilities/Tuples/FTuplePathValue.h | 25 - .../Utilities/Tuples/FTuplePathValue.m | 38 - .../Tuples/FTupleRemovedQueriesEvents.h | 30 - .../Tuples/FTupleRemovedQueriesEvents.m | 37 - .../Utilities/Tuples/FTupleSetIdPath.h | 27 - .../Utilities/Tuples/FTupleSetIdPath.m | 33 - .../Utilities/Tuples/FTupleStringNode.h | 27 - .../Utilities/Tuples/FTupleStringNode.m | 33 - .../Database/Utilities/Tuples/FTupleTSN.h | 25 - .../Database/Utilities/Tuples/FTupleTSN.m | 24 - .../Utilities/Tuples/FTupleTransaction.h | 75 - .../Utilities/Tuples/FTupleTransaction.m | 41 - .../Utilities/Tuples/FTupleUserCallback.h | 32 - .../Utilities/Tuples/FTupleUserCallback.m | 35 - .../FArraySortedDictionary.h | 21 - .../FArraySortedDictionary.m | 266 - .../FImmutableSortedDictionary.h | 54 - .../FImmutableSortedDictionary.m | 142 - .../FImmutableSortedSet.h | 22 - .../FImmutableSortedSet.m | 115 - .../FLLRBEmptyNode.h | 27 - .../FLLRBEmptyNode.m | 72 - .../FImmutableSortedDictionary/FLLRBNode.h | 29 - .../FLLRBValueNode.h | 29 - .../FLLRBValueNode.m | 230 - .../FTreeSortedDictionary.h | 30 - .../FTreeSortedDictionary.m | 326 -- .../FTreeSortedDictionaryEnumerator.h | 9 - .../FTreeSortedDictionaryEnumerator.m | 83 - .../third_party/SocketRocket/FSRWebSocket.h | 107 - .../third_party/SocketRocket/FSRWebSocket.m | 1858 ------- .../SocketRocket/NSData+SRB64Additions.h | 23 - .../SocketRocket/NSData+SRB64Additions.m | 37 - .../third_party/SocketRocket/fbase64.c | 318 -- .../third_party/SocketRocket/fbase64.h | 33 - .../third_party/Wrap-leveldb/APLevelDB.h | 105 - .../third_party/Wrap-leveldb/APLevelDB.mm | 500 -- assign5/openTok/Pods/FirebaseDatabase/LICENSE | 202 - .../openTok/Pods/FirebaseDatabase/README.md | 282 - .../GDTCORLibrary/GDTCORAssert.m | 36 - .../GDTCORLibrary/GDTCORClock.m | 164 - .../GDTCORLibrary/GDTCORConsoleLogger.m | 55 - .../GDTCORLibrary/GDTCORDataFuture.m | 59 - .../GDTCORLibrary/GDTCOREvent.m | 257 - .../GDTCORLibrary/GDTCORFlatFileStorage.m | 342 -- .../GDTCORLibrary/GDTCORLifecycle.m | 119 - .../GDTCORLibrary/GDTCORPlatform.m | 407 -- .../GDTCORLibrary/GDTCORReachability.m | 119 - .../GDTCORLibrary/GDTCORRegistrar.m | 187 - .../GDTCORLibrary/GDTCORTransformer.m | 104 - .../GDTCORLibrary/GDTCORTransport.m | 92 - .../GDTCORLibrary/GDTCORUploadCoordinator.m | 285 - .../GDTCORLibrary/GDTCORUploadPackage.m | 193 - .../GDTCORLibrary/Private/GDTCORDataFuture.h | 36 - .../Private/GDTCOREvent_Private.h | 48 - .../Private/GDTCORFlatFileStorage.h | 59 - .../Private/GDTCORReachability_Private.h | 32 - .../Private/GDTCORRegistrar_Private.h | 39 - .../GDTCORLibrary/Private/GDTCORTransformer.h | 56 - .../Private/GDTCORTransformer_Private.h | 28 - .../Private/GDTCORTransport_Private.h | 39 - .../Private/GDTCORUploadCoordinator.h | 75 - .../Private/GDTCORUploadPackage_Private.h | 30 - .../GDTCORLibrary/Public/GDTCORAssert.h | 95 - .../GDTCORLibrary/Public/GDTCORClock.h | 57 - .../Public/GDTCORConsoleLogger.h | 143 - .../GDTCORLibrary/Public/GDTCOREvent.h | 89 - .../Public/GDTCOREventDataObject.h | 36 - .../Public/GDTCOREventTransformer.h | 38 - .../GDTCORLibrary/Public/GDTCORLifecycle.h | 63 - .../GDTCORLibrary/Public/GDTCORPlatform.h | 168 - .../GDTCORLibrary/Public/GDTCORPrioritizer.h | 79 - .../GDTCORLibrary/Public/GDTCORReachability.h | 34 - .../GDTCORLibrary/Public/GDTCORRegistrar.h | 58 - .../Public/GDTCORStorageProtocol.h | 41 - .../GDTCORLibrary/Public/GDTCORTargets.h | 37 - .../GDTCORLibrary/Public/GDTCORTransport.h | 91 - .../Public/GDTCORUploadPackage.h | 76 - .../GDTCORLibrary/Public/GDTCORUploader.h | 48 - .../Public/GoogleDataTransport.h | 28 - .../openTok/Pods/GoogleDataTransport/LICENSE | 202 - .../Pods/GoogleDataTransport/README.md | 282 - .../GDTCCTLibrary/GDTCCTCompressionHelper.m | 95 - .../GDTCCTLibrary/GDTCCTNanopbHelpers.m | 270 - .../GDTCCTLibrary/GDTCCTPrioritizer.m | 426 -- .../GDTCCTLibrary/GDTCCTUploader.m | 441 -- .../GDTCOREvent+NetworkConnectionInfo.m | 102 - .../Private/GDTCCTCompressionHelper.h | 40 - .../Private/GDTCCTNanopbHelpers.h | 128 - .../GDTCCTLibrary/Private/GDTCCTPrioritizer.h | 53 - .../GDTCCTLibrary/Private/GDTCCTUploader.h | 63 - .../GDTCOREvent+NetworkConnectionInfo.h | 47 - .../Protogen/nanopb/cct.nanopb.c | 128 - .../Protogen/nanopb/cct.nanopb.h | 281 - .../GoogleDataTransportCCTSupport/LICENSE | 202 - .../GoogleDataTransportCCTSupport/README.md | 282 - .../Environment/GULHeartbeatDateStorage.m | 140 - .../Environment/GULSecureCoding.m | 103 - .../Public/GULHeartbeatDateStorage.h | 49 - .../Environment/Public/GULKeychainStorage.h | 79 - .../Environment/Public/GULKeychainUtils.h | 61 - .../Environment/Public/GULSecureCoding.h | 36 - .../SecureStorage/GULKeychainStorage.m | 192 - .../SecureStorage/GULKeychainUtils.m | 113 - .../third_party/GULAppEnvironmentUtil.h | 46 - .../third_party/GULAppEnvironmentUtil.m | 267 - .../GoogleUtilities/GoogleUtilities/LICENSE | 247 - .../GoogleUtilities/Logger/GULLogger.m | 214 - .../Logger/Private/GULLogger.h | 159 - .../Logger/Public/GULLoggerLevel.h | 37 - .../openTok/Pods/GoogleUtilities/README.md | 282 - .../Pods/Headers/Private/Firebase/Firebase.h | 172 - .../FirebaseAuthInterop/FIRAuthInterop.h | 44 - .../FIRCoreDiagnosticsData.h | 61 - .../FIRCoreDiagnosticsInterop.h | 34 - .../Pods/Headers/Public/Firebase/Firebase.h | 172 - .../FirebaseAuthInterop/FIRAuthInterop.h | 44 - .../FIRCoreDiagnosticsData.h | 61 - .../FIRCoreDiagnosticsInterop.h | 34 - assign5/openTok/Pods/Manifest.lock | 74 - .../Pods/Pods.xcodeproj/project.pbxproj | 4612 ----------------- .../xcschemes/Firebase.xcscheme | 60 - .../xcschemes/FirebaseAuthInterop.xcscheme | 60 - .../xcschemes/FirebaseCore.xcscheme | 60 - .../FirebaseCoreDiagnostics.xcscheme | 60 - .../FirebaseCoreDiagnosticsInterop.xcscheme | 60 - .../xcschemes/FirebaseDatabase.xcscheme | 60 - .../xcschemes/GoogleDataTransport.xcscheme | 60 - .../GoogleDataTransportCCTSupport.xcscheme | 60 - .../xcschemes/GoogleUtilities.xcscheme | 60 - .../xcschemes/Pods-openTok.xcscheme | 58 - .../xcschemes/PromisesObjC.xcscheme | 58 - .../xcschemes/leveldb-library.xcscheme | 58 - .../xcschemes/nanopb.xcscheme | 60 - .../xcschemes/xcschememanagement.plist | 102 - assign5/openTok/Pods/PromisesObjC/LICENSE | 202 - assign5/openTok/Pods/PromisesObjC/README.md | 60 - .../Sources/FBLPromises/FBLPromise+All.m | 86 - .../Sources/FBLPromises/FBLPromise+Always.m | 58 - .../Sources/FBLPromises/FBLPromise+Any.m | 112 - .../Sources/FBLPromises/FBLPromise+Async.m | 70 - .../Sources/FBLPromises/FBLPromise+Await.m | 48 - .../Sources/FBLPromises/FBLPromise+Catch.m | 55 - .../Sources/FBLPromises/FBLPromise+Delay.m | 59 - .../Sources/FBLPromises/FBLPromise+Do.m | 59 - .../Sources/FBLPromises/FBLPromise+Race.m | 65 - .../Sources/FBLPromises/FBLPromise+Recover.m | 54 - .../Sources/FBLPromises/FBLPromise+Reduce.m | 61 - .../Sources/FBLPromises/FBLPromise+Retry.m | 128 - .../Sources/FBLPromises/FBLPromise+Testing.m | 56 - .../Sources/FBLPromises/FBLPromise+Then.m | 50 - .../Sources/FBLPromises/FBLPromise+Timeout.m | 64 - .../Sources/FBLPromises/FBLPromise+Validate.m | 56 - .../Sources/FBLPromises/FBLPromise+Wrap.m | 420 -- .../Sources/FBLPromises/FBLPromise.m | 297 -- .../Sources/FBLPromises/FBLPromiseError.m | 19 - .../FBLPromises/include/FBLPromise+All.h | 63 - .../FBLPromises/include/FBLPromise+Always.h | 54 - .../FBLPromises/include/FBLPromise+Any.h | 69 - .../FBLPromises/include/FBLPromise+Async.h | 60 - .../FBLPromises/include/FBLPromise+Await.h | 32 - .../FBLPromises/include/FBLPromise+Catch.h | 59 - .../FBLPromises/include/FBLPromise+Delay.h | 59 - .../FBLPromises/include/FBLPromise+Do.h | 55 - .../FBLPromises/include/FBLPromise+Race.h | 62 - .../FBLPromises/include/FBLPromise+Recover.h | 60 - .../FBLPromises/include/FBLPromise+Reduce.h | 71 - .../FBLPromises/include/FBLPromise+Retry.h | 165 - .../FBLPromises/include/FBLPromise+Testing.h | 63 - .../FBLPromises/include/FBLPromise+Then.h | 63 - .../FBLPromises/include/FBLPromise+Timeout.h | 57 - .../FBLPromises/include/FBLPromise+Validate.h | 60 - .../FBLPromises/include/FBLPromise+Wrap.h | 316 -- .../Sources/FBLPromises/include/FBLPromise.h | 82 - .../FBLPromises/include/FBLPromiseError.h | 43 - .../FBLPromises/include/FBLPromisePrivate.h | 66 - .../Sources/FBLPromises/include/FBLPromises.h | 32 - .../Firebase/Firebase.debug.xcconfig | 11 - .../Firebase/Firebase.release.xcconfig | 11 - .../FirebaseAuthInterop.debug.xcconfig | 10 - .../FirebaseAuthInterop.release.xcconfig | 10 - .../FirebaseCore/FirebaseCore-Info.plist | 26 - .../FirebaseCore/FirebaseCore-dummy.m | 5 - .../FirebaseCore/FirebaseCore-umbrella.h | 21 - .../FirebaseCore/FirebaseCore.debug.xcconfig | 13 - .../FirebaseCore/FirebaseCore.modulemap | 6 - .../FirebaseCore.release.xcconfig | 13 - .../FirebaseCoreDiagnostics-Info.plist | 26 - .../FirebaseCoreDiagnostics-dummy.m | 5 - .../FirebaseCoreDiagnostics-umbrella.h | 17 - .../FirebaseCoreDiagnostics.debug.xcconfig | 14 - .../FirebaseCoreDiagnostics.modulemap | 6 - .../FirebaseCoreDiagnostics.release.xcconfig | 14 - ...ebaseCoreDiagnosticsInterop.debug.xcconfig | 10 - ...aseCoreDiagnosticsInterop.release.xcconfig | 10 - .../FirebaseDatabase-Info.plist | 26 - .../FirebaseDatabase/FirebaseDatabase-dummy.m | 5 - .../FirebaseDatabase-umbrella.h | 25 - .../FirebaseDatabase.debug.xcconfig | 12 - .../FirebaseDatabase.modulemap | 6 - .../FirebaseDatabase.release.xcconfig | 12 - .../GoogleDataTransport-Info.plist | 26 - .../GoogleDataTransport-dummy.m | 5 - .../GoogleDataTransport-umbrella.h | 33 - .../GoogleDataTransport.debug.xcconfig | 13 - .../GoogleDataTransport.modulemap | 6 - .../GoogleDataTransport.release.xcconfig | 13 - .../GoogleDataTransportCCTSupport-Info.plist | 26 - .../GoogleDataTransportCCTSupport-dummy.m | 5 - .../GoogleDataTransportCCTSupport-umbrella.h | 17 - ...ogleDataTransportCCTSupport.debug.xcconfig | 14 - .../GoogleDataTransportCCTSupport.modulemap | 6 - ...leDataTransportCCTSupport.release.xcconfig | 14 - .../GoogleUtilities-Info.plist | 26 - .../GoogleUtilities/GoogleUtilities-dummy.m | 5 - .../GoogleUtilities-prefix.pch | 12 - .../GoogleUtilities-umbrella.h | 17 - .../GoogleUtilities.debug.xcconfig | 12 - .../GoogleUtilities/GoogleUtilities.modulemap | 6 - .../GoogleUtilities.release.xcconfig | 12 - .../Pods-openTok/Pods-openTok-Info.plist | 26 - .../Pods-openTok-acknowledgements.markdown | 2163 -------- .../Pods-openTok-acknowledgements.plist | 2261 -------- .../Pods-openTok/Pods-openTok-dummy.m | 5 - ...ok-frameworks-Debug-input-files.xcfilelist | 5 - ...k-frameworks-Debug-output-files.xcfilelist | 4 - ...-frameworks-Release-input-files.xcfilelist | 5 - ...frameworks-Release-output-files.xcfilelist | 4 - .../Pods-openTok/Pods-openTok-frameworks.sh | 213 - .../Pods-openTok/Pods-openTok-umbrella.h | 16 - .../Pods-openTok/Pods-openTok.debug.xcconfig | 10 - .../Pods-openTok/Pods-openTok.modulemap | 6 - .../Pods-openTok.release.xcconfig | 10 - .../PromisesObjC/PromisesObjC-Info.plist | 26 - .../PromisesObjC/PromisesObjC-dummy.m | 5 - .../PromisesObjC/PromisesObjC-umbrella.h | 36 - .../PromisesObjC/PromisesObjC.debug.xcconfig | 10 - .../PromisesObjC/PromisesObjC.modulemap | 6 - .../PromisesObjC.release.xcconfig | 10 - .../leveldb-library-Info.plist | 26 - .../leveldb-library/leveldb-library-dummy.m | 5 - .../leveldb-library-prefix.pch | 12 - .../leveldb-library-umbrella.h | 31 - .../leveldb-library.debug.xcconfig | 13 - .../leveldb-library/leveldb-library.modulemap | 6 - .../leveldb-library.release.xcconfig | 13 - .../nanopb/nanopb-Info.plist | 26 - .../nanopb/nanopb-dummy.m | 5 - .../nanopb/nanopb-prefix.pch | 12 - .../nanopb/nanopb-umbrella.h | 26 - .../nanopb/nanopb.debug.xcconfig | 9 - .../nanopb/nanopb.modulemap | 6 - .../nanopb/nanopb.release.xcconfig | 9 - assign5/openTok/Pods/leveldb-library/LICENSE | 27 - .../openTok/Pods/leveldb-library/README.md | 225 - .../Pods/leveldb-library/db/builder.cc | 79 - .../openTok/Pods/leveldb-library/db/builder.h | 30 - assign5/openTok/Pods/leveldb-library/db/c.cc | 566 -- .../Pods/leveldb-library/db/db_impl.cc | 1550 ------ .../openTok/Pods/leveldb-library/db/db_impl.h | 216 - .../Pods/leveldb-library/db/db_iter.cc | 309 -- .../openTok/Pods/leveldb-library/db/db_iter.h | 26 - .../Pods/leveldb-library/db/dbformat.cc | 140 - .../Pods/leveldb-library/db/dbformat.h | 218 - .../Pods/leveldb-library/db/dumpfile.cc | 232 - .../Pods/leveldb-library/db/filename.cc | 141 - .../Pods/leveldb-library/db/filename.h | 84 - .../Pods/leveldb-library/db/log_format.h | 35 - .../Pods/leveldb-library/db/log_reader.cc | 274 - .../Pods/leveldb-library/db/log_reader.h | 112 - .../Pods/leveldb-library/db/log_writer.cc | 111 - .../Pods/leveldb-library/db/log_writer.h | 54 - .../Pods/leveldb-library/db/memtable.cc | 136 - .../Pods/leveldb-library/db/memtable.h | 87 - .../openTok/Pods/leveldb-library/db/repair.cc | 450 -- .../Pods/leveldb-library/db/skiplist.h | 382 -- .../Pods/leveldb-library/db/snapshot.h | 95 - .../Pods/leveldb-library/db/table_cache.cc | 120 - .../Pods/leveldb-library/db/table_cache.h | 58 - .../Pods/leveldb-library/db/version_edit.cc | 260 - .../Pods/leveldb-library/db/version_edit.h | 106 - .../Pods/leveldb-library/db/version_set.cc | 1585 ------ .../Pods/leveldb-library/db/version_set.h | 393 -- .../Pods/leveldb-library/db/write_batch.cc | 150 - .../leveldb-library/db/write_batch_internal.h | 45 - .../Pods/leveldb-library/include/leveldb/c.h | 270 - .../leveldb-library/include/leveldb/cache.h | 111 - .../include/leveldb/comparator.h | 64 - .../Pods/leveldb-library/include/leveldb/db.h | 167 - .../include/leveldb/dumpfile.h | 28 - .../leveldb-library/include/leveldb/env.h | 387 -- .../leveldb-library/include/leveldb/export.h | 33 - .../include/leveldb/filter_policy.h | 72 - .../include/leveldb/iterator.h | 112 - .../leveldb-library/include/leveldb/options.h | 187 - .../leveldb-library/include/leveldb/slice.h | 115 - .../leveldb-library/include/leveldb/status.h | 122 - .../leveldb-library/include/leveldb/table.h | 84 - .../include/leveldb/table_builder.h | 93 - .../include/leveldb/write_batch.h | 83 - .../openTok/Pods/leveldb-library/port/port.h | 19 - .../Pods/leveldb-library/port/port_example.h | 104 - .../Pods/leveldb-library/port/port_stdcxx.h | 153 - .../leveldb-library/port/thread_annotations.h | 108 - .../Pods/leveldb-library/table/block.cc | 266 - .../Pods/leveldb-library/table/block.h | 44 - .../leveldb-library/table/block_builder.cc | 108 - .../leveldb-library/table/block_builder.h | 55 - .../leveldb-library/table/filter_block.cc | 106 - .../Pods/leveldb-library/table/filter_block.h | 69 - .../Pods/leveldb-library/table/format.cc | 141 - .../Pods/leveldb-library/table/format.h | 100 - .../Pods/leveldb-library/table/iterator.cc | 76 - .../leveldb-library/table/iterator_wrapper.h | 92 - .../Pods/leveldb-library/table/merger.cc | 191 - .../Pods/leveldb-library/table/merger.h | 26 - .../Pods/leveldb-library/table/table.cc | 273 - .../leveldb-library/table/table_builder.cc | 265 - .../table/two_level_iterator.cc | 171 - .../table/two_level_iterator.h | 31 - .../Pods/leveldb-library/util/arena.cc | 66 - .../openTok/Pods/leveldb-library/util/arena.h | 71 - .../Pods/leveldb-library/util/bloom.cc | 92 - .../Pods/leveldb-library/util/cache.cc | 400 -- .../Pods/leveldb-library/util/coding.cc | 192 - .../Pods/leveldb-library/util/coding.h | 104 - .../Pods/leveldb-library/util/comparator.cc | 73 - .../Pods/leveldb-library/util/crc32c.cc | 380 -- .../Pods/leveldb-library/util/crc32c.h | 43 - .../openTok/Pods/leveldb-library/util/env.cc | 92 - .../Pods/leveldb-library/util/env_posix.cc | 876 ---- .../util/env_posix_test_helper.h | 28 - .../util/env_windows_test_helper.h | 25 - .../leveldb-library/util/filter_policy.cc | 11 - .../openTok/Pods/leveldb-library/util/hash.cc | 55 - .../openTok/Pods/leveldb-library/util/hash.h | 19 - .../Pods/leveldb-library/util/histogram.cc | 272 - .../Pods/leveldb-library/util/histogram.h | 44 - .../Pods/leveldb-library/util/logging.cc | 85 - .../Pods/leveldb-library/util/logging.h | 45 - .../Pods/leveldb-library/util/mutexlock.h | 39 - .../Pods/leveldb-library/util/no_destructor.h | 46 - .../Pods/leveldb-library/util/options.cc | 14 - .../Pods/leveldb-library/util/posix_logger.h | 130 - .../Pods/leveldb-library/util/random.h | 63 - .../Pods/leveldb-library/util/status.cc | 77 - .../Pods/leveldb-library/util/testharness.cc | 81 - .../Pods/leveldb-library/util/testharness.h | 141 - .../Pods/leveldb-library/util/testutil.h | 66 - .../leveldb-library/util/windows_logger.h | 124 - assign5/openTok/Pods/nanopb/LICENSE.txt | 20 - assign5/openTok/Pods/nanopb/README.md | 71 - assign5/openTok/Pods/nanopb/pb.h | 593 --- assign5/openTok/Pods/nanopb/pb_common.c | 97 - assign5/openTok/Pods/nanopb/pb_common.h | 42 - assign5/openTok/Pods/nanopb/pb_decode.c | 1508 ------ assign5/openTok/Pods/nanopb/pb_decode.h | 175 - assign5/openTok/Pods/nanopb/pb_encode.c | 869 ---- assign5/openTok/Pods/nanopb/pb_encode.h | 170 - .../openTok/openTok.xcodeproj/project.pbxproj | 429 -- .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../UserInterfaceState.xcuserstate | Bin 9289 -> 0 bytes .../xcschemes/xcschememanagement.plist | 14 - .../contents.xcworkspacedata | 10 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../UserInterfaceState.xcuserstate | Bin 46383 -> 0 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 6 - assign5/openTok/openTok/AppDelegate.swift | 41 - .../AppIcon.appiconset/Contents.json | 98 - .../openTok/Assets.xcassets/Contents.json | 6 - .../Base.lproj/LaunchScreen.storyboard | 25 - .../openTok/Base.lproj/Main.storyboard | 197 - .../openTok/openTok/GoogleService-Info.plist | 36 - assign5/openTok/openTok/Info.plist | 64 - assign5/openTok/openTok/MainController.swift | 31 - .../openTok/openTok/PlayerController.swift | 258 - .../openTok/RecordViewController.swift | 36 - assign5/openTok/openTok/SceneDelegate.swift | 53 - assign5/openTok/openTok/URLController.swift | 58 - 648 files changed, 84656 deletions(-) delete mode 100644 assign5/openTok/.DS_Store delete mode 100644 assign5/openTok/Podfile delete mode 100644 assign5/openTok/Podfile.lock delete mode 100755 assign5/openTok/Pods/Firebase/CoreOnly/Sources/Firebase.h delete mode 100755 assign5/openTok/Pods/Firebase/CoreOnly/Sources/module.modulemap delete mode 100644 assign5/openTok/Pods/Firebase/LICENSE delete mode 100644 assign5/openTok/Pods/Firebase/README.md delete mode 100644 assign5/openTok/Pods/FirebaseAuthInterop/Interop/Auth/Public/FIRAuthInterop.h delete mode 100644 assign5/openTok/Pods/FirebaseAuthInterop/LICENSE delete mode 100644 assign5/openTok/Pods/FirebaseAuthInterop/README.md delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.m delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRApp.m delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRAppAssociationRegistration.m delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.m delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponent.m delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentContainer.m delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentType.m delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRConfiguration.m delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRCoreDiagnosticsConnector.m delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRDependency.m delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRDiagnosticsData.m delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRErrors.m delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRHeartbeatInfo.m delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRLogger.m delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIROptions.m delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.m delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppAssociationRegistration.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppInternal.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponent.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainer.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainerInternal.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentType.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRConfigurationInternal.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDependency.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDiagnosticsData.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRErrorCode.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRErrors.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLibrary.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLogger.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIROptionsInternal.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRApp.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRConfiguration.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRLoggerLevel.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIROptions.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore.h delete mode 100644 assign5/openTok/Pods/FirebaseCore/LICENSE delete mode 100644 assign5/openTok/Pods/FirebaseCore/README.md delete mode 100644 assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m delete mode 100644 assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c delete mode 100644 assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h delete mode 100644 assign5/openTok/Pods/FirebaseCoreDiagnostics/LICENSE delete mode 100644 assign5/openTok/Pods/FirebaseCoreDiagnostics/README.md delete mode 100644 assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h delete mode 100644 assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h delete mode 100644 assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/LICENSE delete mode 100644 assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/README.md delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDataSnapshot.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabase.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseComponent.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseComponent.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseConfig.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseConfig.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseQuery.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRMutableData.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRServerValue.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRTransactionResult.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDataSnapshot_Private.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabaseQuery_Private.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabaseReference_Private.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabase_Private.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRMutableData_Private.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRTransactionResult_Private.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FTypedefs_Private.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Constants/FConstants.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Constants/FConstants.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FCompoundHash.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FCompoundHash.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FListenProvider.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FListenProvider.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FPersistentConnection.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FPersistentConnection.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQueryParams.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQueryParams.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQuerySpec.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQuerySpec.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRangeMerge.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRangeMerge.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoInfo.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoInfo.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoManager.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoManager.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo_Private.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FServerValues.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FServerValues.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSnapshotHolder.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSnapshotHolder.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSparseSnapshotTree.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSparseSnapshotTree.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncPoint.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncPoint.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncTree.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncTree.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteRecord.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteRecord.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTree.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTree.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTreeRef.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTreeRef.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FAckUserWrite.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FAckUserWrite.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FMerge.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FMerge.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperation.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperationSource.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperationSource.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOverwrite.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOverwrite.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FIRRetryHelper.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FIRRetryHelper.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FImmutableTree.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FImmutableTree.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FPath.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FPath.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTree.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTree.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTreeNode.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTreeNode.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCacheNode.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCacheNode.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCancelEvent.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCancelEvent.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChange.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChange.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChildEventRegistration.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChildEventRegistration.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FDataEvent.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FDataEvent.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEvent.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRaiser.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRaiser.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRegistration.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FKeepSyncedEventRegistration.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FKeepSyncedEventRegistration.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FValueEventRegistration.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FValueEventRegistration.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FView.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FView.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FViewCache.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FViewCache.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FChildChangeAccumulator.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FChildChangeAccumulator.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FCompleteChildSource.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FIndexedFilter.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FIndexedFilter.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FLimitedFilter.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FLimitedFilter.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FNodeFilter.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FClock.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FClock.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FEventGenerator.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FEventGenerator.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIRDatabaseConfig_Private.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIRDatabaseReference.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIndex.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIndex.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FKeyIndex.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FKeyIndex.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FListenComplete.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FListenComplete.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FMaxNode.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FMaxNode.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FNamedNode.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FNamedNode.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPathIndex.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPathIndex.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPriorityIndex.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPriorityIndex.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FRangedFilter.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FRangedFilter.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FTransformedEnumerator.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FTransformedEnumerator.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FValueIndex.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FValueIndex.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessor.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessor.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessorResult.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessorResult.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FAuthTokenProvider.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FAuthTokenProvider.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FIRNoopAuthTokenProvider.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FIRNoopAuthTokenProvider.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FCachePolicy.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FCachePolicy.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FLevelDBStorageEngine.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FLevelDBStorageEngine.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPendingPut.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPendingPut.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPersistenceManager.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPersistenceManager.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPruneForest.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPruneForest.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FStorageEngine.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQuery.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQuery.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQueryManager.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQueryManager.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDataEventType.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDataSnapshot.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabase.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabaseQuery.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabaseReference.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRMutableData.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRServerValue.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRTransactionResult.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FirebaseDatabase.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FConnection.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FConnection.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FWebSocketConnection.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FWebSocketConnection.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FChildrenNode.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FChildrenNode.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FCompoundWrite.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FCompoundWrite.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FEmptyNode.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FEmptyNode.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FIndexedNode.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FIndexedNode.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FLeafNode.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FLeafNode.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FNode.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FSnapshotUtilities.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FSnapshotUtilities.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FAtomicNumber.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FAtomicNumber.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FEventEmitter.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FEventEmitter.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FNextPushId.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FNextPushId.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FParsedUrl.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FParsedUrl.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FStringUtilities.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FStringUtilities.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FTypedefs.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FUtilities.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FUtilities.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FValidation.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FValidation.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleBoolBlock.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleBoolBlock.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleFirebase.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleFirebase.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleNodePath.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleNodePath.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjectNode.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjectNode.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjects.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjects.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTuplePathValue.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTuplePathValue.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleSetIdPath.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleSetIdPath.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleStringNode.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleStringNode.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTSN.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTSN.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTransaction.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTransaction.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleUserCallback.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleUserCallback.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBNode.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/FSRWebSocket.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/FSRWebSocket.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.m delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/fbase64.c delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/fbase64.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/Wrap-leveldb/APLevelDB.h delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/Wrap-leveldb/APLevelDB.mm delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/LICENSE delete mode 100644 assign5/openTok/Pods/FirebaseDatabase/README.md delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORClock.m delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORDataFuture.m delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCOREvent.m delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORFlatFileStorage.m delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORLifecycle.m delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORPlatform.m delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORReachability.m delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORRegistrar.m delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransformer.m delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransport.m delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadCoordinator.m delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadPackage.m delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORDataFuture.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability_Private.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer_Private.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransport_Private.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadPackage_Private.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORAssert.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORClock.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORConsoleLogger.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREvent.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventDataObject.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventTransformer.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORLifecycle.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPlatform.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPrioritizer.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORReachability.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORRegistrar.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORStorageProtocol.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTargets.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTransport.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploadPackage.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploader.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/LICENSE delete mode 100644 assign5/openTok/Pods/GoogleDataTransport/README.md delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTCompressionHelper.m delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTNanopbHelpers.m delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTPrioritizer.m delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTUploader.m delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCOREvent+NetworkConnectionInfo.m delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTCompressionHelper.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTPrioritizer.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTUploader.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCOREvent+NetworkConnectionInfo.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/LICENSE delete mode 100644 assign5/openTok/Pods/GoogleDataTransportCCTSupport/README.md delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/GULHeartbeatDateStorage.m delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/GULSecureCoding.m delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULHeartbeatDateStorage.h delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULKeychainStorage.h delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULKeychainUtils.h delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULSecureCoding.h delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainStorage.m delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainUtils.m delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.h delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/LICENSE delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/GULLogger.m delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/Private/GULLogger.h delete mode 100644 assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/Public/GULLoggerLevel.h delete mode 100644 assign5/openTok/Pods/GoogleUtilities/README.md delete mode 100755 assign5/openTok/Pods/Headers/Private/Firebase/Firebase.h delete mode 100644 assign5/openTok/Pods/Headers/Private/FirebaseAuthInterop/FIRAuthInterop.h delete mode 100644 assign5/openTok/Pods/Headers/Private/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h delete mode 100644 assign5/openTok/Pods/Headers/Private/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h delete mode 100755 assign5/openTok/Pods/Headers/Public/Firebase/Firebase.h delete mode 100644 assign5/openTok/Pods/Headers/Public/FirebaseAuthInterop/FIRAuthInterop.h delete mode 100644 assign5/openTok/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h delete mode 100644 assign5/openTok/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h delete mode 100644 assign5/openTok/Pods/Manifest.lock delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/project.pbxproj delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/Firebase.xcscheme delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseAuthInterop.xcscheme delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCore.xcscheme delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCoreDiagnostics.xcscheme delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCoreDiagnosticsInterop.xcscheme delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseDatabase.xcscheme delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleDataTransport.xcscheme delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleDataTransportCCTSupport.xcscheme delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleUtilities.xcscheme delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/Pods-openTok.xcscheme delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/PromisesObjC.xcscheme delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/leveldb-library.xcscheme delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/nanopb.xcscheme delete mode 100644 assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 assign5/openTok/Pods/PromisesObjC/LICENSE delete mode 100644 assign5/openTok/Pods/PromisesObjC/README.md delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+All.m delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Always.m delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Any.m delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Async.m delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Await.m delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Catch.m delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Delay.m delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Do.m delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Race.m delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Recover.m delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Reduce.m delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Retry.m delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Testing.m delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Then.m delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Timeout.m delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Validate.m delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Wrap.m delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise.m delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromiseError.m delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+All.h delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Always.h delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Any.h delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Async.h delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Await.h delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Catch.h delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Delay.h delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Do.h delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Race.h delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Recover.h delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Reduce.h delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Retry.h delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Testing.h delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Then.h delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Timeout.h delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Validate.h delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Wrap.h delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise.h delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromiseError.h delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromisePrivate.h delete mode 100644 assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromises.h delete mode 100644 assign5/openTok/Pods/Target Support Files/Firebase/Firebase.debug.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/Firebase/Firebase.release.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop.debug.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop.release.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-Info.plist delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-dummy.m delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-umbrella.h delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.debug.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.modulemap delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.release.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-dummy.m delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-umbrella.h delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.debug.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.release.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.debug.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.release.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-Info.plist delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-dummy.m delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-umbrella.h delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.debug.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.modulemap delete mode 100644 assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.release.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-dummy.m delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-umbrella.h delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.debug.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.release.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-Info.plist delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-dummy.m delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-umbrella.h delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.debug.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.release.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-dummy.m delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-umbrella.h delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.debug.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.modulemap delete mode 100644 assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.release.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-Info.plist delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-acknowledgements.markdown delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-acknowledgements.plist delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-dummy.m delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Debug-input-files.xcfilelist delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Debug-output-files.xcfilelist delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Release-input-files.xcfilelist delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Release-output-files.xcfilelist delete mode 100755 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks.sh delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-umbrella.h delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.debug.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.modulemap delete mode 100644 assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.release.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-Info.plist delete mode 100644 assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-dummy.m delete mode 100644 assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-umbrella.h delete mode 100644 assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.debug.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.modulemap delete mode 100644 assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.release.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-Info.plist delete mode 100644 assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-dummy.m delete mode 100644 assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-prefix.pch delete mode 100644 assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-umbrella.h delete mode 100644 assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.debug.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.modulemap delete mode 100644 assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.release.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/nanopb/nanopb-Info.plist delete mode 100644 assign5/openTok/Pods/Target Support Files/nanopb/nanopb-dummy.m delete mode 100644 assign5/openTok/Pods/Target Support Files/nanopb/nanopb-prefix.pch delete mode 100644 assign5/openTok/Pods/Target Support Files/nanopb/nanopb-umbrella.h delete mode 100644 assign5/openTok/Pods/Target Support Files/nanopb/nanopb.debug.xcconfig delete mode 100644 assign5/openTok/Pods/Target Support Files/nanopb/nanopb.modulemap delete mode 100644 assign5/openTok/Pods/Target Support Files/nanopb/nanopb.release.xcconfig delete mode 100644 assign5/openTok/Pods/leveldb-library/LICENSE delete mode 100644 assign5/openTok/Pods/leveldb-library/README.md delete mode 100644 assign5/openTok/Pods/leveldb-library/db/builder.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/db/builder.h delete mode 100644 assign5/openTok/Pods/leveldb-library/db/c.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/db/db_impl.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/db/db_impl.h delete mode 100644 assign5/openTok/Pods/leveldb-library/db/db_iter.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/db/db_iter.h delete mode 100644 assign5/openTok/Pods/leveldb-library/db/dbformat.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/db/dbformat.h delete mode 100644 assign5/openTok/Pods/leveldb-library/db/dumpfile.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/db/filename.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/db/filename.h delete mode 100644 assign5/openTok/Pods/leveldb-library/db/log_format.h delete mode 100644 assign5/openTok/Pods/leveldb-library/db/log_reader.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/db/log_reader.h delete mode 100644 assign5/openTok/Pods/leveldb-library/db/log_writer.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/db/log_writer.h delete mode 100644 assign5/openTok/Pods/leveldb-library/db/memtable.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/db/memtable.h delete mode 100644 assign5/openTok/Pods/leveldb-library/db/repair.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/db/skiplist.h delete mode 100644 assign5/openTok/Pods/leveldb-library/db/snapshot.h delete mode 100644 assign5/openTok/Pods/leveldb-library/db/table_cache.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/db/table_cache.h delete mode 100644 assign5/openTok/Pods/leveldb-library/db/version_edit.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/db/version_edit.h delete mode 100644 assign5/openTok/Pods/leveldb-library/db/version_set.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/db/version_set.h delete mode 100644 assign5/openTok/Pods/leveldb-library/db/write_batch.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/db/write_batch_internal.h delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/c.h delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/cache.h delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/comparator.h delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/db.h delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/dumpfile.h delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/env.h delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/export.h delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/filter_policy.h delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/iterator.h delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/options.h delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/slice.h delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/status.h delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/table.h delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/table_builder.h delete mode 100644 assign5/openTok/Pods/leveldb-library/include/leveldb/write_batch.h delete mode 100644 assign5/openTok/Pods/leveldb-library/port/port.h delete mode 100644 assign5/openTok/Pods/leveldb-library/port/port_example.h delete mode 100644 assign5/openTok/Pods/leveldb-library/port/port_stdcxx.h delete mode 100644 assign5/openTok/Pods/leveldb-library/port/thread_annotations.h delete mode 100644 assign5/openTok/Pods/leveldb-library/table/block.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/table/block.h delete mode 100644 assign5/openTok/Pods/leveldb-library/table/block_builder.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/table/block_builder.h delete mode 100644 assign5/openTok/Pods/leveldb-library/table/filter_block.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/table/filter_block.h delete mode 100644 assign5/openTok/Pods/leveldb-library/table/format.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/table/format.h delete mode 100644 assign5/openTok/Pods/leveldb-library/table/iterator.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/table/iterator_wrapper.h delete mode 100644 assign5/openTok/Pods/leveldb-library/table/merger.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/table/merger.h delete mode 100644 assign5/openTok/Pods/leveldb-library/table/table.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/table/table_builder.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/table/two_level_iterator.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/table/two_level_iterator.h delete mode 100644 assign5/openTok/Pods/leveldb-library/util/arena.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/util/arena.h delete mode 100644 assign5/openTok/Pods/leveldb-library/util/bloom.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/util/cache.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/util/coding.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/util/coding.h delete mode 100644 assign5/openTok/Pods/leveldb-library/util/comparator.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/util/crc32c.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/util/crc32c.h delete mode 100644 assign5/openTok/Pods/leveldb-library/util/env.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/util/env_posix.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/util/env_posix_test_helper.h delete mode 100644 assign5/openTok/Pods/leveldb-library/util/env_windows_test_helper.h delete mode 100644 assign5/openTok/Pods/leveldb-library/util/filter_policy.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/util/hash.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/util/hash.h delete mode 100644 assign5/openTok/Pods/leveldb-library/util/histogram.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/util/histogram.h delete mode 100644 assign5/openTok/Pods/leveldb-library/util/logging.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/util/logging.h delete mode 100644 assign5/openTok/Pods/leveldb-library/util/mutexlock.h delete mode 100644 assign5/openTok/Pods/leveldb-library/util/no_destructor.h delete mode 100644 assign5/openTok/Pods/leveldb-library/util/options.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/util/posix_logger.h delete mode 100644 assign5/openTok/Pods/leveldb-library/util/random.h delete mode 100644 assign5/openTok/Pods/leveldb-library/util/status.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/util/testharness.cc delete mode 100644 assign5/openTok/Pods/leveldb-library/util/testharness.h delete mode 100644 assign5/openTok/Pods/leveldb-library/util/testutil.h delete mode 100644 assign5/openTok/Pods/leveldb-library/util/windows_logger.h delete mode 100644 assign5/openTok/Pods/nanopb/LICENSE.txt delete mode 100644 assign5/openTok/Pods/nanopb/README.md delete mode 100644 assign5/openTok/Pods/nanopb/pb.h delete mode 100644 assign5/openTok/Pods/nanopb/pb_common.c delete mode 100644 assign5/openTok/Pods/nanopb/pb_common.h delete mode 100644 assign5/openTok/Pods/nanopb/pb_decode.c delete mode 100644 assign5/openTok/Pods/nanopb/pb_decode.h delete mode 100644 assign5/openTok/Pods/nanopb/pb_encode.c delete mode 100644 assign5/openTok/Pods/nanopb/pb_encode.h delete mode 100644 assign5/openTok/openTok.xcodeproj/project.pbxproj delete mode 100644 assign5/openTok/openTok.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 assign5/openTok/openTok.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 assign5/openTok/openTok.xcodeproj/project.xcworkspace/xcuserdata/keleher.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 assign5/openTok/openTok.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 assign5/openTok/openTok.xcworkspace/contents.xcworkspacedata delete mode 100644 assign5/openTok/openTok.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 assign5/openTok/openTok.xcworkspace/xcuserdata/keleher.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 assign5/openTok/openTok.xcworkspace/xcuserdata/keleher.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist delete mode 100644 assign5/openTok/openTok/AppDelegate.swift delete mode 100644 assign5/openTok/openTok/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 assign5/openTok/openTok/Assets.xcassets/Contents.json delete mode 100644 assign5/openTok/openTok/Base.lproj/LaunchScreen.storyboard delete mode 100644 assign5/openTok/openTok/Base.lproj/Main.storyboard delete mode 100644 assign5/openTok/openTok/GoogleService-Info.plist delete mode 100644 assign5/openTok/openTok/Info.plist delete mode 100644 assign5/openTok/openTok/MainController.swift delete mode 100644 assign5/openTok/openTok/PlayerController.swift delete mode 100644 assign5/openTok/openTok/RecordViewController.swift delete mode 100644 assign5/openTok/openTok/SceneDelegate.swift delete mode 100644 assign5/openTok/openTok/URLController.swift diff --git a/assign5/openTok/.DS_Store b/assign5/openTok/.DS_Store deleted file mode 100644 index 646f615f5c5897687ad6966fc81b410d9d8577da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKu};H44E2=`0hS^b#(V%m>dF+VAhEX}P})>bXt<~d!G!V!Ec^pA6Cc1Y@dG@c zt&%831O|kVE&1NXXXoN~Q5+MI8{A}lq8<@NP{z(ChBd<LtPSa?g%@48$A~;#(gEGk zwBc=rzsLZe-40Hzpc!3J_53_#uobk#>c!%$Kb-o!kQC-y?V@s@rjv!Az&kpbKit3V zzaF)X%zhYIoL8UpnICv}ZGN|~F7dWrBga#`ud{lNhokn9)jVGwpCZk(<-WQ9$o2ct z^?b*iuZb~W3>X7nF@T!Q5^W3GXbczw#=wdJ{yxM|#ze6c44)1Rp#=bTVGe>h_Yxcv zD<+DiAXXqwLV*(Mw8d}|4tuPAiDD@z;pDXWaJsY84#kDtasN2DlS>3`GzN@;Is+SW z+2i_u{CWRh53(y`z!>;f47hGOOb19wYilDpuC+0A3}s=zQg9W5Nhrne<x;!{4FY@2 W6JVlP3c>=hAAvxF4aUH)GVl(9AaV%+ diff --git a/assign5/openTok/Podfile b/assign5/openTok/Podfile deleted file mode 100644 index c254681..0000000 --- a/assign5/openTok/Podfile +++ /dev/null @@ -1,10 +0,0 @@ -# Uncomment the next line to define a global platform for your project -# platform :ios, '9.0' - -target 'openTok' do - # Comment the next line if you don't want to use dynamic frameworks - use_frameworks! - - # Pods for openTok - pod 'Firebase/Database' -end diff --git a/assign5/openTok/Podfile.lock b/assign5/openTok/Podfile.lock deleted file mode 100644 index 0fa5d3c..0000000 --- a/assign5/openTok/Podfile.lock +++ /dev/null @@ -1,74 +0,0 @@ -PODS: - - Firebase/CoreOnly (6.23.0): - - FirebaseCore (= 6.6.7) - - Firebase/Database (6.23.0): - - Firebase/CoreOnly - - FirebaseDatabase (~> 6.2.0) - - FirebaseAuthInterop (1.1.0) - - FirebaseCore (6.6.7): - - FirebaseCoreDiagnostics (~> 1.2) - - FirebaseCoreDiagnosticsInterop (~> 1.2) - - GoogleUtilities/Environment (~> 6.5) - - GoogleUtilities/Logger (~> 6.5) - - FirebaseCoreDiagnostics (1.2.4): - - FirebaseCoreDiagnosticsInterop (~> 1.2) - - GoogleDataTransportCCTSupport (~> 3.0) - - GoogleUtilities/Environment (~> 6.5) - - GoogleUtilities/Logger (~> 6.5) - - nanopb (~> 0.3.901) - - FirebaseCoreDiagnosticsInterop (1.2.0) - - FirebaseDatabase (6.2.0): - - FirebaseAuthInterop (~> 1.0) - - FirebaseCore (~> 6.0) - - leveldb-library (~> 1.22) - - GoogleDataTransport (6.0.0) - - GoogleDataTransportCCTSupport (3.0.0): - - GoogleDataTransport (~> 6.0) - - nanopb (~> 0.3.901) - - GoogleUtilities/Environment (6.6.0): - - PromisesObjC (~> 1.2) - - GoogleUtilities/Logger (6.6.0): - - GoogleUtilities/Environment - - leveldb-library (1.22) - - nanopb (0.3.9011): - - nanopb/decode (= 0.3.9011) - - nanopb/encode (= 0.3.9011) - - nanopb/decode (0.3.9011) - - nanopb/encode (0.3.9011) - - PromisesObjC (1.2.8) - -DEPENDENCIES: - - Firebase/Database - -SPEC REPOS: - trunk: - - Firebase - - FirebaseAuthInterop - - FirebaseCore - - FirebaseCoreDiagnostics - - FirebaseCoreDiagnosticsInterop - - FirebaseDatabase - - GoogleDataTransport - - GoogleDataTransportCCTSupport - - GoogleUtilities - - leveldb-library - - nanopb - - PromisesObjC - -SPEC CHECKSUMS: - Firebase: 585ae467b3edda6a5444e788fda6888f024d8d6f - FirebaseAuthInterop: a0f37ae05833af156e72028f648d313f7e7592e9 - FirebaseCore: a2788a0d5f6c1dff17b8f79b4a73654a8d4bfdbd - FirebaseCoreDiagnostics: b59c024493a409f8aecba02c99928d0d8431d159 - FirebaseCoreDiagnosticsInterop: 296e2c5f5314500a850ad0b83e9e7c10b011a850 - FirebaseDatabase: cbf2b9efe39b3f113616a2f1f140839f49d797e0 - GoogleDataTransport: 061fe7d9b476710e3cd8ea51e8e07d8b67c2b420 - GoogleDataTransportCCTSupport: 0f39025e8cf51f168711bd3fb773938d7e62ddb5 - GoogleUtilities: 39530bc0ad980530298e9c4af8549e991fd033b1 - leveldb-library: 55d93ee664b4007aac644a782d11da33fba316f7 - nanopb: 18003b5e52dab79db540fe93fe9579f399bd1ccd - PromisesObjC: c119f3cd559f50b7ae681fa59dc1acd19173b7e6 - -PODFILE CHECKSUM: 3bedbb01a41b9d1114e64e9f002246e83fffeb84 - -COCOAPODS: 1.9.1 diff --git a/assign5/openTok/Pods/Firebase/CoreOnly/Sources/Firebase.h b/assign5/openTok/Pods/Firebase/CoreOnly/Sources/Firebase.h deleted file mode 100755 index e5049ca..0000000 --- a/assign5/openTok/Pods/Firebase/CoreOnly/Sources/Firebase.h +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import <FirebaseCore/FirebaseCore.h> - -#if !defined(__has_include) - #error "Firebase.h won't import anything if your compiler doesn't support __has_include. Please \ - import the headers individually." -#else - #if __has_include(<FirebaseAnalytics/FirebaseAnalytics.h>) - #import <FirebaseAnalytics/FirebaseAnalytics.h> - #endif - - #if __has_include(<FirebaseAuth/FirebaseAuth.h>) - #import <FirebaseAuth/FirebaseAuth.h> - #endif - - #if __has_include(<FirebaseCrashlytics/FirebaseCrashlytics.h>) - #import <FirebaseCrashlytics/FirebaseCrashlytics.h> - #endif - - #if __has_include(<FirebaseDatabase/FirebaseDatabase.h>) - #import <FirebaseDatabase/FirebaseDatabase.h> - #endif - - #if __has_include(<FirebaseDynamicLinks/FirebaseDynamicLinks.h>) - #import <FirebaseDynamicLinks/FirebaseDynamicLinks.h> - #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>) - #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #warning "FirebaseAnalytics.framework is not included in your target. Please add \ -`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ -Firebase Dynamic Links works as intended." - #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #endif - #endif - - #if __has_include(<FirebaseFirestore/FirebaseFirestore.h>) - #import <FirebaseFirestore/FirebaseFirestore.h> - #endif - - #if __has_include(<FirebaseFunctions/FirebaseFunctions.h>) - #import <FirebaseFunctions/FirebaseFunctions.h> - #endif - - #if __has_include(<FirebaseInAppMessaging/FirebaseInAppMessaging.h>) - #import <FirebaseInAppMessaging/FirebaseInAppMessaging.h> - #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>) - #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #warning "FirebaseAnalytics.framework is not included in your target. Please add \ -`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ -Firebase In App Messaging works as intended." - #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #endif - #endif - - #if __has_include(<FirebaseInstanceID/FirebaseInstanceID.h>) - #import <FirebaseInstanceID/FirebaseInstanceID.h> - #endif - - #if __has_include(<FirebaseMessaging/FirebaseMessaging.h>) - #import <FirebaseMessaging/FirebaseMessaging.h> - #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>) - #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #warning "FirebaseAnalytics.framework is not included in your target. Please add \ -`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ -Firebase Messaging works as intended." - #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #endif -#endif - - #if __has_include(<FirebaseMLCommon/FirebaseMLCommon.h>) - #import <FirebaseMLCommon/FirebaseMLCommon.h> - #endif - - #if __has_include(<FirebaseMLModelInterpreter/FirebaseMLModelInterpreter.h>) - #import <FirebaseMLModelInterpreter/FirebaseMLModelInterpreter.h> - #endif - - #if __has_include(<FirebaseMLNLLanguageID/FirebaseMLNLLanguageID.h>) - #import <FirebaseMLNLLanguageID/FirebaseMLNLLanguageID.h> - #endif - - #if __has_include(<FirebaseMLNLSmartReply/FirebaseMLNLSmartReply.h>) - #import <FirebaseMLNLSmartReply/FirebaseMLNLSmartReply.h> - #endif - - #if __has_include(<FirebaseMLNLTranslate/FirebaseMLNLTranslate.h>) - #import <FirebaseMLNLTranslate/FirebaseMLNLTranslate.h> - #endif - - #if __has_include(<FirebaseMLNaturalLanguage/FirebaseMLNaturalLanguage.h>) - #import <FirebaseMLNaturalLanguage/FirebaseMLNaturalLanguage.h> - #endif - - #if __has_include(<FirebaseMLVision/FirebaseMLVision.h>) - #import <FirebaseMLVision/FirebaseMLVision.h> - #endif - - #if __has_include(<FirebaseMLVisionAutoML/FirebaseMLVisionAutoML.h>) - #import <FirebaseMLVisionAutoML/FirebaseMLVisionAutoML.h> - #endif - - #if __has_include(<FirebaseMLVisionBarcodeModel/FirebaseMLVisionBarcodeModel.h>) - #import <FirebaseMLVisionBarcodeModel/FirebaseMLVisionBarcodeModel.h> - #endif - - #if __has_include(<FirebaseMLVisionFaceModel/FirebaseMLVisionFaceModel.h>) - #import <FirebaseMLVisionFaceModel/FirebaseMLVisionFaceModel.h> - #endif - - #if __has_include(<FirebaseMLVisionLabelModel/FirebaseMLVisionLabelModel.h>) - #import <FirebaseMLVisionLabelModel/FirebaseMLVisionLabelModel.h> - #endif - - #if __has_include(<FirebaseMLVisionObjectDetection/FirebaseMLVisionObjectDetection.h>) - #import <FirebaseMLVisionObjectDetection/FirebaseMLVisionObjectDetection.h> - #endif - - #if __has_include(<FirebaseMLVisionTextModel/FirebaseMLVisionTextModel.h>) - #import <FirebaseMLVisionTextModel/FirebaseMLVisionTextModel.h> - #endif - - #if __has_include(<FirebasePerformance/FirebasePerformance.h>) - #import <FirebasePerformance/FirebasePerformance.h> - #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>) - #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #warning "FirebaseAnalytics.framework is not included in your target. Please add \ -`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ -Firebase Performance works as intended." - #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #endif - #endif - - #if __has_include(<FirebaseRemoteConfig/FirebaseRemoteConfig.h>) - #import <FirebaseRemoteConfig/FirebaseRemoteConfig.h> - #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>) - #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #warning "FirebaseAnalytics.framework is not included in your target. Please add \ -`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ -Firebase Remote Config works as intended." - #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #endif - #endif - - #if __has_include(<FirebaseStorage/FirebaseStorage.h>) - #import <FirebaseStorage/FirebaseStorage.h> - #endif - - #if __has_include(<GoogleMobileAds/GoogleMobileAds.h>) - #import <GoogleMobileAds/GoogleMobileAds.h> - #endif - - #if __has_include(<Fabric/Fabric.h>) - #import <Fabric/Fabric.h> - #endif - - #if __has_include(<Crashlytics/Crashlytics.h>) - #import <Crashlytics/Crashlytics.h> - #endif - -#endif // defined(__has_include) diff --git a/assign5/openTok/Pods/Firebase/CoreOnly/Sources/module.modulemap b/assign5/openTok/Pods/Firebase/CoreOnly/Sources/module.modulemap deleted file mode 100755 index 3685b54..0000000 --- a/assign5/openTok/Pods/Firebase/CoreOnly/Sources/module.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module Firebase { - export * - header "Firebase.h" -} \ No newline at end of file diff --git a/assign5/openTok/Pods/Firebase/LICENSE b/assign5/openTok/Pods/Firebase/LICENSE deleted file mode 100644 index d645695..0000000 --- a/assign5/openTok/Pods/Firebase/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/assign5/openTok/Pods/Firebase/README.md b/assign5/openTok/Pods/Firebase/README.md deleted file mode 100644 index b04a270..0000000 --- a/assign5/openTok/Pods/Firebase/README.md +++ /dev/null @@ -1,282 +0,0 @@ -# Firebase iOS Open Source Development - [![Actions Status][gh-auth-badge]][gh-actions] - [![Actions Status][gh-core-badge]][gh-actions] - [![Actions Status][gh-datatransport-badge]][gh-actions] - [![Actions Status][gh-dynamiclinks-badge]][gh-actions] - [![Actions Status][gh-firebasepod-badge]][gh-actions] - [![Actions Status][gh-firestore-badge]][gh-actions] - [![Actions Status][gh-interop-badge]][gh-actions] - [![Actions Status][gh-messaging-badge]][gh-actions] - [![Actions Status][gh-storage-badge]][gh-actions] - [![Actions Status][gh-symbolcollision-badge]][gh-actions] - [![Actions Status][gh-zip-badge]][gh-actions] - [](https://travis-ci.org/firebase/firebase-ios-sdk) - -This repository contains all Firebase iOS SDK source except FirebaseAnalytics, -FirebasePerformance, and FirebaseML. - -The repository also includes GoogleUtilities source. The -[GoogleUtilities](GoogleUtilities/README.md) pod is -a set of utilities used by Firebase and other Google products. - -Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -## Installation - -See the three subsections for details about three different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) - -### Standard pod install - -Go to -[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). - -### Installing from GitHub - -For releases starting with 5.0.0, the source for each release is also deployed -to CocoaPods master and available via standard -[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). - -These instructions can be used to access the Firebase repo at other branches, -tags, or commits. - -#### Background - -See -[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) -for instructions and options about overriding pod source locations. - -#### Accessing Firebase Source Snapshots - -All of the official releases are tagged in this repo and available via CocoaPods. To access a local -source snapshot or unreleased branch, use Podfile directives like the following: - -To access FirebaseFirestore via a branch: -``` -pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -``` - -To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: - -``` -pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' -pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' -``` - -### Carthage (iOS only) - -Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). - -### Rome - -Instructions for installing binary frameworks via -[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). - -### Using Firebase from a Framework or a library - -[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md) - -## Development - -To develop Firebase software in this repository, ensure that you have at least -the following software: - - * Xcode 10.1 (or later) - * CocoaPods 1.7.2 (or later) - * [CocoaPods generate](https://github.com/square/cocoapods-generate) - -For the pod that you want to develop: - -`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios` - -Note: If the CocoaPods cache is out of date, you may need to run -`pod repo update` before the `pod gen` command. - -Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for -those platforms. Since 10.2, Xcode does not properly handle multi-platform -CocoaPods workspaces. - -Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). - -### Development for Catalyst -* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` -* Check the Mac box in the App-iOS Build Settings -* Sign the App in the Settings Signing & Capabilities tab -* Click Pods in the Project Manager -* Add Signing to the iOS host app and unit test targets -* Select the Unit-unit scheme -* Run it to build and test - -### Adding a New Firebase Pod - -See [AddNewPod.md](AddNewPod.md). - -### Code Formatting - -To ensure that the code is formatted consistently, run the script -[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) -before creating a PR. - -Travis will verify that any code changes are done in a style compliant way. Install -`clang-format` and `swiftformat`. -These commands will get the right versions: - -``` -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c6f1cbd/Formula/clang-format.rb -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c13eda8/Formula/swiftformat.rb -``` - -Note: if you already have a newer version of these installed you may need to -`brew switch` to this version. - -To update this section, find the versions of clang-format and swiftformat.rb to -match the versions in the CI failure logs -[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). - -### Running Unit Tests - -Select a scheme and press Command-u to build a component and run its unit tests. - -#### Viewing Code Coverage (Deprecated) - -First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. - -After running the `AllUnitTests_iOS` scheme in Xcode, execute -`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` -at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. - -### Running Sample Apps -In order to run the sample apps and integration tests, you'll need valid -`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist -files without real values, but can be replaced with real plist files. To get your own -`GoogleService-Info.plist` files: - -1. Go to the [Firebase Console](https://console.firebase.google.com/) -2. Create a new Firebase project, if you don't already have one -3. For each sample app you want to test, create a new Firebase app with the sample app's bundle -identifier (e.g. `com.google.Database-Example`) -4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file -(e.g. in [Example/Database/App/](Example/Database/App/)); - -Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require -special Apple capabilities, and you will have to change the sample app to use a unique bundle -identifier that you can control in your own Apple Developer account. - -## Specific Component Instructions -See the sections below for any special instructions for those components. - -### Firebase Auth - -If you're doing specific Firebase Auth development, see -[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about -building and running the FirebaseAuth pod along with various samples and tests. - -### Firebase Database - -To run the Database Integration tests, make your database authentication rules -[public](https://firebase.google.com/docs/database/security/quickstart). - -### Firebase Storage - -To run the Storage Integration tests, follow the instructions in -[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m). - -#### Push Notifications - -Push notifications can only be delivered to specially provisioned App IDs in the developer portal. -In order to actually test receiving push notifications, you will need to: - -1. Change the bundle identifier of the sample app to something you own in your Apple Developer -account, and enable that App ID for push notifications. -2. You'll also need to -[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) -at **Project Settings > Cloud Messaging > [Your Firebase App]**. -3. Ensure your iOS device is added to your Apple Developer portal as a test device. - -#### iOS Simulator - -The iOS Simulator cannot register for remote notifications, and will not receive push notifications. -In order to receive push notifications, you'll have to follow the steps above and run the app on a -physical device. - -## Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -### tvOS, macOS, watchOS and Catalyst -Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on -tvOS, macOS, watchOS and Catalyst. - -For tvOS, checkout the [Sample](Example/tvOSSample). -For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the -[Independent Watch App Sample](Example/watchOSSample). - -Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this -repository is actively developed primarily for iOS. While we can catch basic unit test issues with -Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you -encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). - -During app setup in the console, you may get to a step that mentions something like "Checking if the app -has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst. -**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected. - -To install, add a subset of the following to the Podfile: - -``` -pod 'Firebase/ABTesting' # No watchOS support yet -pod 'Firebase/Auth' # No watchOS support yet -pod 'Firebase/Crashlytics' # No watchOS support yet -pod 'Firebase/Database' # No watchOS support yet -pod 'Firebase/Firestore' # No watchOS support yet -pod 'Firebase/Functions' # No watchOS support yet -pod 'Firebase/Messaging' -pod 'Firebase/RemoteConfig' # No watchOS support yet -pod 'Firebase/Storage' -``` - -#### Additional Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - -## Roadmap - -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source -plans and directions. - -## Contributing - -See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. - -## License - -The contents of this repository is licensed under the -[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). - -Your use of Firebase is governed by the -[Terms of Service for Firebase Services](https://firebase.google.com/terms/). - -[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions -[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg -[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg -[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg -[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg -[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg -[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg -[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg -[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg -[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg -[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg -[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg diff --git a/assign5/openTok/Pods/FirebaseAuthInterop/Interop/Auth/Public/FIRAuthInterop.h b/assign5/openTok/Pods/FirebaseAuthInterop/Interop/Auth/Public/FIRAuthInterop.h deleted file mode 100644 index a33da7c..0000000 --- a/assign5/openTok/Pods/FirebaseAuthInterop/Interop/Auth/Public/FIRAuthInterop.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FIRAuthInterop_h -#define FIRAuthInterop_h - -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -/** @typedef FIRTokenCallback - @brief The type of block which gets called when a token is ready. - */ -typedef void (^FIRTokenCallback)(NSString *_Nullable token, NSError *_Nullable error) - NS_SWIFT_NAME(TokenCallback); - -/// Common methods for Auth interoperability. -NS_SWIFT_NAME(AuthInterop) -@protocol FIRAuthInterop - -/// Retrieves the Firebase authentication token, possibly refreshing it if it has expired. -- (void)getTokenForcingRefresh:(BOOL)forceRefresh withCallback:(FIRTokenCallback)callback; - -/// Get the current Auth user's UID. Returns nil if there is no user signed in. -- (nullable NSString *)getUserID; - -@end - -NS_ASSUME_NONNULL_END - -#endif /* FIRAuthInterop_h */ diff --git a/assign5/openTok/Pods/FirebaseAuthInterop/LICENSE b/assign5/openTok/Pods/FirebaseAuthInterop/LICENSE deleted file mode 100644 index d645695..0000000 --- a/assign5/openTok/Pods/FirebaseAuthInterop/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/assign5/openTok/Pods/FirebaseAuthInterop/README.md b/assign5/openTok/Pods/FirebaseAuthInterop/README.md deleted file mode 100644 index d6798fe..0000000 --- a/assign5/openTok/Pods/FirebaseAuthInterop/README.md +++ /dev/null @@ -1,266 +0,0 @@ -# Firebase iOS Open Source Development - [![Actions Status][gh-core-badge]][gh-actions] - [![Actions Status][gh-dynamiclinks-badge]][gh-actions] - [![Actions Status][gh-datatransport-badge]][gh-actions] - [![Actions Status][gh-storage-badge]][gh-actions] - [![Actions Status][gh-zip-badge]][gh-actions] - [](https://travis-ci.org/firebase/firebase-ios-sdk) - -This repository contains all Firebase iOS SDK source except FirebaseAnalytics, -FirebasePerformance, and FirebaseML. - -The repository also includes GoogleUtilities source. The -[GoogleUtilities](GoogleUtilities/README.md) pod is -a set of utilities used by Firebase and other Google products. - -Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -## Installation - -See the three subsections for details about three different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) - -### Standard pod install - -Go to -[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). - -### Installing from GitHub - -For releases starting with 5.0.0, the source for each release is also deployed -to CocoaPods master and available via standard -[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). - -These instructions can be used to access the Firebase repo at other branches, -tags, or commits. - -#### Background - -See -[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) -for instructions and options about overriding pod source locations. - -#### Accessing Firebase Source Snapshots - -All of the official releases are tagged in this repo and available via CocoaPods. To access a local -source snapshot or unreleased branch, use Podfile directives like the following: - -To access FirebaseFirestore via a branch: -``` -pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -``` - -To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: - -``` -pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' -pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' -``` - -### Carthage (iOS only) - -Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). - -### Rome - -Instructions for installing binary frameworks via -[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). - -## Development - -To develop Firebase software in this repository, ensure that you have at least -the following software: - - * Xcode 10.1 (or later) - * CocoaPods 1.7.2 (or later) - * [CocoaPods generate](https://github.com/square/cocoapods-generate) - -For the pod that you want to develop: - -`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios` - -Note: If the CocoaPods cache is out of date, you may need to run -`pod repo update` before the `pod gen` command. - -Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for -those platforms. Since 10.2, Xcode does not properly handle multi-platform -CocoaPods workspaces. - -Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). - -### Development for Catalyst -* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` -* Check the Mac box in the App-iOS Build Settings -* Sign the App in the Settings Signing & Capabilities tab -* Click Pods in the Project Manager -* Add Signing to the iOS host app and unit test targets -* Select the Unit-unit scheme -* Run it to build and test - -### Adding a New Firebase Pod - -See [AddNewPod.md](AddNewPod.md). - -### Code Formatting - -To ensure that the code is formatted consistently, run the script -[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) -before creating a PR. - -Travis will verify that any code changes are done in a style compliant way. Install -`clang-format` and `swiftformat`. -These commands will get the right versions: - -``` -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/e3496d9/Formula/clang-format.rb -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/7963c3d/Formula/swiftformat.rb -``` - -Note: if you already have a newer version of these installed you may need to -`brew switch` to this version. - -To update this section, find the versions of clang-format and swiftformat.rb to -match the versions in the CI failure logs -[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). - -### Running Unit Tests - -Select a scheme and press Command-u to build a component and run its unit tests. - -#### Viewing Code Coverage - -First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. - -After running the `AllUnitTests_iOS` scheme in Xcode, execute -`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` -at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. - -### Running Sample Apps -In order to run the sample apps and integration tests, you'll need valid -`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist -files without real values, but can be replaced with real plist files. To get your own -`GoogleService-Info.plist` files: - -1. Go to the [Firebase Console](https://console.firebase.google.com/) -2. Create a new Firebase project, if you don't already have one -3. For each sample app you want to test, create a new Firebase app with the sample app's bundle -identifier (e.g. `com.google.Database-Example`) -4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file -(e.g. in [Example/Database/App/](Example/Database/App/)); - -Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require -special Apple capabilities, and you will have to change the sample app to use a unique bundle -identifier that you can control in your own Apple Developer account. - -## Specific Component Instructions -See the sections below for any special instructions for those components. - -### Firebase Auth - -If you're doing specific Firebase Auth development, see -[the Auth Sample README](Example/Auth/README.md) for instructions about -building and running the FirebaseAuth pod along with various samples and tests. - -### Firebase Database - -To run the Database Integration tests, make your database authentication rules -[public](https://firebase.google.com/docs/database/security/quickstart). - -### Firebase Storage - -To run the Storage Integration tests, follow the instructions in -[FIRStorageIntegrationTests.m](Example/Storage/Tests/Integration/FIRStorageIntegrationTests.m). - -#### Push Notifications - -Push notifications can only be delivered to specially provisioned App IDs in the developer portal. -In order to actually test receiving push notifications, you will need to: - -1. Change the bundle identifier of the sample app to something you own in your Apple Developer -account, and enable that App ID for push notifications. -2. You'll also need to -[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) -at **Project Settings > Cloud Messaging > [Your Firebase App]**. -3. Ensure your iOS device is added to your Apple Developer portal as a test device. - -#### iOS Simulator - -The iOS Simulator cannot register for remote notifications, and will not receive push notifications. -In order to receive push notifications, you'll have to follow the steps above and run the app on a -physical device. - -## Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -### tvOS, macOS, watchOS and Catalyst -Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on -tvOS, macOS, watchOS and Catalyst. - -For tvOS, checkout the [Sample](Example/tvOSSample). -For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the -[Independent Watch App Sample](Example/watchOSSample). - -Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this -repository is actively developed primarily for iOS. While we can catch basic unit test issues with -Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you -encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). - -During app setup in the console, you may get to a step that mentions something like "Checking if the app -has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst. -**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected. - -To install, add a subset of the following to the Podfile: - -``` -pod 'Firebase/ABTesting' # No watchOS support yet -pod 'Firebase/Auth' # No watchOS support yet -pod 'Firebase/Crashlytics' # No watchOS support yet -pod 'Firebase/Database' # No watchOS support yet -pod 'Firebase/Firestore' # No watchOS support yet -pod 'Firebase/Functions' # No watchOS support yet -pod 'Firebase/Messaging' -pod 'Firebase/RemoteConfig' # No watchOS support yet -pod 'Firebase/Storage' -``` - -#### Additional Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - -## Roadmap - -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source -plans and directions. - -## Contributing - -See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. - -## License - -The contents of this repository is licensed under the -[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). - -Your use of Firebase is governed by the -[Terms of Service for Firebase Services](https://firebase.google.com/terms/). - -[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions -[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg -[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg -[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg -[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg -[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.m deleted file mode 100644 index 3a7d6de..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.m +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import <Foundation/Foundation.h> - -#import "FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h" - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-implementations" -@implementation FIRAnalyticsConfiguration -#pragma clang diagnostic pop - -+ (FIRAnalyticsConfiguration *)sharedInstance { - static FIRAnalyticsConfiguration *sharedInstance = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[FIRAnalyticsConfiguration alloc] init]; - }); - return sharedInstance; -} - -- (void)postNotificationName:(NSString *)name value:(id)value { - if (!name.length || !value) { - return; - } - [[NSNotificationCenter defaultCenter] postNotificationName:name - object:self - userInfo:@{name : value}]; -} - -- (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled { - [self setAnalyticsCollectionEnabled:analyticsCollectionEnabled persistSetting:YES]; -} - -- (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled - persistSetting:(BOOL)shouldPersist { - // Persist the measurementEnabledState. Use FIRAnalyticsEnabledState values instead of YES/NO. - FIRAnalyticsEnabledState analyticsEnabledState = - analyticsCollectionEnabled ? kFIRAnalyticsEnabledStateSetYes : kFIRAnalyticsEnabledStateSetNo; - if (shouldPersist) { - NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; - [userDefaults setObject:@(analyticsEnabledState) - forKey:kFIRAPersistedConfigMeasurementEnabledStateKey]; - [userDefaults synchronize]; - } - - [self postNotificationName:kFIRAnalyticsConfigurationSetEnabledNotification - value:@(analyticsCollectionEnabled)]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRApp.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRApp.m deleted file mode 100644 index 002f93c..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRApp.m +++ /dev/null @@ -1,938 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include <sys/utsname.h> - -#if __has_include(<UIKit/UIKit.h>) -#import <UIKit/UIKit.h> -#endif - -#if __has_include(<AppKit/AppKit.h>) -#import <AppKit/AppKit.h> -#endif - -#import <FirebaseCore/FIRApp.h> - -#import "FirebaseCore/Sources/FIRBundleUtil.h" -#import "FirebaseCore/Sources/FIRVersion.h" -#import "FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h" -#import "FirebaseCore/Sources/Private/FIRAppInternal.h" -#import "FirebaseCore/Sources/Private/FIRComponentContainerInternal.h" -#import "FirebaseCore/Sources/Private/FIRConfigurationInternal.h" -#import "FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h" -#import "FirebaseCore/Sources/Private/FIRLibrary.h" -#import "FirebaseCore/Sources/Private/FIRLogger.h" -#import "FirebaseCore/Sources/Private/FIROptionsInternal.h" - -#import <GoogleUtilities/GULAppEnvironmentUtil.h> - -#import <objc/runtime.h> - -// The kFIRService strings are only here while transitioning CoreDiagnostics from the Analytics -// pod to a Core dependency. These symbols are not used and should be deleted after the transition. -NSString *const kFIRServiceAdMob; -NSString *const kFIRServiceAuth; -NSString *const kFIRServiceAuthUI; -NSString *const kFIRServiceCrash; -NSString *const kFIRServiceDatabase; -NSString *const kFIRServiceDynamicLinks; -NSString *const kFIRServiceFirestore; -NSString *const kFIRServiceFunctions; -NSString *const kFIRServiceInstanceID; -NSString *const kFIRServiceInvites; -NSString *const kFIRServiceMessaging; -NSString *const kFIRServiceMeasurement; -NSString *const kFIRServicePerformance; -NSString *const kFIRServiceRemoteConfig; -NSString *const kFIRServiceStorage; -NSString *const kGGLServiceAnalytics; -NSString *const kGGLServiceSignIn; - -NSString *const kFIRDefaultAppName = @"__FIRAPP_DEFAULT"; -NSString *const kFIRAppReadyToConfigureSDKNotification = @"FIRAppReadyToConfigureSDKNotification"; -NSString *const kFIRAppDeleteNotification = @"FIRAppDeleteNotification"; -NSString *const kFIRAppIsDefaultAppKey = @"FIRAppIsDefaultAppKey"; -NSString *const kFIRAppNameKey = @"FIRAppNameKey"; -NSString *const kFIRGoogleAppIDKey = @"FIRGoogleAppIDKey"; - -NSString *const kFIRGlobalAppDataCollectionEnabledDefaultsKeyFormat = - @"/google/firebase/global_data_collection_enabled:%@"; -NSString *const kFIRGlobalAppDataCollectionEnabledPlistKey = - @"FirebaseDataCollectionDefaultEnabled"; - -NSString *const kFIRAppDiagnosticsNotification = @"FIRAppDiagnosticsNotification"; - -NSString *const kFIRAppDiagnosticsConfigurationTypeKey = @"ConfigType"; -NSString *const kFIRAppDiagnosticsErrorKey = @"Error"; -NSString *const kFIRAppDiagnosticsFIRAppKey = @"FIRApp"; -NSString *const kFIRAppDiagnosticsSDKNameKey = @"SDKName"; -NSString *const kFIRAppDiagnosticsSDKVersionKey = @"SDKVersion"; -NSString *const kFIRAppDiagnosticsApplePlatformPrefix = @"apple-platform"; - -// Auth internal notification notification and key. -NSString *const FIRAuthStateDidChangeInternalNotification = - @"FIRAuthStateDidChangeInternalNotification"; -NSString *const FIRAuthStateDidChangeInternalNotificationAppKey = - @"FIRAuthStateDidChangeInternalNotificationAppKey"; -NSString *const FIRAuthStateDidChangeInternalNotificationTokenKey = - @"FIRAuthStateDidChangeInternalNotificationTokenKey"; -NSString *const FIRAuthStateDidChangeInternalNotificationUIDKey = - @"FIRAuthStateDidChangeInternalNotificationUIDKey"; - -/** - * The URL to download plist files. - */ -static NSString *const kPlistURL = @"https://console.firebase.google.com/"; - -/** - * An array of all classes that registered as `FIRCoreConfigurable` in order to receive lifecycle - * events from Core. - */ -static NSMutableArray<Class<FIRLibrary>> *sRegisteredAsConfigurable; - -@interface FIRApp () - -#ifdef DEBUG -@property(nonatomic) BOOL alreadyOutputDataCollectionFlag; -#endif // DEBUG - -@end - -@implementation FIRApp - -// This is necessary since our custom getter prevents `_options` from being created. -@synthesize options = _options; - -static NSMutableDictionary *sAllApps; -static FIRApp *sDefaultApp; -static NSMutableDictionary *sLibraryVersions; -static dispatch_once_t sFirebaseUserAgentOnceToken; - -+ (void)configure { - FIROptions *options = [FIROptions defaultOptions]; - if (!options) { - [NSException raise:kFirebaseCoreErrorDomain - format:@"`[FIRApp configure];` (`FirebaseApp.configure()` in Swift) could not find " - @"a valid GoogleService-Info.plist in your project. Please download one " - @"from %@.", - kPlistURL]; - } - [FIRApp configureWithOptions:options]; -#if TARGET_OS_OSX || TARGET_OS_TV - FIRLogNotice(kFIRLoggerCore, @"I-COR000028", - @"tvOS and macOS SDK support is not part of the official Firebase product. " - @"Instead they are community supported. Details at " - @"https://github.com/firebase/firebase-ios-sdk/blob/master/README.md."); -#endif -} - -+ (void)configureWithOptions:(FIROptions *)options { - if (!options) { - [NSException raise:kFirebaseCoreErrorDomain - format:@"Options is nil. Please pass a valid options."]; - } - [FIRApp configureWithName:kFIRDefaultAppName options:options]; -} - -+ (NSCharacterSet *)applicationNameAllowedCharacters { - static NSCharacterSet *applicationNameAllowedCharacters; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSMutableCharacterSet *allowedNameCharacters = [NSMutableCharacterSet alphanumericCharacterSet]; - [allowedNameCharacters addCharactersInString:@"-_"]; - applicationNameAllowedCharacters = [allowedNameCharacters copy]; - }); - return applicationNameAllowedCharacters; -} - -+ (void)configureWithName:(NSString *)name options:(FIROptions *)options { - if (!name || !options) { - [NSException raise:kFirebaseCoreErrorDomain format:@"Neither name nor options can be nil."]; - } - if (name.length == 0) { - [NSException raise:kFirebaseCoreErrorDomain format:@"Name cannot be empty."]; - } - - if ([name isEqualToString:kFIRDefaultAppName]) { - if (sDefaultApp) { - // The default app already exixts. Handle duplicate `configure` calls and return. - [self appWasConfiguredTwice:sDefaultApp usingOptions:options]; - return; - } - - FIRLogDebug(kFIRLoggerCore, @"I-COR000001", @"Configuring the default app."); - } else { - // Validate the app name and ensure it hasn't been configured already. - NSCharacterSet *nameCharacters = [NSCharacterSet characterSetWithCharactersInString:name]; - - if (![[self applicationNameAllowedCharacters] isSupersetOfSet:nameCharacters]) { - [NSException raise:kFirebaseCoreErrorDomain - format:@"App name can only contain alphanumeric, " - @"hyphen (-), and underscore (_) characters"]; - } - - @synchronized(self) { - if (sAllApps && sAllApps[name]) { - // The app already exists. Handle a duplicate `configure` call and return. - [self appWasConfiguredTwice:sAllApps[name] usingOptions:options]; - return; - } - } - - FIRLogDebug(kFIRLoggerCore, @"I-COR000002", @"Configuring app named %@", name); - } - - @synchronized(self) { - FIRApp *app = [[FIRApp alloc] initInstanceWithName:name options:options]; - if (app.isDefaultApp) { - sDefaultApp = app; - } - - [FIRApp addAppToAppDictionary:app]; - - // The FIRApp instance is ready to go, `sDefaultApp` is assigned, other SDKs are now ready to be - // instantiated. - [app.container instantiateEagerComponents]; - [FIRApp sendNotificationsToSDKs:app]; - } -} - -/// Called when `configure` has been called multiple times for the same app. This can either throw -/// an exception (most cases) or ignore the duplicate configuration in situations where it's allowed -/// like an extension. -+ (void)appWasConfiguredTwice:(FIRApp *)app usingOptions:(FIROptions *)options { - // Only extensions should potentially be able to call `configure` more than once. - if (![GULAppEnvironmentUtil isAppExtension]) { - // Throw an exception since this is now an invalid state. - if (app.isDefaultApp) { - [NSException raise:kFirebaseCoreErrorDomain - format:@"Default app has already been configured."]; - } else { - [NSException raise:kFirebaseCoreErrorDomain - format:@"App named %@ has already been configured.", app.name]; - } - } - - // In an extension, the entry point could be called multiple times. As long as the options are - // identical we should allow multiple `configure` calls. - if ([options isEqual:app.options]) { - // Everything is identical but the extension's lifecycle triggered `configure` twice. - // Ignore duplicate calls and return since everything should still be in a valid state. - FIRLogDebug(kFIRLoggerCore, @"I-COR000035", - @"Ignoring second `configure` call in an extension."); - return; - } else { - [NSException raise:kFirebaseCoreErrorDomain - format:@"App named %@ has already been configured.", app.name]; - } -} - -+ (FIRApp *)defaultApp { - if (sDefaultApp) { - return sDefaultApp; - } - FIRLogError(kFIRLoggerCore, @"I-COR000003", - @"The default Firebase app has not yet been " - @"configured. Add `[FIRApp configure];` (`FirebaseApp.configure()` in Swift) to your " - @"application initialization. Read more: https://goo.gl/ctyzm8."); - return nil; -} - -+ (FIRApp *)appNamed:(NSString *)name { - @synchronized(self) { - if (sAllApps) { - FIRApp *app = sAllApps[name]; - if (app) { - return app; - } - } - FIRLogError(kFIRLoggerCore, @"I-COR000004", @"App with name %@ does not exist.", name); - return nil; - } -} - -+ (NSDictionary *)allApps { - @synchronized(self) { - if (!sAllApps) { - FIRLogError(kFIRLoggerCore, @"I-COR000005", @"No app has been configured yet."); - } - return [sAllApps copy]; - } -} - -// Public only for tests -+ (void)resetApps { - @synchronized(self) { - sDefaultApp = nil; - [sAllApps removeAllObjects]; - sAllApps = nil; - [sLibraryVersions removeAllObjects]; - sLibraryVersions = nil; - sFirebaseUserAgentOnceToken = 0; - } -} - -- (void)deleteApp:(FIRAppVoidBoolCallback)completion { - @synchronized([self class]) { - if (sAllApps && sAllApps[self.name]) { - FIRLogDebug(kFIRLoggerCore, @"I-COR000006", @"Deleting app named %@", self.name); - - // Remove all registered libraries from the container to avoid creating new instances. - [self.container removeAllComponents]; - // Remove all cached instances from the container before deleting the app. - [self.container removeAllCachedInstances]; - - [sAllApps removeObjectForKey:self.name]; - [self clearDataCollectionSwitchFromUserDefaults]; - if ([self.name isEqualToString:kFIRDefaultAppName]) { - sDefaultApp = nil; - } - NSDictionary *appInfoDict = @{kFIRAppNameKey : self.name}; - [[NSNotificationCenter defaultCenter] postNotificationName:kFIRAppDeleteNotification - object:[self class] - userInfo:appInfoDict]; - completion(YES); - } else { - FIRLogError(kFIRLoggerCore, @"I-COR000007", @"App does not exist."); - completion(NO); - } - } -} - -+ (void)addAppToAppDictionary:(FIRApp *)app { - if (!sAllApps) { - sAllApps = [NSMutableDictionary dictionary]; - } - if ([app configureCore]) { - sAllApps[app.name] = app; - } else { - [NSException raise:kFirebaseCoreErrorDomain - format:@"Configuration fails. It may be caused by an invalid GOOGLE_APP_ID in " - @"GoogleService-Info.plist or set in the customized options."]; - } -} - -- (instancetype)initInstanceWithName:(NSString *)name options:(FIROptions *)options { - self = [super init]; - if (self) { - _name = [name copy]; - _options = [options copy]; - _options.editingLocked = YES; - _isDefaultApp = [name isEqualToString:kFIRDefaultAppName]; - _container = [[FIRComponentContainer alloc] initWithApp:self]; - } - return self; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -- (BOOL)configureCore { - [self checkExpectedBundleID]; - if (![self isAppIDValid]) { - return NO; - } - - [self logCoreTelemetryIfEnabled]; - -#if TARGET_OS_IOS - // Initialize the Analytics once there is a valid options under default app. Analytics should - // always initialize first by itself before the other SDKs. - if ([self.name isEqualToString:kFIRDefaultAppName]) { - Class firAnalyticsClass = NSClassFromString(@"FIRAnalytics"); - if (firAnalyticsClass) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wundeclared-selector" - SEL startWithConfigurationSelector = @selector(startWithConfiguration:options:); -#pragma clang diagnostic pop - if ([firAnalyticsClass respondsToSelector:startWithConfigurationSelector]) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - [firAnalyticsClass performSelector:startWithConfigurationSelector - withObject:[FIRConfiguration sharedInstance].analyticsConfiguration - withObject:_options]; -#pragma clang diagnostic pop - } - } - } -#endif - - [self subscribeForAppDidBecomeActiveNotifications]; - - return YES; -} - -- (FIROptions *)options { - return [_options copy]; -} - -- (void)setDataCollectionDefaultEnabled:(BOOL)dataCollectionDefaultEnabled { -#ifdef DEBUG - FIRLogDebug(kFIRLoggerCore, @"I-COR000034", @"Explicitly %@ data collection flag.", - dataCollectionDefaultEnabled ? @"enabled" : @"disabled"); - self.alreadyOutputDataCollectionFlag = YES; -#endif // DEBUG - - NSString *key = - [NSString stringWithFormat:kFIRGlobalAppDataCollectionEnabledDefaultsKeyFormat, self.name]; - [[NSUserDefaults standardUserDefaults] setBool:dataCollectionDefaultEnabled forKey:key]; - - // Core also controls the FirebaseAnalytics flag, so check if the Analytics flags are set - // within FIROptions and change the Analytics value if necessary. Analytics only works with the - // default app, so return if this isn't the default app. - if (!self.isDefaultApp) { - return; - } - - // Check if the Analytics flag is explicitly set. If so, no further actions are necessary. - if ([self.options isAnalyticsCollectionExplicitlySet]) { - return; - } - - // The Analytics flag has not been explicitly set, so update with the value being set. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - [[FIRAnalyticsConfiguration sharedInstance] - setAnalyticsCollectionEnabled:dataCollectionDefaultEnabled - persistSetting:NO]; -#pragma clang diagnostic pop -} - -- (BOOL)isDataCollectionDefaultEnabled { - // Check if it's been manually set before in code, and use that as the higher priority value. - NSNumber *defaultsObject = [[self class] readDataCollectionSwitchFromUserDefaultsForApp:self]; - if (defaultsObject != nil) { -#ifdef DEBUG - if (!self.alreadyOutputDataCollectionFlag) { - FIRLogDebug(kFIRLoggerCore, @"I-COR000031", @"Data Collection flag is %@ in user defaults.", - [defaultsObject boolValue] ? @"enabled" : @"disabled"); - self.alreadyOutputDataCollectionFlag = YES; - } -#endif // DEBUG - return [defaultsObject boolValue]; - } - - // Read the Info.plist to see if the flag is set. If it's not set, it should default to `YES`. - // As per the implementation of `readDataCollectionSwitchFromPlist`, it's a cached value and has - // no performance impact calling multiple times. - NSNumber *collectionEnabledPlistValue = [[self class] readDataCollectionSwitchFromPlist]; - if (collectionEnabledPlistValue != nil) { -#ifdef DEBUG - if (!self.alreadyOutputDataCollectionFlag) { - FIRLogDebug(kFIRLoggerCore, @"I-COR000032", @"Data Collection flag is %@ in plist.", - [collectionEnabledPlistValue boolValue] ? @"enabled" : @"disabled"); - self.alreadyOutputDataCollectionFlag = YES; - } -#endif // DEBUG - return [collectionEnabledPlistValue boolValue]; - } - -#ifdef DEBUG - if (!self.alreadyOutputDataCollectionFlag) { - FIRLogDebug(kFIRLoggerCore, @"I-COR000033", @"Data Collection flag is not set."); - self.alreadyOutputDataCollectionFlag = YES; - } -#endif // DEBUG - return YES; -} - -#pragma mark - private - -+ (void)sendNotificationsToSDKs:(FIRApp *)app { - // TODO: Remove this notification once all SDKs are registered with `FIRCoreConfigurable`. - NSNumber *isDefaultApp = [NSNumber numberWithBool:app.isDefaultApp]; - NSDictionary *appInfoDict = @{ - kFIRAppNameKey : app.name, - kFIRAppIsDefaultAppKey : isDefaultApp, - kFIRGoogleAppIDKey : app.options.googleAppID - }; - [[NSNotificationCenter defaultCenter] postNotificationName:kFIRAppReadyToConfigureSDKNotification - object:self - userInfo:appInfoDict]; - - // This is the new way of sending information to SDKs. - // TODO: Do we want this on a background thread, maybe? - @synchronized(self) { - for (Class<FIRLibrary> library in sRegisteredAsConfigurable) { - [library configureWithApp:app]; - } - } -} - -+ (NSError *)errorForMissingOptions { - NSDictionary *errorDict = @{ - NSLocalizedDescriptionKey : - @"Unable to parse GoogleService-Info.plist in order to configure services.", - NSLocalizedRecoverySuggestionErrorKey : - @"Check formatting and location of GoogleService-Info.plist." - }; - return [NSError errorWithDomain:kFirebaseCoreErrorDomain - code:FIRErrorCodeInvalidPlistFile - userInfo:errorDict]; -} - -+ (NSError *)errorForSubspecConfigurationFailureWithDomain:(NSString *)domain - errorCode:(FIRErrorCode)code - service:(NSString *)service - reason:(NSString *)reason { - NSString *description = - [NSString stringWithFormat:@"Configuration failed for service %@.", service]; - NSDictionary *errorDict = - @{NSLocalizedDescriptionKey : description, NSLocalizedFailureReasonErrorKey : reason}; - return [NSError errorWithDomain:domain code:code userInfo:errorDict]; -} - -+ (NSError *)errorForInvalidAppID { - NSDictionary *errorDict = @{ - NSLocalizedDescriptionKey : @"Unable to validate Google App ID", - NSLocalizedRecoverySuggestionErrorKey : - @"Check formatting and location of GoogleService-Info.plist or GoogleAppID set in the " - @"customized options." - }; - return [NSError errorWithDomain:kFirebaseCoreErrorDomain - code:FIRErrorCodeInvalidAppID - userInfo:errorDict]; -} - -+ (BOOL)isDefaultAppConfigured { - return (sDefaultApp != nil); -} - -+ (void)registerLibrary:(nonnull NSString *)name withVersion:(nonnull NSString *)version { - // Create the set of characters which aren't allowed, only if this feature is used. - NSMutableCharacterSet *allowedSet = [NSMutableCharacterSet alphanumericCharacterSet]; - [allowedSet addCharactersInString:@"-_."]; - NSCharacterSet *disallowedSet = [allowedSet invertedSet]; - // Make sure the library name and version strings do not contain unexpected characters, and - // add the name/version pair to the dictionary. - if ([name rangeOfCharacterFromSet:disallowedSet].location == NSNotFound && - [version rangeOfCharacterFromSet:disallowedSet].location == NSNotFound) { - @synchronized(self) { - if (!sLibraryVersions) { - sLibraryVersions = [[NSMutableDictionary alloc] init]; - } - sLibraryVersions[name] = version; - } - } else { - FIRLogError(kFIRLoggerCore, @"I-COR000027", - @"The library name (%@) or version number (%@) contain invalid characters. " - @"Only alphanumeric, dash, underscore and period characters are allowed.", - name, version); - } -} - -+ (void)registerInternalLibrary:(nonnull Class<FIRLibrary>)library - withName:(nonnull NSString *)name - withVersion:(nonnull NSString *)version { - // This is called at +load time, keep the work to a minimum. - - // Ensure the class given conforms to the proper protocol. - if (![(Class)library conformsToProtocol:@protocol(FIRLibrary)] || - ![(Class)library respondsToSelector:@selector(componentsToRegister)]) { - [NSException raise:NSInvalidArgumentException - format:@"Class %@ attempted to register components, but it does not conform to " - @"`FIRLibrary or provide a `componentsToRegister:` method.", - library]; - } - - [FIRComponentContainer registerAsComponentRegistrant:library]; - if ([(Class)library respondsToSelector:@selector(configureWithApp:)]) { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sRegisteredAsConfigurable = [[NSMutableArray alloc] init]; - }); - @synchronized(self) { - [sRegisteredAsConfigurable addObject:library]; - } - } - [self registerLibrary:name withVersion:version]; -} - -+ (NSString *)firebaseUserAgent { - @synchronized(self) { - dispatch_once(&sFirebaseUserAgentOnceToken, ^{ - // Report FirebaseCore version for useragent string - [FIRApp registerLibrary:@"fire-ios" - withVersion:[NSString stringWithUTF8String:FIRCoreVersionString]]; - - NSDictionary<NSString *, id> *info = [[NSBundle mainBundle] infoDictionary]; - NSString *xcodeVersion = info[@"DTXcodeBuild"]; - NSString *sdkVersion = info[@"DTSDKBuild"]; - if (xcodeVersion) { - [FIRApp registerLibrary:@"xcode" withVersion:xcodeVersion]; - } - if (sdkVersion) { - [FIRApp registerLibrary:@"apple-sdk" withVersion:sdkVersion]; - } - - NSString *swiftFlagValue = [self hasSwiftRuntime] ? @"true" : @"false"; - [FIRApp registerLibrary:@"swift" withVersion:swiftFlagValue]; - - [FIRApp registerLibrary:kFIRAppDiagnosticsApplePlatformPrefix - withVersion:[self applePlatform]]; - }); - - NSMutableArray<NSString *> *libraries = - [[NSMutableArray<NSString *> alloc] initWithCapacity:sLibraryVersions.count]; - for (NSString *libraryName in sLibraryVersions) { - [libraries addObject:[NSString stringWithFormat:@"%@/%@", libraryName, - sLibraryVersions[libraryName]]]; - } - [libraries sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; - return [libraries componentsJoinedByString:@" "]; - } -} - -+ (BOOL)hasSwiftRuntime { - // The class - // [Swift._SwiftObject](https://github.com/apple/swift/blob/5eac3e2818eb340b11232aff83edfbd1c307fa03/stdlib/public/runtime/SwiftObject.h#L35) - // is a part of Swift runtime, so it should be present if Swift runtime is available. - - BOOL hasSwiftRuntime = - objc_lookUpClass("Swift._SwiftObject") != nil || - // Swift object class name before - // https://github.com/apple/swift/commit/9637b4a6e11ddca72f5f6dbe528efc7c92f14d01 - objc_getClass("_TtCs12_SwiftObject") != nil; - - return hasSwiftRuntime; -} - -+ (NSString *)applePlatform { - NSString *applePlatform = @"unknown"; - - // When a Catalyst app is run on macOS then both `TARGET_OS_MACCATALYST` and `TARGET_OS_IOS` are - // `true`, which means the condition list is order-sensitive. -#if TARGET_OS_MACCATALYST - applePlatform = @"maccatalyst"; -#elif TARGET_OS_IOS - applePlatform = @"ios"; -#elif TARGET_OS_TV - applePlatform = @"tvos"; -#elif TARGET_OS_OSX - applePlatform = @"macos"; -#elif TARGET_OS_WATCH - applePlatform = @"watchos"; -#endif - - return applePlatform; -} - -- (void)checkExpectedBundleID { - NSArray *bundles = [FIRBundleUtil relevantBundles]; - NSString *expectedBundleID = [self expectedBundleID]; - // The checking is only done when the bundle ID is provided in the serviceInfo dictionary for - // backward compatibility. - if (expectedBundleID != nil && ![FIRBundleUtil hasBundleIdentifierPrefix:expectedBundleID - inBundles:bundles]) { - FIRLogError(kFIRLoggerCore, @"I-COR000008", - @"The project's Bundle ID is inconsistent with " - @"either the Bundle ID in '%@.%@', or the Bundle ID in the options if you are " - @"using a customized options. To ensure that everything can be configured " - @"correctly, you may need to make the Bundle IDs consistent. To continue with this " - @"plist file, you may change your app's bundle identifier to '%@'. Or you can " - @"download a new configuration file that matches your bundle identifier from %@ " - @"and replace the current one.", - kServiceInfoFileName, kServiceInfoFileType, expectedBundleID, kPlistURL); - } -} - -#pragma mark - private - App ID Validation - -/** - * Validates the format and fingerprint of the app ID contained in GOOGLE_APP_ID in the plist file. - * This is the main method for validating app ID. - * - * @return YES if the app ID fulfills the expected format and fingerprint, NO otherwise. - */ -- (BOOL)isAppIDValid { - NSString *appID = _options.googleAppID; - BOOL isValid = [FIRApp validateAppID:appID]; - if (!isValid) { - NSString *expectedBundleID = [self expectedBundleID]; - FIRLogError(kFIRLoggerCore, @"I-COR000009", - @"The GOOGLE_APP_ID either in the plist file " - @"'%@.%@' or the one set in the customized options is invalid. If you are using " - @"the plist file, use the iOS version of bundle identifier to download the file, " - @"and do not manually edit the GOOGLE_APP_ID. You may change your app's bundle " - @"identifier to '%@'. Or you can download a new configuration file that matches " - @"your bundle identifier from %@ and replace the current one.", - kServiceInfoFileName, kServiceInfoFileType, expectedBundleID, kPlistURL); - }; - return isValid; -} - -+ (BOOL)validateAppID:(NSString *)appID { - // Failing validation only occurs when we are sure we are looking at a V2 app ID and it does not - // have a valid fingerprint, otherwise we just warn about the potential issue. - if (!appID.length) { - return NO; - } - - NSScanner *stringScanner = [NSScanner scannerWithString:appID]; - stringScanner.charactersToBeSkipped = nil; - - NSString *appIDVersion; - if (![stringScanner scanCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] - intoString:&appIDVersion]) { - return NO; - } - - if (![stringScanner scanString:@":" intoString:NULL]) { - // appIDVersion must be separated by ":" - return NO; - } - - NSArray *knownVersions = @[ @"1" ]; - if (![knownVersions containsObject:appIDVersion]) { - // Permit unknown yet properly formatted app ID versions. - FIRLogInfo(kFIRLoggerCore, @"I-COR000010", @"Unknown GOOGLE_APP_ID version: %@", appIDVersion); - return YES; - } - - if (![self validateAppIDFormat:appID withVersion:appIDVersion]) { - return NO; - } - - if (![self validateAppIDFingerprint:appID withVersion:appIDVersion]) { - return NO; - } - - return YES; -} - -+ (NSString *)actualBundleID { - return [[NSBundle mainBundle] bundleIdentifier]; -} - -/** - * Validates that the format of the app ID string is what is expected based on the supplied version. - * The version must end in ":". - * - * For v1 app ids the format is expected to be - * '<version #>:<project number>:ios:<fingerprint of bundle id>'. - * - * This method does not verify that the contents of the app id are correct, just that they fulfill - * the expected format. - * - * @param appID Contents of GOOGLE_APP_ID from the plist file. - * @param version Indicates what version of the app id format this string should be. - * @return YES if provided string fufills the expected format, NO otherwise. - */ -+ (BOOL)validateAppIDFormat:(NSString *)appID withVersion:(NSString *)version { - if (!appID.length || !version.length) { - return NO; - } - - NSScanner *stringScanner = [NSScanner scannerWithString:appID]; - stringScanner.charactersToBeSkipped = nil; - - // Skip version part - // '*<version #>*:<project number>:ios:<fingerprint of bundle id>' - if (![stringScanner scanString:version intoString:NULL]) { - // The version part is missing or mismatched - return NO; - } - - // Validate version part (see part between '*' symbols below) - // '<version #>*:*<project number>:ios:<fingerprint of bundle id>' - if (![stringScanner scanString:@":" intoString:NULL]) { - // appIDVersion must be separated by ":" - return NO; - } - - // Validate version part (see part between '*' symbols below) - // '<version #>:*<project number>*:ios:<fingerprint of bundle id>'. - NSInteger projectNumber = NSNotFound; - if (![stringScanner scanInteger:&projectNumber]) { - // NO project number found. - return NO; - } - - // Validate version part (see part between '*' symbols below) - // '<version #>:<project number>*:*ios:<fingerprint of bundle id>'. - if (![stringScanner scanString:@":" intoString:NULL]) { - // The project number must be separated by ":" - return NO; - } - - // Validate version part (see part between '*' symbols below) - // '<version #>:<project number>:*ios*:<fingerprint of bundle id>'. - NSString *platform; - if (![stringScanner scanUpToString:@":" intoString:&platform]) { - return NO; - } - - if (![platform isEqualToString:@"ios"]) { - // The platform must be @"ios" - return NO; - } - - // Validate version part (see part between '*' symbols below) - // '<version #>:<project number>:ios*:*<fingerprint of bundle id>'. - if (![stringScanner scanString:@":" intoString:NULL]) { - // The platform must be separated by ":" - return NO; - } - - // Validate version part (see part between '*' symbols below) - // '<version #>:<project number>:ios:*<fingerprint of bundle id>*'. - unsigned long long fingerprint = NSNotFound; - if (![stringScanner scanHexLongLong:&fingerprint]) { - // Fingerprint part is missing - return NO; - } - - if (!stringScanner.isAtEnd) { - // There are not allowed characters in the fingerprint part - return NO; - } - - return YES; -} - -/** - * Validates that the fingerprint of the app ID string is what is expected based on the supplied - * version. - * - * Note that the v1 hash algorithm is not permitted on the client and cannot be fully validated. - * - * @param appID Contents of GOOGLE_APP_ID from the plist file. - * @param version Indicates what version of the app id format this string should be. - * @return YES if provided string fufills the expected fingerprint and the version is known, NO - * otherwise. - */ -+ (BOOL)validateAppIDFingerprint:(NSString *)appID withVersion:(NSString *)version { - // Extract the supplied fingerprint from the supplied app ID. - // This assumes the app ID format is the same for all known versions below. If the app ID format - // changes in future versions, the tokenizing of the app ID format will need to take into account - // the version of the app ID. - NSArray *components = [appID componentsSeparatedByString:@":"]; - if (components.count != 4) { - return NO; - } - - NSString *suppliedFingerprintString = components[3]; - if (!suppliedFingerprintString.length) { - return NO; - } - - uint64_t suppliedFingerprint; - NSScanner *scanner = [NSScanner scannerWithString:suppliedFingerprintString]; - if (![scanner scanHexLongLong:&suppliedFingerprint]) { - return NO; - } - - if ([version isEqual:@"1"]) { - // The v1 hash algorithm is not permitted on the client so the actual hash cannot be validated. - return YES; - } - - // Unknown version. - return NO; -} - -- (NSString *)expectedBundleID { - return _options.bundleID; -} - -// end App ID validation - -#pragma mark - Reading From Plist & User Defaults - -/** - * Clears the data collection switch from the standard NSUserDefaults for easier testing and - * readability. - */ -- (void)clearDataCollectionSwitchFromUserDefaults { - NSString *key = - [NSString stringWithFormat:kFIRGlobalAppDataCollectionEnabledDefaultsKeyFormat, self.name]; - [[NSUserDefaults standardUserDefaults] removeObjectForKey:key]; -} - -/** - * Reads the data collection switch from the standard NSUserDefaults for easier testing and - * readability. - */ -+ (nullable NSNumber *)readDataCollectionSwitchFromUserDefaultsForApp:(FIRApp *)app { - // Read the object in user defaults, and only return if it's an NSNumber. - NSString *key = - [NSString stringWithFormat:kFIRGlobalAppDataCollectionEnabledDefaultsKeyFormat, app.name]; - id collectionEnabledDefaultsObject = [[NSUserDefaults standardUserDefaults] objectForKey:key]; - if ([collectionEnabledDefaultsObject isKindOfClass:[NSNumber class]]) { - return collectionEnabledDefaultsObject; - } - - return nil; -} - -/** - * Reads the data collection switch from the Info.plist for easier testing and readability. Will - * only read once from the plist and return the cached value. - */ -+ (nullable NSNumber *)readDataCollectionSwitchFromPlist { - static NSNumber *collectionEnabledPlistObject; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - // Read the data from the `Info.plist`, only assign it if it's there and an NSNumber. - id plistValue = [[NSBundle mainBundle] - objectForInfoDictionaryKey:kFIRGlobalAppDataCollectionEnabledPlistKey]; - if (plistValue && [plistValue isKindOfClass:[NSNumber class]]) { - collectionEnabledPlistObject = (NSNumber *)plistValue; - } - }); - - return collectionEnabledPlistObject; -} - -#pragma mark - Sending Logs - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-parameter" -- (void)sendLogsWithServiceName:(NSString *)serviceName - version:(NSString *)version - error:(NSError *)error { - // Do nothing. Please remove calls to this method. -} -#pragma clang diagnostic pop - -#pragma mark - App Life Cycle - -- (void)subscribeForAppDidBecomeActiveNotifications { -#if TARGET_OS_IOS || TARGET_OS_TV - NSNotificationName notificationName = UIApplicationDidBecomeActiveNotification; -#elif TARGET_OS_OSX - NSNotificationName notificationName = NSApplicationDidBecomeActiveNotification; -#endif - -#if !TARGET_OS_WATCH - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(appDidBecomeActive:) - name:notificationName - object:nil]; -#endif -} - -- (void)appDidBecomeActive:(NSNotification *)notification { - [self logCoreTelemetryIfEnabled]; -} - -- (void)logCoreTelemetryIfEnabled { - if ([self isDataCollectionDefaultEnabled]) { - [FIRCoreDiagnosticsConnector logCoreTelemetryWithOptions:_options]; - } -} - -@end diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRAppAssociationRegistration.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRAppAssociationRegistration.m deleted file mode 100644 index e4125cd..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRAppAssociationRegistration.m +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FirebaseCore/Sources/Private/FIRAppAssociationRegistration.h" - -#import <objc/runtime.h> - -@implementation FIRAppAssociationRegistration - -+ (nullable id)registeredObjectWithHost:(id)host - key:(NSString *)key - creationBlock:(id _Nullable (^)(void))creationBlock { - @synchronized(self) { - SEL dictKey = @selector(registeredObjectWithHost:key:creationBlock:); - NSMutableDictionary<NSString *, id> *objectsByKey = objc_getAssociatedObject(host, dictKey); - if (!objectsByKey) { - objectsByKey = [[NSMutableDictionary alloc] init]; - objc_setAssociatedObject(host, dictKey, objectsByKey, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - } - id obj = objectsByKey[key]; - NSValue *creationBlockBeingCalled = [NSValue valueWithPointer:dictKey]; - if (obj) { - if ([creationBlockBeingCalled isEqual:obj]) { - [NSException raise:@"Reentering registeredObjectWithHost:key:creationBlock: not allowed" - format:@"host: %@ key: %@", host, key]; - } - return obj; - } - objectsByKey[key] = creationBlockBeingCalled; - obj = creationBlock(); - objectsByKey[key] = obj; - return obj; - } -} - -@end diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.h deleted file mode 100644 index d9475dd..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -/** - * This class provides utilities for accessing resources in bundles. - */ -@interface FIRBundleUtil : NSObject - -/** - * Finds all relevant bundles, starting with [NSBundle mainBundle]. - */ -+ (NSArray *)relevantBundles; - -/** - * Reads the options dictionary from one of the provided bundles. - * - * @param resourceName The resource name, e.g. @"GoogleService-Info". - * @param fileType The file type (extension), e.g. @"plist". - * @param bundles The bundles to expect, in priority order. See also - * +[FIRBundleUtil relevantBundles]. - */ -+ (NSString *)optionsDictionaryPathWithResourceName:(NSString *)resourceName - andFileType:(NSString *)fileType - inBundles:(NSArray *)bundles; - -/** - * Finds URL schemes defined in all relevant bundles, starting with those from - * [NSBundle mainBundle]. - */ -+ (NSArray *)relevantURLSchemes; - -/** - * Checks if any of the given bundles have a matching bundle identifier prefix (removing extension - * suffixes). - */ -+ (BOOL)hasBundleIdentifierPrefix:(NSString *)bundleIdentifier inBundles:(NSArray *)bundles; - -@end diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.m deleted file mode 100644 index b858f14..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.m +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FirebaseCore/Sources/FIRBundleUtil.h" - -#import <GoogleUtilities/GULAppEnvironmentUtil.h> - -@implementation FIRBundleUtil - -+ (NSArray *)relevantBundles { - return @[ [NSBundle mainBundle], [NSBundle bundleForClass:[self class]] ]; -} - -+ (NSString *)optionsDictionaryPathWithResourceName:(NSString *)resourceName - andFileType:(NSString *)fileType - inBundles:(NSArray *)bundles { - // Loop through all bundles to find the config dict. - for (NSBundle *bundle in bundles) { - NSString *path = [bundle pathForResource:resourceName ofType:fileType]; - // Use the first one we find. - if (path) { - return path; - } - } - return nil; -} - -+ (NSArray *)relevantURLSchemes { - NSMutableArray *result = [[NSMutableArray alloc] init]; - for (NSBundle *bundle in [[self class] relevantBundles]) { - NSArray *urlTypes = [bundle objectForInfoDictionaryKey:@"CFBundleURLTypes"]; - for (NSDictionary *urlType in urlTypes) { - [result addObjectsFromArray:urlType[@"CFBundleURLSchemes"]]; - } - } - return result; -} - -+ (BOOL)hasBundleIdentifierPrefix:(NSString *)bundleIdentifier inBundles:(NSArray *)bundles { - for (NSBundle *bundle in bundles) { - // This allows app extensions that have the app's bundle as their prefix to pass this test. - NSString *applicationBundleIdentifier = - [GULAppEnvironmentUtil isAppExtension] - ? [self bundleIdentifierByRemovingLastPartFrom:bundle.bundleIdentifier] - : bundle.bundleIdentifier; - - if ([applicationBundleIdentifier isEqualToString:bundleIdentifier]) { - return YES; - } - } - return NO; -} - -+ (NSString *)bundleIdentifierByRemovingLastPartFrom:(NSString *)bundleIdentifier { - NSString *bundleIDComponentsSeparator = @"."; - - NSMutableArray<NSString *> *bundleIDComponents = - [[bundleIdentifier componentsSeparatedByString:bundleIDComponentsSeparator] mutableCopy]; - [bundleIDComponents removeLastObject]; - - return [bundleIDComponents componentsJoinedByString:bundleIDComponentsSeparator]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponent.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponent.m deleted file mode 100644 index 9c1fbed..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponent.m +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FirebaseCore/Sources/Private/FIRComponent.h" - -#import "FirebaseCore/Sources/Private/FIRComponentContainer.h" -#import "FirebaseCore/Sources/Private/FIRDependency.h" - -@interface FIRComponent () - -- (instancetype)initWithProtocol:(Protocol *)protocol - instantiationTiming:(FIRInstantiationTiming)instantiationTiming - dependencies:(NSArray<FIRDependency *> *)dependencies - creationBlock:(FIRComponentCreationBlock)creationBlock; - -@end - -@implementation FIRComponent - -+ (instancetype)componentWithProtocol:(Protocol *)protocol - creationBlock:(FIRComponentCreationBlock)creationBlock { - return [[FIRComponent alloc] initWithProtocol:protocol - instantiationTiming:FIRInstantiationTimingLazy - dependencies:@[] - creationBlock:creationBlock]; -} - -+ (instancetype)componentWithProtocol:(Protocol *)protocol - instantiationTiming:(FIRInstantiationTiming)instantiationTiming - dependencies:(NSArray<FIRDependency *> *)dependencies - creationBlock:(FIRComponentCreationBlock)creationBlock { - return [[FIRComponent alloc] initWithProtocol:protocol - instantiationTiming:instantiationTiming - dependencies:dependencies - creationBlock:creationBlock]; -} - -- (instancetype)initWithProtocol:(Protocol *)protocol - instantiationTiming:(FIRInstantiationTiming)instantiationTiming - dependencies:(NSArray<FIRDependency *> *)dependencies - creationBlock:(FIRComponentCreationBlock)creationBlock { - self = [super init]; - if (self) { - _protocol = protocol; - _instantiationTiming = instantiationTiming; - _dependencies = [dependencies copy]; - _creationBlock = creationBlock; - } - return self; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentContainer.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentContainer.m deleted file mode 100644 index bbe8878..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentContainer.m +++ /dev/null @@ -1,214 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FirebaseCore/Sources/Private/FIRComponentContainer.h" - -#import "FirebaseCore/Sources/Private/FIRAppInternal.h" -#import "FirebaseCore/Sources/Private/FIRComponent.h" -#import "FirebaseCore/Sources/Private/FIRLibrary.h" -#import "FirebaseCore/Sources/Private/FIRLogger.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FIRComponentContainer () - -/// The dictionary of components that are registered for a particular app. The key is an `NSString` -/// of the protocol. -@property(nonatomic, strong) NSMutableDictionary<NSString *, FIRComponentCreationBlock> *components; - -/// Cached instances of components that requested to be cached. -@property(nonatomic, strong) NSMutableDictionary<NSString *, id> *cachedInstances; - -/// Protocols of components that have requested to be eagerly instantiated. -@property(nonatomic, strong, nullable) NSMutableArray<Protocol *> *eagerProtocolsToInstantiate; - -@end - -@implementation FIRComponentContainer - -// Collection of all classes that register to provide components. -static NSMutableSet<Class> *sFIRComponentRegistrants; - -#pragma mark - Public Registration - -+ (void)registerAsComponentRegistrant:(Class<FIRLibrary>)klass { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sFIRComponentRegistrants = [[NSMutableSet<Class> alloc] init]; - }); - - [self registerAsComponentRegistrant:klass inSet:sFIRComponentRegistrants]; -} - -+ (void)registerAsComponentRegistrant:(Class<FIRLibrary>)klass - inSet:(NSMutableSet<Class> *)allRegistrants { - [allRegistrants addObject:klass]; -} - -#pragma mark - Internal Initialization - -- (instancetype)initWithApp:(FIRApp *)app { - return [self initWithApp:app registrants:sFIRComponentRegistrants]; -} - -- (instancetype)initWithApp:(FIRApp *)app registrants:(NSMutableSet<Class> *)allRegistrants { - self = [super init]; - if (self) { - _app = app; - _cachedInstances = [NSMutableDictionary<NSString *, id> dictionary]; - _components = [NSMutableDictionary<NSString *, FIRComponentCreationBlock> dictionary]; - - [self populateComponentsFromRegisteredClasses:allRegistrants forApp:app]; - } - return self; -} - -- (void)populateComponentsFromRegisteredClasses:(NSSet<Class> *)classes forApp:(FIRApp *)app { - // Keep track of any components that need to eagerly instantiate after all components are added. - self.eagerProtocolsToInstantiate = [[NSMutableArray alloc] init]; - - // Loop through the verified component registrants and populate the components array. - for (Class<FIRLibrary> klass in classes) { - // Loop through all the components being registered and store them as appropriate. - // Classes which do not provide functionality should use a dummy FIRComponentRegistrant - // protocol. - for (FIRComponent *component in [klass componentsToRegister]) { - // Check if the component has been registered before, and error out if so. - NSString *protocolName = NSStringFromProtocol(component.protocol); - if (self.components[protocolName]) { - FIRLogError(kFIRLoggerCore, @"I-COR000029", - @"Attempted to register protocol %@, but it already has an implementation.", - protocolName); - continue; - } - - // Store the creation block for later usage. - self.components[protocolName] = component.creationBlock; - - // Queue any protocols that should be eagerly instantiated. Don't instantiate them yet - // because they could depend on other components that haven't been added to the components - // array yet. - BOOL shouldInstantiateEager = - (component.instantiationTiming == FIRInstantiationTimingAlwaysEager); - BOOL shouldInstantiateDefaultEager = - (component.instantiationTiming == FIRInstantiationTimingEagerInDefaultApp && - [app isDefaultApp]); - if (shouldInstantiateEager || shouldInstantiateDefaultEager) { - [self.eagerProtocolsToInstantiate addObject:component.protocol]; - } - } - } -} - -#pragma mark - Instance Creation - -- (void)instantiateEagerComponents { - // After all components are registered, instantiate the ones that are requesting eager - // instantiation. - @synchronized(self) { - for (Protocol *protocol in self.eagerProtocolsToInstantiate) { - // Get an instance for the protocol, which will instantiate it since it couldn't have been - // cached yet. Ignore the instance coming back since we don't need it. - __unused id unusedInstance = [self instanceForProtocol:protocol]; - } - - // All eager instantiation is complete, clear the stored property now. - self.eagerProtocolsToInstantiate = nil; - } -} - -/// Instantiate an instance of a class that conforms to the specified protocol. -/// This will: -/// - Call the block to create an instance if possible, -/// - Validate that the instance returned conforms to the protocol it claims to, -/// - Cache the instance if the block requests it -/// -/// Note that this method assumes the caller already has @sychronized on self. -- (nullable id)instantiateInstanceForProtocol:(Protocol *)protocol - withBlock:(FIRComponentCreationBlock)creationBlock { - if (!creationBlock) { - return nil; - } - - // Create an instance using the creation block. - BOOL shouldCache = NO; - id instance = creationBlock(self, &shouldCache); - if (!instance) { - return nil; - } - - // An instance was created, validate that it conforms to the protocol it claims to. - NSString *protocolName = NSStringFromProtocol(protocol); - if (![instance conformsToProtocol:protocol]) { - FIRLogError(kFIRLoggerCore, @"I-COR000030", - @"An instance conforming to %@ was requested, but the instance provided does not " - @"conform to the protocol", - protocolName); - } - - // The instance is ready to be returned, but check if it should be cached first before returning. - if (shouldCache) { - self.cachedInstances[protocolName] = instance; - } - - return instance; -} - -#pragma mark - Internal Retrieval - -- (nullable id)instanceForProtocol:(Protocol *)protocol { - // Check if there is a cached instance, and return it if so. - NSString *protocolName = NSStringFromProtocol(protocol); - - id cachedInstance; - @synchronized(self) { - cachedInstance = self.cachedInstances[protocolName]; - if (!cachedInstance) { - // Use the creation block to instantiate an instance and return it. - FIRComponentCreationBlock creationBlock = self.components[protocolName]; - cachedInstance = [self instantiateInstanceForProtocol:protocol withBlock:creationBlock]; - } - } - return cachedInstance; -} - -#pragma mark - Lifecycle - -- (void)removeAllCachedInstances { - @synchronized(self) { - // Loop through the cache and notify each instance that is a maintainer to clean up after - // itself. - for (id instance in self.cachedInstances.allValues) { - if ([instance conformsToProtocol:@protocol(FIRComponentLifecycleMaintainer)] && - [instance respondsToSelector:@selector(appWillBeDeleted:)]) { - [instance appWillBeDeleted:self.app]; - } - } - - // Empty the cache. - [self.cachedInstances removeAllObjects]; - } -} - -- (void)removeAllComponents { - @synchronized(self) { - [self.components removeAllObjects]; - } -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentType.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentType.m deleted file mode 100644 index 6410f2e..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentType.m +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FirebaseCore/Sources/Private/FIRComponentType.h" - -#import "FirebaseCore/Sources/Private/FIRComponentContainerInternal.h" - -@implementation FIRComponentType - -+ (id)instanceForProtocol:(Protocol *)protocol inContainer:(FIRComponentContainer *)container { - // Forward the call to the container. - return [container instanceForProtocol:protocol]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRConfiguration.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRConfiguration.m deleted file mode 100644 index a1c9f4a..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRConfiguration.m +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FirebaseCore/Sources/Private/FIRConfigurationInternal.h" - -#import "FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h" - -extern void FIRSetLoggerLevel(FIRLoggerLevel loggerLevel); - -@implementation FIRConfiguration - -+ (instancetype)sharedInstance { - static FIRConfiguration *sharedInstance = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[FIRConfiguration alloc] init]; - }); - return sharedInstance; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _analyticsConfiguration = [FIRAnalyticsConfiguration sharedInstance]; - } - return self; -} - -- (void)setLoggerLevel:(FIRLoggerLevel)loggerLevel { - NSAssert(loggerLevel <= FIRLoggerLevelMax && loggerLevel >= FIRLoggerLevelMin, - @"Invalid logger level, %ld", (long)loggerLevel); - FIRSetLoggerLevel(loggerLevel); -} - -@end diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRCoreDiagnosticsConnector.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRCoreDiagnosticsConnector.m deleted file mode 100644 index 4981ca1..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRCoreDiagnosticsConnector.m +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h" - -#import <FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h> - -#import <FirebaseCore/FIROptions.h> - -#import "FirebaseCore/Sources/Private/FIRAppInternal.h" -#import "FirebaseCore/Sources/Private/FIRDiagnosticsData.h" -#import "FirebaseCore/Sources/Private/FIROptionsInternal.h" - -// Define the interop class symbol declared as an extern in FIRCoreDiagnosticsInterop. -Class<FIRCoreDiagnosticsInterop> FIRCoreDiagnosticsImplementation; - -@implementation FIRCoreDiagnosticsConnector - -+ (void)initialize { - if (!FIRCoreDiagnosticsImplementation) { - FIRCoreDiagnosticsImplementation = NSClassFromString(@"FIRCoreDiagnostics"); - if (FIRCoreDiagnosticsImplementation) { - NSAssert([FIRCoreDiagnosticsImplementation - conformsToProtocol:@protocol(FIRCoreDiagnosticsInterop)], - @"If FIRCoreDiagnostics is implemented, it must conform to the interop protocol."); - NSAssert( - [FIRCoreDiagnosticsImplementation respondsToSelector:@selector(sendDiagnosticsData:)], - @"If FIRCoreDiagnostics is implemented, it must implement +sendDiagnosticsData."); - } - } -} - -+ (void)logCoreTelemetryWithOptions:(FIROptions *)options { - if (FIRCoreDiagnosticsImplementation) { - FIRDiagnosticsData *diagnosticsData = [[FIRDiagnosticsData alloc] init]; - [diagnosticsData insertValue:@(YES) forKey:kFIRCDIsDataCollectionDefaultEnabledKey]; - [diagnosticsData insertValue:[FIRApp firebaseUserAgent] forKey:kFIRCDFirebaseUserAgentKey]; - [diagnosticsData insertValue:@(FIRConfigTypeCore) forKey:kFIRCDConfigurationTypeKey]; - [diagnosticsData insertValue:options.googleAppID forKey:kFIRCDGoogleAppIDKey]; - [diagnosticsData insertValue:options.bundleID forKey:kFIRCDBundleIDKey]; - [diagnosticsData insertValue:@(options.usingOptionsFromDefaultPlist) - forKey:kFIRCDUsingOptionsFromDefaultPlistKey]; - [diagnosticsData insertValue:options.libraryVersionID forKey:kFIRCDLibraryVersionIDKey]; - [FIRCoreDiagnosticsImplementation sendDiagnosticsData:diagnosticsData]; - } -} - -@end diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRDependency.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRDependency.m deleted file mode 100644 index e1e2578..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRDependency.m +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FirebaseCore/Sources/Private/FIRDependency.h" - -@interface FIRDependency () - -- (instancetype)initWithProtocol:(Protocol *)protocol isRequired:(BOOL)required; - -@end - -@implementation FIRDependency - -+ (instancetype)dependencyWithProtocol:(Protocol *)protocol { - return [[self alloc] initWithProtocol:protocol isRequired:YES]; -} - -+ (instancetype)dependencyWithProtocol:(Protocol *)protocol isRequired:(BOOL)required { - return [[self alloc] initWithProtocol:protocol isRequired:required]; -} - -- (instancetype)initWithProtocol:(Protocol *)protocol isRequired:(BOOL)required { - self = [super init]; - if (self) { - _protocol = protocol; - _isRequired = required; - } - return self; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRDiagnosticsData.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRDiagnosticsData.m deleted file mode 100644 index bbe0561..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRDiagnosticsData.m +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FirebaseCore/Sources/Private/FIRDiagnosticsData.h" - -#import <FirebaseCore/FIRApp.h> - -#import "FirebaseCore/Sources/Private/FIRAppInternal.h" -#import "FirebaseCore/Sources/Private/FIROptionsInternal.h" - -@implementation FIRDiagnosticsData { - /** Backing ivar for the diagnosticObjects property. */ - NSMutableDictionary<NSString *, id> *_diagnosticObjects; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _diagnosticObjects = [[NSMutableDictionary alloc] init]; - } - return self; -} - -- (void)insertValue:(nullable id)value forKey:(NSString *)key { - if (key) { - _diagnosticObjects[key] = value; - } -} - -#pragma mark - FIRCoreDiagnosticsData - -- (NSDictionary<NSString *, id> *)diagnosticObjects { - if (!_diagnosticObjects[kFIRCDllAppsCountKey]) { - _diagnosticObjects[kFIRCDllAppsCountKey] = @([FIRApp allApps].count); - } - if (!_diagnosticObjects[kFIRCDIsDataCollectionDefaultEnabledKey]) { - _diagnosticObjects[kFIRCDIsDataCollectionDefaultEnabledKey] = - @([[FIRApp defaultApp] isDataCollectionDefaultEnabled]); - } - if (!_diagnosticObjects[kFIRCDFirebaseUserAgentKey]) { - _diagnosticObjects[kFIRCDFirebaseUserAgentKey] = [FIRApp firebaseUserAgent]; - } - return _diagnosticObjects; -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-parameter" -- (void)setDiagnosticObjects:(NSDictionary<NSString *, id> *)diagnosticObjects { - NSAssert(NO, @"Please use -insertValue:forKey:"); -} -#pragma clang diagnostic pop - -@end diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRErrors.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRErrors.m deleted file mode 100644 index 104eeb8..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRErrors.m +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FirebaseCore/Sources/Private/FIRErrors.h" - -NSString *const kFirebaseErrorDomain = @"com.firebase"; -NSString *const kFirebaseConfigErrorDomain = @"com.firebase.config"; -NSString *const kFirebaseCoreErrorDomain = @"com.firebase.core"; -NSString *const kFirebasePerfErrorDomain = @"com.firebase.perf"; -NSString *const kFirebaseStorageErrorDomain = @"com.firebase.storage"; diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRHeartbeatInfo.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRHeartbeatInfo.m deleted file mode 100644 index 277b0f7..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRHeartbeatInfo.m +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FirebaseCore/Sources/Private/FIRHeartbeatInfo.h" -#import <GoogleUtilities/GULHeartbeatDateStorage.h> -#import <GoogleUtilities/GULLogger.h> - -const static long secondsInDay = 86400; -@implementation FIRHeartbeatInfo : NSObject - -/** Updates the storage with the heartbeat information corresponding to this tag. - * @param heartbeatTag Tag which could either be sdk specific tag or the global tag. - * @return Boolean representing whether the heartbeat needs to be sent for this tag or not. - */ -+ (BOOL)updateIfNeededHeartbeatDateForTag:(NSString *)heartbeatTag { - @synchronized(self) { - NSString *const kHeartbeatStorageFile = @"HEARTBEAT_INFO_STORAGE"; - GULHeartbeatDateStorage *dataStorage = - [[GULHeartbeatDateStorage alloc] initWithFileName:kHeartbeatStorageFile]; - NSDate *heartbeatTime = [dataStorage heartbeatDateForTag:heartbeatTag]; - NSDate *currentDate = [NSDate date]; - if (heartbeatTime != nil) { - NSTimeInterval secondsBetween = [currentDate timeIntervalSinceDate:heartbeatTime]; - if (secondsBetween < secondsInDay) { - return false; - } - } - return [dataStorage setHearbeatDate:currentDate forTag:heartbeatTag]; - } -} - -+ (FIRHeartbeatInfoCode)heartbeatCodeForTag:(NSString *)heartbeatTag { - NSString *globalTag = @"GLOBAL"; - BOOL isSdkHeartbeatNeeded = [FIRHeartbeatInfo updateIfNeededHeartbeatDateForTag:heartbeatTag]; - BOOL isGlobalHeartbeatNeeded = [FIRHeartbeatInfo updateIfNeededHeartbeatDateForTag:globalTag]; - if (!isSdkHeartbeatNeeded && !isGlobalHeartbeatNeeded) { - // Both sdk and global heartbeat not needed. - return FIRHeartbeatInfoCodeNone; - } else if (isSdkHeartbeatNeeded && !isGlobalHeartbeatNeeded) { - // Only SDK heartbeat needed. - return FIRHeartbeatInfoCodeSDK; - } else if (!isSdkHeartbeatNeeded && isGlobalHeartbeatNeeded) { - // Only global heartbeat needed. - return FIRHeartbeatInfoCodeGlobal; - } else { - // Both sdk and global heartbeat are needed. - return FIRHeartbeatInfoCodeCombined; - } -} -@end diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRLogger.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRLogger.m deleted file mode 100644 index ba2ee1f..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRLogger.m +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FirebaseCore/Sources/Private/FIRLogger.h" - -#import <FirebaseCore/FIRLoggerLevel.h> -#import <GoogleUtilities/GULAppEnvironmentUtil.h> -#import <GoogleUtilities/GULLogger.h> - -#import "FirebaseCore/Sources/FIRVersion.h" - -FIRLoggerService kFIRLoggerCore = @"[Firebase/Core]"; - -// All the FIRLoggerService definitions should be migrated to clients. Do not add new ones! -FIRLoggerService kFIRLoggerABTesting = @"[Firebase/ABTesting]"; -FIRLoggerService kFIRLoggerAdMob = @"[Firebase/AdMob]"; -FIRLoggerService kFIRLoggerAnalytics = @"[Firebase/Analytics]"; -FIRLoggerService kFIRLoggerAuth = @"[Firebase/Auth]"; -FIRLoggerService kFIRLoggerCrash = @"[Firebase/Crash]"; -FIRLoggerService kFIRLoggerMLKit = @"[Firebase/MLKit]"; -FIRLoggerService kFIRLoggerPerf = @"[Firebase/Performance]"; -FIRLoggerService kFIRLoggerRemoteConfig = @"[Firebase/RemoteConfig]"; - -/// Arguments passed on launch. -NSString *const kFIRDisableDebugModeApplicationArgument = @"-FIRDebugDisabled"; -NSString *const kFIREnableDebugModeApplicationArgument = @"-FIRDebugEnabled"; -NSString *const kFIRLoggerForceSDTERRApplicationArgument = @"-FIRLoggerForceSTDERR"; - -/// Key for the debug mode bit in NSUserDefaults. -NSString *const kFIRPersistedDebugModeKey = @"/google/firebase/debug_mode"; - -/// NSUserDefaults that should be used to store and read variables. If nil, `standardUserDefaults` -/// will be used. -static NSUserDefaults *sFIRLoggerUserDefaults; - -static dispatch_once_t sFIRLoggerOnceToken; - -// The sFIRAnalyticsDebugMode flag is here to support the -FIRDebugEnabled/-FIRDebugDisabled -// flags used by Analytics. Users who use those flags expect Analytics to log verbosely, -// while the rest of Firebase logs at the default level. This flag is introduced to support -// that behavior. -static BOOL sFIRAnalyticsDebugMode; - -#ifdef DEBUG -/// The regex pattern for the message code. -static NSString *const kMessageCodePattern = @"^I-[A-Z]{3}[0-9]{6}$"; -static NSRegularExpression *sMessageCodeRegex; -#endif - -void FIRLoggerInitializeASL() { - dispatch_once(&sFIRLoggerOnceToken, ^{ - // Register Firebase Version with GULLogger. - GULLoggerRegisterVersion(FIRVersionString); - - // Override the aslOptions to ASL_OPT_STDERR if the override argument is passed in. - NSArray *arguments = [NSProcessInfo processInfo].arguments; - BOOL overrideSTDERR = [arguments containsObject:kFIRLoggerForceSDTERRApplicationArgument]; - - // Use the standard NSUserDefaults if it hasn't been explicitly set. - if (sFIRLoggerUserDefaults == nil) { - sFIRLoggerUserDefaults = [NSUserDefaults standardUserDefaults]; - } - - BOOL forceDebugMode = NO; - BOOL debugMode = [sFIRLoggerUserDefaults boolForKey:kFIRPersistedDebugModeKey]; - if ([arguments containsObject:kFIRDisableDebugModeApplicationArgument]) { // Default mode - [sFIRLoggerUserDefaults removeObjectForKey:kFIRPersistedDebugModeKey]; - } else if ([arguments containsObject:kFIREnableDebugModeApplicationArgument] || - debugMode) { // Debug mode - [sFIRLoggerUserDefaults setBool:YES forKey:kFIRPersistedDebugModeKey]; - forceDebugMode = YES; - } - GULLoggerInitializeASL(); - if (overrideSTDERR) { - GULLoggerEnableSTDERR(); - } - if (forceDebugMode) { - GULLoggerForceDebug(); - } - }); -} - -__attribute__((no_sanitize("thread"))) void FIRSetAnalyticsDebugMode(BOOL analyticsDebugMode) { - sFIRAnalyticsDebugMode = analyticsDebugMode; -} - -void FIRSetLoggerLevel(FIRLoggerLevel loggerLevel) { - FIRLoggerInitializeASL(); - GULSetLoggerLevel((GULLoggerLevel)loggerLevel); -} - -#ifdef DEBUG -void FIRResetLogger() { - extern void GULResetLogger(void); - sFIRLoggerOnceToken = 0; - [sFIRLoggerUserDefaults removeObjectForKey:kFIRPersistedDebugModeKey]; - sFIRLoggerUserDefaults = nil; - GULResetLogger(); -} - -void FIRSetLoggerUserDefaults(NSUserDefaults *defaults) { - sFIRLoggerUserDefaults = defaults; -} -#endif - -/** - * Check if the level is high enough to be loggable. - * - * Analytics can override the log level with an intentional race condition. - * Add the attribute to get a clean thread sanitizer run. - */ -__attribute__((no_sanitize("thread"))) BOOL FIRIsLoggableLevel(FIRLoggerLevel loggerLevel, - BOOL analyticsComponent) { - FIRLoggerInitializeASL(); - if (sFIRAnalyticsDebugMode && analyticsComponent) { - return YES; - } - return GULIsLoggableLevel((GULLoggerLevel)loggerLevel); -} - -void FIRLogBasic(FIRLoggerLevel level, - FIRLoggerService service, - NSString *messageCode, - NSString *message, - va_list args_ptr) { - FIRLoggerInitializeASL(); - GULLogBasic((GULLoggerLevel)level, service, - sFIRAnalyticsDebugMode && [kFIRLoggerAnalytics isEqualToString:service], messageCode, - message, args_ptr); -} - -/** - * Generates the logging functions using macros. - * - * Calling FIRLogError(kFIRLoggerCore, @"I-COR000001", @"Configure %@ failed.", @"blah") shows: - * yyyy-mm-dd hh:mm:ss.SSS sender[PID] <Error> [Firebase/Core][I-COR000001] Configure blah failed. - * Calling FIRLogDebug(kFIRLoggerCore, @"I-COR000001", @"Configure succeed.") shows: - * yyyy-mm-dd hh:mm:ss.SSS sender[PID] <Debug> [Firebase/Core][I-COR000001] Configure succeed. - */ -#define FIR_LOGGING_FUNCTION(level) \ - void FIRLog##level(FIRLoggerService service, NSString *messageCode, NSString *message, ...) { \ - va_list args_ptr; \ - va_start(args_ptr, message); \ - FIRLogBasic(FIRLoggerLevel##level, service, messageCode, message, args_ptr); \ - va_end(args_ptr); \ - } - -FIR_LOGGING_FUNCTION(Error) -FIR_LOGGING_FUNCTION(Warning) -FIR_LOGGING_FUNCTION(Notice) -FIR_LOGGING_FUNCTION(Info) -FIR_LOGGING_FUNCTION(Debug) - -#undef FIR_MAKE_LOGGER - -#pragma mark - FIRLoggerWrapper - -@implementation FIRLoggerWrapper - -+ (void)logWithLevel:(FIRLoggerLevel)level - withService:(FIRLoggerService)service - withCode:(NSString *)messageCode - withMessage:(NSString *)message - withArgs:(va_list)args { - FIRLogBasic(level, service, messageCode, message, args); -} - -@end diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIROptions.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIROptions.m deleted file mode 100644 index d185330..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIROptions.m +++ /dev/null @@ -1,490 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FirebaseCore/Sources/FIRBundleUtil.h" -#import "FirebaseCore/Sources/FIRVersion.h" -#import "FirebaseCore/Sources/Private/FIRAppInternal.h" -#import "FirebaseCore/Sources/Private/FIRLogger.h" -#import "FirebaseCore/Sources/Private/FIROptionsInternal.h" - -// Keys for the strings in the plist file. -NSString *const kFIRAPIKey = @"API_KEY"; -NSString *const kFIRTrackingID = @"TRACKING_ID"; -NSString *const kFIRGoogleAppID = @"GOOGLE_APP_ID"; -NSString *const kFIRClientID = @"CLIENT_ID"; -NSString *const kFIRGCMSenderID = @"GCM_SENDER_ID"; -NSString *const kFIRAndroidClientID = @"ANDROID_CLIENT_ID"; -NSString *const kFIRDatabaseURL = @"DATABASE_URL"; -NSString *const kFIRStorageBucket = @"STORAGE_BUCKET"; -// The key to locate the expected bundle identifier in the plist file. -NSString *const kFIRBundleID = @"BUNDLE_ID"; -// The key to locate the project identifier in the plist file. -NSString *const kFIRProjectID = @"PROJECT_ID"; - -NSString *const kFIRIsMeasurementEnabled = @"IS_MEASUREMENT_ENABLED"; -NSString *const kFIRIsAnalyticsCollectionEnabled = @"FIREBASE_ANALYTICS_COLLECTION_ENABLED"; -NSString *const kFIRIsAnalyticsCollectionDeactivated = @"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED"; - -NSString *const kFIRIsAnalyticsEnabled = @"IS_ANALYTICS_ENABLED"; -NSString *const kFIRIsSignInEnabled = @"IS_SIGNIN_ENABLED"; - -// Library version ID formatted like: -// @"5" // Major version (one or more digits) -// @"04" // Minor version (exactly 2 digits) -// @"01" // Build number (exactly 2 digits) -// @"000"; // Fixed "000" -NSString *kFIRLibraryVersionID; - -// Plist file name. -NSString *const kServiceInfoFileName = @"GoogleService-Info"; -// Plist file type. -NSString *const kServiceInfoFileType = @"plist"; - -// Exception raised from attempting to modify a FIROptions after it's been copied to a FIRApp. -NSString *const kFIRExceptionBadModification = - @"Attempted to modify options after it's set on FIRApp. Please modify all properties before " - @"initializing FIRApp."; - -@interface FIROptions () - -/** - * This property maintains the actual configuration key-value pairs. - */ -@property(nonatomic, readwrite) NSMutableDictionary *optionsDictionary; - -/** - * Calls `analyticsOptionsDictionaryWithInfoDictionary:` using [NSBundle mainBundle].infoDictionary. - * It combines analytics options from both the infoDictionary and the GoogleService-Info.plist. - * Values which are present in the main plist override values from the GoogleService-Info.plist. - */ -@property(nonatomic, readonly) NSDictionary *analyticsOptionsDictionary; - -/** - * Combination of analytics options from both the infoDictionary and the GoogleService-Info.plist. - * Values which are present in the infoDictionary override values from the GoogleService-Info.plist. - */ -- (NSDictionary *)analyticsOptionsDictionaryWithInfoDictionary:(NSDictionary *)infoDictionary; - -/** - * Throw exception if editing is locked when attempting to modify an option. - */ -- (void)checkEditingLocked; - -@end - -@implementation FIROptions { - /// Backing variable for self.analyticsOptionsDictionary. - NSDictionary *_analyticsOptionsDictionary; -} - -static FIROptions *sDefaultOptions = nil; -static NSDictionary *sDefaultOptionsDictionary = nil; - -#pragma mark - Public only for internal class methods - -+ (FIROptions *)defaultOptions { - if (sDefaultOptions != nil) { - return sDefaultOptions; - } - - NSDictionary *defaultOptionsDictionary = [self defaultOptionsDictionary]; - if (defaultOptionsDictionary == nil) { - return nil; - } - - sDefaultOptions = [[FIROptions alloc] initInternalWithOptionsDictionary:defaultOptionsDictionary]; - return sDefaultOptions; -} - -#pragma mark - Private class methods - -+ (NSDictionary *)defaultOptionsDictionary { - if (sDefaultOptionsDictionary != nil) { - return sDefaultOptionsDictionary; - } - NSString *plistFilePath = [FIROptions plistFilePathWithName:kServiceInfoFileName]; - if (plistFilePath == nil) { - return nil; - } - sDefaultOptionsDictionary = [NSDictionary dictionaryWithContentsOfFile:plistFilePath]; - if (sDefaultOptionsDictionary == nil) { - FIRLogError(kFIRLoggerCore, @"I-COR000011", - @"The configuration file is not a dictionary: " - @"'%@.%@'.", - kServiceInfoFileName, kServiceInfoFileType); - } - return sDefaultOptionsDictionary; -} - -// Returns the path of the plist file with a given file name. -+ (NSString *)plistFilePathWithName:(NSString *)fileName { - NSArray *bundles = [FIRBundleUtil relevantBundles]; - NSString *plistFilePath = - [FIRBundleUtil optionsDictionaryPathWithResourceName:fileName - andFileType:kServiceInfoFileType - inBundles:bundles]; - if (plistFilePath == nil) { - FIRLogError(kFIRLoggerCore, @"I-COR000012", @"Could not locate configuration file: '%@.%@'.", - fileName, kServiceInfoFileType); - } - return plistFilePath; -} - -+ (void)resetDefaultOptions { - sDefaultOptions = nil; - sDefaultOptionsDictionary = nil; -} - -#pragma mark - Private instance methods - -- (instancetype)initInternalWithOptionsDictionary:(NSDictionary *)optionsDictionary { - self = [super init]; - if (self) { - _optionsDictionary = [optionsDictionary mutableCopy]; - _usingOptionsFromDefaultPlist = YES; - } - return self; -} - -- (id)copyWithZone:(NSZone *)zone { - FIROptions *newOptions = [[[self class] allocWithZone:zone] init]; - if (newOptions) { - newOptions.optionsDictionary = self.optionsDictionary; - newOptions.deepLinkURLScheme = self.deepLinkURLScheme; - newOptions.appGroupID = self.appGroupID; - newOptions.editingLocked = self.isEditingLocked; - newOptions.usingOptionsFromDefaultPlist = self.usingOptionsFromDefaultPlist; - } - return newOptions; -} - -#pragma mark - Public instance methods - -- (instancetype)initWithContentsOfFile:(NSString *)plistPath { - self = [super init]; - if (self) { - if (plistPath == nil) { - FIRLogError(kFIRLoggerCore, @"I-COR000013", @"The plist file path is nil."); - return nil; - } - _optionsDictionary = [[NSDictionary dictionaryWithContentsOfFile:plistPath] mutableCopy]; - if (_optionsDictionary == nil) { - FIRLogError(kFIRLoggerCore, @"I-COR000014", - @"The configuration file at %@ does not exist or " - @"is not a well-formed plist file.", - plistPath); - return nil; - } - // TODO: Do we want to validate the dictionary here? It says we do that already in - // the public header. - } - return self; -} - -- (instancetype)initWithGoogleAppID:(NSString *)googleAppID GCMSenderID:(NSString *)GCMSenderID { - self = [super init]; - if (self) { - NSMutableDictionary *mutableOptionsDict = [NSMutableDictionary dictionary]; - [mutableOptionsDict setValue:googleAppID forKey:kFIRGoogleAppID]; - [mutableOptionsDict setValue:GCMSenderID forKey:kFIRGCMSenderID]; - [mutableOptionsDict setValue:[[NSBundle mainBundle] bundleIdentifier] forKey:kFIRBundleID]; - self.optionsDictionary = mutableOptionsDict; - } - return self; -} - -- (NSString *)APIKey { - return self.optionsDictionary[kFIRAPIKey]; -} - -- (void)checkEditingLocked { - if (self.isEditingLocked) { - [NSException raise:kFirebaseCoreErrorDomain format:kFIRExceptionBadModification]; - } -} - -- (void)setAPIKey:(NSString *)APIKey { - [self checkEditingLocked]; - _optionsDictionary[kFIRAPIKey] = [APIKey copy]; -} - -- (NSString *)clientID { - return self.optionsDictionary[kFIRClientID]; -} - -- (void)setClientID:(NSString *)clientID { - [self checkEditingLocked]; - _optionsDictionary[kFIRClientID] = [clientID copy]; -} - -- (NSString *)trackingID { - return self.optionsDictionary[kFIRTrackingID]; -} - -- (void)setTrackingID:(NSString *)trackingID { - [self checkEditingLocked]; - _optionsDictionary[kFIRTrackingID] = [trackingID copy]; -} - -- (NSString *)GCMSenderID { - return self.optionsDictionary[kFIRGCMSenderID]; -} - -- (void)setGCMSenderID:(NSString *)GCMSenderID { - [self checkEditingLocked]; - _optionsDictionary[kFIRGCMSenderID] = [GCMSenderID copy]; -} - -- (NSString *)projectID { - return self.optionsDictionary[kFIRProjectID]; -} - -- (void)setProjectID:(NSString *)projectID { - [self checkEditingLocked]; - _optionsDictionary[kFIRProjectID] = [projectID copy]; -} - -- (NSString *)androidClientID { - return self.optionsDictionary[kFIRAndroidClientID]; -} - -- (void)setAndroidClientID:(NSString *)androidClientID { - [self checkEditingLocked]; - _optionsDictionary[kFIRAndroidClientID] = [androidClientID copy]; -} - -- (NSString *)googleAppID { - return self.optionsDictionary[kFIRGoogleAppID]; -} - -- (void)setGoogleAppID:(NSString *)googleAppID { - [self checkEditingLocked]; - _optionsDictionary[kFIRGoogleAppID] = [googleAppID copy]; -} - -- (NSString *)libraryVersionID { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - // The unit tests are set up to catch anything that does not properly convert. - NSString *version = [NSString stringWithUTF8String:FIRCoreVersionString]; - NSArray *components = [version componentsSeparatedByString:@"."]; - NSString *major = [components objectAtIndex:0]; - NSString *minor = [NSString stringWithFormat:@"%02d", [[components objectAtIndex:1] intValue]]; - NSString *patch = [NSString stringWithFormat:@"%02d", [[components objectAtIndex:2] intValue]]; - kFIRLibraryVersionID = [NSString stringWithFormat:@"%@%@%@000", major, minor, patch]; - }); - return kFIRLibraryVersionID; -} - -- (void)setLibraryVersionID:(NSString *)libraryVersionID { - _optionsDictionary[kFIRLibraryVersionID] = [libraryVersionID copy]; -} - -- (NSString *)databaseURL { - return self.optionsDictionary[kFIRDatabaseURL]; -} - -- (void)setDatabaseURL:(NSString *)databaseURL { - [self checkEditingLocked]; - - _optionsDictionary[kFIRDatabaseURL] = [databaseURL copy]; -} - -- (NSString *)storageBucket { - return self.optionsDictionary[kFIRStorageBucket]; -} - -- (void)setStorageBucket:(NSString *)storageBucket { - [self checkEditingLocked]; - _optionsDictionary[kFIRStorageBucket] = [storageBucket copy]; -} - -- (void)setDeepLinkURLScheme:(NSString *)deepLinkURLScheme { - [self checkEditingLocked]; - _deepLinkURLScheme = [deepLinkURLScheme copy]; -} - -- (NSString *)bundleID { - return self.optionsDictionary[kFIRBundleID]; -} - -- (void)setBundleID:(NSString *)bundleID { - [self checkEditingLocked]; - _optionsDictionary[kFIRBundleID] = [bundleID copy]; -} - -- (void)setAppGroupID:(NSString *)appGroupID { - [self checkEditingLocked]; - _appGroupID = [appGroupID copy]; -} - -#pragma mark - Equality - -- (BOOL)isEqual:(id)object { - if (!object || ![object isKindOfClass:[FIROptions class]]) { - return NO; - } - - return [self isEqualToOptions:(FIROptions *)object]; -} - -- (BOOL)isEqualToOptions:(FIROptions *)options { - // Skip any non-FIROptions classes. - if (![options isKindOfClass:[FIROptions class]]) { - return NO; - } - - // Check the internal dictionary and custom properties for differences. - if (![options.optionsDictionary isEqualToDictionary:self.optionsDictionary]) { - return NO; - } - - // Validate extra properties not contained in the dictionary. Only validate it if one of the - // objects has the property set. - if ((options.deepLinkURLScheme != nil || self.deepLinkURLScheme != nil) && - ![options.deepLinkURLScheme isEqualToString:self.deepLinkURLScheme]) { - return NO; - } - - if ((options.appGroupID != nil || self.appGroupID != nil) && - ![options.appGroupID isEqualToString:self.appGroupID]) { - return NO; - } - - // Validate the Analytics options haven't changed with the Info.plist. - if (![options.analyticsOptionsDictionary isEqualToDictionary:self.analyticsOptionsDictionary]) { - return NO; - } - - // We don't care about the `editingLocked` or `usingOptionsFromDefaultPlist` properties since - // those relate to lifecycle and construction, we only care if the contents of the options - // themselves are equal. - return YES; -} - -- (NSUInteger)hash { - // This is strongly recommended for any object that implements a custom `isEqual:` method to - // ensure that dictionary and set behavior matches other `isEqual:` checks. - // Note: `self.analyticsOptionsDictionary` was left out here since it solely relies on the - // contents of the main bundle's `Info.plist`. We should avoid reading that file and the contents - // should be identical. - return self.optionsDictionary.hash ^ self.deepLinkURLScheme.hash ^ self.appGroupID.hash; -} - -#pragma mark - Internal instance methods - -- (NSDictionary *)analyticsOptionsDictionaryWithInfoDictionary:(NSDictionary *)infoDictionary { - if (_analyticsOptionsDictionary == nil) { - NSMutableDictionary *tempAnalyticsOptions = [[NSMutableDictionary alloc] init]; - NSArray *measurementKeys = @[ - kFIRIsMeasurementEnabled, kFIRIsAnalyticsCollectionEnabled, - kFIRIsAnalyticsCollectionDeactivated - ]; - for (NSString *key in measurementKeys) { - id value = infoDictionary[key] ?: self.optionsDictionary[key] ?: nil; - if (!value) { - continue; - } - tempAnalyticsOptions[key] = value; - } - _analyticsOptionsDictionary = tempAnalyticsOptions; - } - return _analyticsOptionsDictionary; -} - -- (NSDictionary *)analyticsOptionsDictionary { - return [self analyticsOptionsDictionaryWithInfoDictionary:[NSBundle mainBundle].infoDictionary]; -} - -/** - * Whether or not Measurement was enabled. Measurement is enabled unless explicitly disabled in - * GoogleService-Info.plist. This uses the old plist flag IS_MEASUREMENT_ENABLED, which should still - * be supported. - */ -- (BOOL)isMeasurementEnabled { - if (self.isAnalyticsCollectionDeactivated) { - return NO; - } - NSNumber *value = self.analyticsOptionsDictionary[kFIRIsMeasurementEnabled]; - if (value == nil) { - // TODO: This could probably be cleaned up since FIROptions shouldn't know about FIRApp or have - // to check if it's the default app. The FIROptions instance can't be modified after - // `+configure` is called, so it's not a good place to copy it either in case the flag is - // changed at runtime. - - // If no values are set for Analytics, fall back to the global collection switch in FIRApp. - // Analytics only supports the default FIRApp, so check that first. - if (![FIRApp isDefaultAppConfigured]) { - return NO; - } - - // Fall back to the default app's collection switch when the key is not in the dictionary. - return [FIRApp defaultApp].isDataCollectionDefaultEnabled; - } - return [value boolValue]; -} - -- (BOOL)isAnalyticsCollectionExplicitlySet { - // If it's de-activated, it classifies as explicity set. If not, it's not a good enough indication - // that the developer wants FirebaseAnalytics enabled so continue checking. - if (self.isAnalyticsCollectionDeactivated) { - return YES; - } - - // Check if the current Analytics flag is set. - id collectionEnabledObject = self.analyticsOptionsDictionary[kFIRIsAnalyticsCollectionEnabled]; - if (collectionEnabledObject && [collectionEnabledObject isKindOfClass:[NSNumber class]]) { - // It doesn't matter what the value is, it's explicitly set. - return YES; - } - - // Check if the old measurement flag is set. - id measurementEnabledObject = self.analyticsOptionsDictionary[kFIRIsMeasurementEnabled]; - if (measurementEnabledObject && [measurementEnabledObject isKindOfClass:[NSNumber class]]) { - // It doesn't matter what the value is, it's explicitly set. - return YES; - } - - // No flags are set to explicitly enable or disable FirebaseAnalytics. - return NO; -} - -- (BOOL)isAnalyticsCollectionEnabled { - if (self.isAnalyticsCollectionDeactivated) { - return NO; - } - NSNumber *value = self.analyticsOptionsDictionary[kFIRIsAnalyticsCollectionEnabled]; - if (value == nil) { - return self.isMeasurementEnabled; // Fall back to older plist flag. - } - return [value boolValue]; -} - -- (BOOL)isAnalyticsCollectionDeactivated { - NSNumber *value = self.analyticsOptionsDictionary[kFIRIsAnalyticsCollectionDeactivated]; - if (value == nil) { - return NO; // Analytics Collection is not deactivated when the key is not in the dictionary. - } - return [value boolValue]; -} - -- (BOOL)isAnalyticsEnabled { - return [self.optionsDictionary[kFIRIsAnalyticsEnabled] boolValue]; -} - -- (BOOL)isSignInEnabled { - return [self.optionsDictionary[kFIRIsSignInEnabled] boolValue]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.h deleted file mode 100644 index 226efb1..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -/** The version of the Firebase SDK. */ -FOUNDATION_EXPORT const char *const FIRVersionString; - -/** The version of the FirebaseCore Component. */ -FOUNDATION_EXPORT const char *const FIRCoreVersionString; diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.m b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.m deleted file mode 100644 index ec0f6ba..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.m +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef Firebase_VERSION -#error "Firebase_VERSION is not defined: add -DFirebase_VERSION=... to the build invocation" -#endif - -#ifndef FIRCore_VERSION -#error "FIRCore_VERSION is not defined: add -DFIRCore_VERSION=... to the build invocation" -#endif - -// The following two macros supply the incantation so that the C -// preprocessor does not try to parse the version as a floating -// point number. See -// https://www.guyrutenberg.com/2008/12/20/expanding-macros-into-string-constants-in-c/ -#define STR(x) STR_EXPAND(x) -#define STR_EXPAND(x) #x - -const char *const FIRVersionString = (const char *const)STR(Firebase_VERSION); -const char *const FIRCoreVersionString = (const char *const)STR(FIRCore_VERSION); diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h deleted file mode 100644 index 6429ac7..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -/// Values stored in analyticsEnabledState. Never alter these constants since they must match with -/// values persisted to disk. -typedef NS_ENUM(int64_t, FIRAnalyticsEnabledState) { - // 0 is the default value for keys not found stored in persisted config, so it cannot represent - // kFIRAnalyticsEnabledStateSetNo. It must represent kFIRAnalyticsEnabledStateNotSet. - kFIRAnalyticsEnabledStateNotSet = 0, - kFIRAnalyticsEnabledStateSetYes = 1, - kFIRAnalyticsEnabledStateSetNo = 2, -}; - -/// The user defaults key for the persisted measurementEnabledState value. FIRAPersistedConfig reads -/// measurementEnabledState using this same key. -static NSString *const kFIRAPersistedConfigMeasurementEnabledStateKey = - @"/google/measurement/measurement_enabled_state"; - -static NSString *const kFIRAnalyticsConfigurationSetEnabledNotification = - @"FIRAnalyticsConfigurationSetEnabledNotification"; -static NSString *const kFIRAnalyticsConfigurationSetMinimumSessionIntervalNotification = - @"FIRAnalyticsConfigurationSetMinimumSessionIntervalNotification"; -static NSString *const kFIRAnalyticsConfigurationSetSessionTimeoutIntervalNotification = - @"FIRAnalyticsConfigurationSetSessionTimeoutIntervalNotification"; - -@interface FIRAnalyticsConfiguration : NSObject - -/// Returns the shared instance of FIRAnalyticsConfiguration. -+ (FIRAnalyticsConfiguration *)sharedInstance; - -// Sets whether analytics collection is enabled for this app on this device. This setting is -// persisted across app sessions. By default it is enabled. -- (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled; - -/// Sets whether analytics collection is enabled for this app on this device, and a flag to persist -/// the value or not. The setting should not be persisted if being set by the global data collection -/// flag. -- (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled - persistSetting:(BOOL)shouldPersist; - -@end diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppAssociationRegistration.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppAssociationRegistration.h deleted file mode 100644 index 3fc69c6..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppAssociationRegistration.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -// TODO: Remove this once Auth moves over to Core's instance registration system. -/** @class FIRAppAssociationRegistration - @brief Manages object associations as a singleton-dependent: At most one object is - registered for any given host/key pair, and the object shall be created on-the-fly when - asked for. - */ -@interface FIRAppAssociationRegistration<ObjectType> : NSObject - -/** @fn registeredObjectWithHost:key:creationBlock: - @brief Retrieves the registered object with a particular host and key. - @param host The host object. - @param key The key to specify the registered object on the host. - @param creationBlock The block to return the object to be registered if not already. - The block is executed immediately before this method returns if it is executed at all. - It can also be executed multiple times across different method invocations if previous - execution of the block returns @c nil. - @return The registered object for the host/key pair, or @c nil if no object is registered - and @c creationBlock returns @c nil. - @remarks The method is thread-safe but non-reentrant in the sense that attempting to call this - method again within the @c creationBlock with the same host/key pair raises an exception. - The registered object is retained by the host. - */ -+ (nullable ObjectType)registeredObjectWithHost:(id)host - key:(NSString *)key - creationBlock:(ObjectType _Nullable (^)(void))creationBlock; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppInternal.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppInternal.h deleted file mode 100644 index ad1a186..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppInternal.h +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <FirebaseCore/FIRApp.h> -#import <FirebaseCore/FIRErrors.h> - -@class FIRComponentContainer; -@protocol FIRLibrary; - -/** - * The internal interface to FIRApp. This is meant for first-party integrators, who need to receive - * FIRApp notifications, log info about the success or failure of their configuration, and access - * other internal functionality of FIRApp. - * - * TODO(b/28296561): Restructure this header. - */ -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(NSInteger, FIRConfigType) { - FIRConfigTypeCore = 1, - FIRConfigTypeSDK = 2, -}; - -extern NSString *const kFIRDefaultAppName; -extern NSString *const kFIRAppReadyToConfigureSDKNotification; -extern NSString *const kFIRAppDeleteNotification; -extern NSString *const kFIRAppIsDefaultAppKey; -extern NSString *const kFIRAppNameKey; -extern NSString *const kFIRGoogleAppIDKey; - -/** - * The format string for the User Defaults key used for storing the data collection enabled flag. - * This includes formatting to append the Firebase App's name. - */ -extern NSString *const kFIRGlobalAppDataCollectionEnabledDefaultsKeyFormat; - -/** - * The plist key used for storing the data collection enabled flag. - */ -extern NSString *const kFIRGlobalAppDataCollectionEnabledPlistKey; - -/** - * A notification fired containing diagnostic information when SDK errors occur. - */ -extern NSString *const kFIRAppDiagnosticsNotification; - -/** @var FIRAuthStateDidChangeInternalNotification - @brief The name of the @c NSNotificationCenter notification which is posted when the auth state - changes (e.g. a new token has been produced, a user logs in or out). The object parameter of - the notification is a dictionary possibly containing the key: - @c FIRAuthStateDidChangeInternalNotificationTokenKey (the new access token.) If it does not - contain this key it indicates a sign-out event took place. - */ -extern NSString *const FIRAuthStateDidChangeInternalNotification; - -/** @var FIRAuthStateDidChangeInternalNotificationTokenKey - @brief A key present in the dictionary object parameter of the - @c FIRAuthStateDidChangeInternalNotification notification. The value associated with this - key will contain the new access token. - */ -extern NSString *const FIRAuthStateDidChangeInternalNotificationTokenKey; - -/** @var FIRAuthStateDidChangeInternalNotificationAppKey - @brief A key present in the dictionary object parameter of the - @c FIRAuthStateDidChangeInternalNotification notification. The value associated with this - key will contain the FIRApp associated with the auth instance. - */ -extern NSString *const FIRAuthStateDidChangeInternalNotificationAppKey; - -/** @var FIRAuthStateDidChangeInternalNotificationUIDKey - @brief A key present in the dictionary object parameter of the - @c FIRAuthStateDidChangeInternalNotification notification. The value associated with this - key will contain the new user's UID (or nil if there is no longer a user signed in). - */ -extern NSString *const FIRAuthStateDidChangeInternalNotificationUIDKey; - -@interface FIRApp () - -/** - * A flag indicating if this is the default app (has the default app name). - */ -@property(nonatomic, readonly) BOOL isDefaultApp; - -/* - * The container of interop SDKs for this app. - */ -@property(nonatomic) FIRComponentContainer *container; - -/** - * Creates an error for failing to configure a subspec service. This method is called by each - * FIRApp notification listener. - */ -+ (NSError *)errorForSubspecConfigurationFailureWithDomain:(NSString *)domain - errorCode:(FIRErrorCode)code - service:(NSString *)service - reason:(NSString *)reason; -/** - * Checks if the default app is configured without trying to configure it. - */ -+ (BOOL)isDefaultAppConfigured; - -/** - * Registers a given third-party library with the given version number to be reported for - * analytics. - * - * @param name Name of the library. - * @param version Version of the library. - */ -+ (void)registerLibrary:(nonnull NSString *)name withVersion:(nonnull NSString *)version; - -/** - * Registers a given internal library with the given version number to be reported for - * analytics. - * - * @param library Optional parameter for component registration. - * @param name Name of the library. - * @param version Version of the library. - */ -+ (void)registerInternalLibrary:(nonnull Class<FIRLibrary>)library - withName:(nonnull NSString *)name - withVersion:(nonnull NSString *)version; - -/** - * A concatenated string representing all the third-party libraries and version numbers. - */ -+ (NSString *)firebaseUserAgent; - -/** - * Used by each SDK to send logs about SDK configuration status to Clearcut. - * - * @note This API is a no-op, please remove calls to it. - */ -- (void)sendLogsWithServiceName:(NSString *)serviceName - version:(NSString *)version - error:(NSError *)error; - -/** - * Can be used by the unit tests in eack SDK to reset FIRApp. This method is thread unsafe. - */ -+ (void)resetApps; - -/** - * Can be used by the unit tests in each SDK to set customized options. - */ -- (instancetype)initInstanceWithName:(NSString *)name options:(FIROptions *)options; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponent.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponent.h deleted file mode 100644 index cb51ee7..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponent.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@class FIRApp; -@class FIRComponentContainer; - -NS_ASSUME_NONNULL_BEGIN - -/// Provides a system to clean up cached instances returned from the component system. -NS_SWIFT_NAME(ComponentLifecycleMaintainer) -@protocol FIRComponentLifecycleMaintainer -/// The associated app will be deleted, clean up any resources as they are about to be deallocated. -- (void)appWillBeDeleted:(FIRApp *)app; -@end - -typedef _Nullable id (^FIRComponentCreationBlock)(FIRComponentContainer *container, - BOOL *isCacheable) - NS_SWIFT_NAME(ComponentCreationBlock); - -@class FIRDependency; - -/// Describes the timing of instantiation. Note: new components should default to lazy unless there -/// is a strong reason to be eager. -typedef NS_ENUM(NSInteger, FIRInstantiationTiming) { - FIRInstantiationTimingLazy, - FIRInstantiationTimingAlwaysEager, - FIRInstantiationTimingEagerInDefaultApp -} NS_SWIFT_NAME(InstantiationTiming); - -/// A component that can be used from other Firebase SDKs. -NS_SWIFT_NAME(Component) -@interface FIRComponent : NSObject - -/// The protocol describing functionality provided from the Component. -@property(nonatomic, strong, readonly) Protocol *protocol; - -/// The timing of instantiation. -@property(nonatomic, readonly) FIRInstantiationTiming instantiationTiming; - -/// An array of dependencies for the component. -@property(nonatomic, copy, readonly) NSArray<FIRDependency *> *dependencies; - -/// A block to instantiate an instance of the component with the appropriate dependencies. -@property(nonatomic, copy, readonly) FIRComponentCreationBlock creationBlock; - -// There's an issue with long NS_SWIFT_NAMES that causes compilation to fail, disable clang-format -// for the next two methods. -// clang-format off - -/// Creates a component with no dependencies that will be lazily initialized. -+ (instancetype)componentWithProtocol:(Protocol *)protocol - creationBlock:(FIRComponentCreationBlock)creationBlock -NS_SWIFT_NAME(init(_:creationBlock:)); - -/// Creates a component to be registered with the component container. -/// -/// @param protocol - The protocol describing functionality provided by the component. -/// @param instantiationTiming - When the component should be initialized. Use .lazy unless there's -/// a good reason to be instantiated earlier. -/// @param dependencies - Any dependencies the `implementingClass` has, optional or required. -/// @param creationBlock - A block to instantiate the component with a container, and if -/// @return A component that can be registered with the component container. -+ (instancetype)componentWithProtocol:(Protocol *)protocol - instantiationTiming:(FIRInstantiationTiming)instantiationTiming - dependencies:(NSArray<FIRDependency *> *)dependencies - creationBlock:(FIRComponentCreationBlock)creationBlock -NS_SWIFT_NAME(init(_:instantiationTiming:dependencies:creationBlock:)); - -// clang-format on - -/// Unavailable. -- (instancetype)init NS_UNAVAILABLE; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainer.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainer.h deleted file mode 100644 index 8dfab9c..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainer.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#import <Foundation/Foundation.h> - -#import <FirebaseCore/FIRComponentType.h> -#import <FirebaseCore/FIRLibrary.h> - -NS_ASSUME_NONNULL_BEGIN - -/// A type-safe macro to retrieve a component from a container. This should be used to retrieve -/// components instead of using the container directly. -#define FIR_COMPONENT(type, container) \ - [FIRComponentType<id<type>> instanceForProtocol:@protocol(type) inContainer:container] - -@class FIRApp; - -/// A container that holds different components that are registered via the -/// `registerAsComponentRegistrant:` call. These classes should conform to `FIRComponentRegistrant` -/// in order to properly register components for Core. -NS_SWIFT_NAME(FirebaseComponentContainer) -@interface FIRComponentContainer : NSObject - -/// A weak reference to the app that an instance of the container belongs to. -@property(nonatomic, weak, readonly) FIRApp *app; - -/// Unavailable. Use the `container` property on `FIRApp`. -- (instancetype)init NS_UNAVAILABLE; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainerInternal.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainerInternal.h deleted file mode 100644 index bf39bc6..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainerInternal.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#import <Foundation/Foundation.h> - -#import <FirebaseCore/FIRComponent.h> -#import <FirebaseCore/FIRComponentContainer.h> - -@class FIRApp; - -NS_ASSUME_NONNULL_BEGIN - -@interface FIRComponentContainer (Private) - -/// Initializes a container for a given app. This should only be called by the app itself. -- (instancetype)initWithApp:(FIRApp *)app; - -/// Retrieves an instance that conforms to the specified protocol. This will return `nil` if the -/// protocol wasn't registered, or if the instance couldn't be instantiated for the provided app. -- (nullable id)instanceForProtocol:(Protocol *)protocol NS_SWIFT_NAME(instance(for:)); - -/// Instantiates all the components that have registered as "eager" after initialization. -- (void)instantiateEagerComponents; - -/// Remove all of the cached instances stored and allow them to clean up after themselves. -- (void)removeAllCachedInstances; - -/// Removes all the components. After calling this method no new instances will be created. -- (void)removeAllComponents; - -/// Register a class to provide components for the interoperability system. The class should conform -/// to `FIRComponentRegistrant` and provide an array of `FIRComponent` objects. -+ (void)registerAsComponentRegistrant:(Class<FIRLibrary>)klass; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentType.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentType.h deleted file mode 100644 index 6f2aca7..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentType.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@class FIRComponentContainer; - -NS_ASSUME_NONNULL_BEGIN - -/// Do not use directly. A placeholder type in order to provide a macro that will warn users of -/// mis-matched protocols. -NS_SWIFT_NAME(ComponentType) -@interface FIRComponentType<__covariant T> : NSObject - -/// Do not use directly. A factory method to retrieve an instance that provides a specific -/// functionality. -+ (T)instanceForProtocol:(Protocol *)protocol inContainer:(FIRComponentContainer *)container; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRConfigurationInternal.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRConfigurationInternal.h deleted file mode 100644 index 0d1a36f..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRConfigurationInternal.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <FirebaseCore/FIRConfiguration.h> - -@class FIRAnalyticsConfiguration; - -@interface FIRConfiguration () - -/** - * The configuration class for Firebase Analytics. This should be removed once the logic for - * enabling and disabling Analytics is moved to Analytics. - */ -@property(nonatomic, readwrite) FIRAnalyticsConfiguration *analyticsConfiguration; - -@end diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h deleted file mode 100644 index 76c0c05..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@class FIRDiagnosticsData; -@class FIROptions; - -NS_ASSUME_NONNULL_BEGIN - -/** Connects FIRCore with the CoreDiagnostics library. */ -@interface FIRCoreDiagnosticsConnector : NSObject - -/** Logs FirebaseCore related data. - * - * @param options The options object containing data to log. - */ -+ (void)logCoreTelemetryWithOptions:(FIROptions *)options; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDependency.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDependency.h deleted file mode 100644 index 46e9b7e..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDependency.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -/// A dependency on a specific protocol's functionality. -NS_SWIFT_NAME(Dependency) -@interface FIRDependency : NSObject - -/// The protocol describing functionality being depended on. -@property(nonatomic, strong, readonly) Protocol *protocol; - -/// A flag to specify if the dependency is required or not. -@property(nonatomic, readonly) BOOL isRequired; - -/// Initializes a dependency that is required. Calls `initWithProtocol:isRequired` with `YES` for -/// the required parameter. -/// Creates a required dependency on the specified protocol's functionality. -+ (instancetype)dependencyWithProtocol:(Protocol *)protocol; - -/// Creates a dependency on the specified protocol's functionality and specify if it's required for -/// the class's functionality. -+ (instancetype)dependencyWithProtocol:(Protocol *)protocol isRequired:(BOOL)required; - -/// Use `dependencyWithProtocol:isRequired:` instead. -- (instancetype)init NS_UNAVAILABLE; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDiagnosticsData.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDiagnosticsData.h deleted file mode 100644 index ac5ef2c..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDiagnosticsData.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import <FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h> - -NS_ASSUME_NONNULL_BEGIN - -/** Implements the FIRCoreDiagnosticsData protocol to log diagnostics data. */ -@interface FIRDiagnosticsData : NSObject <FIRCoreDiagnosticsData> - -/** Inserts values into the diagnosticObjects dictionary if the value isn't nil. - * - * @param value The value to insert if it's not nil. - * @param key The key to associate it with. - */ -- (void)insertValue:(nullable id)value forKey:(NSString *)key; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRErrorCode.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRErrorCode.h deleted file mode 100644 index f77b3d0..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRErrorCode.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** Error codes in Firebase error domain. */ -typedef NS_ENUM(NSInteger, FIRErrorCode) { - /** - * Unknown error. - */ - FIRErrorCodeUnknown = 0, - /** - * Loading data from the GoogleService-Info.plist file failed. This is a fatal error and should - * not be ignored. Further calls to the API will fail and/or possibly cause crashes. - */ - FIRErrorCodeInvalidPlistFile = -100, - - /** - * Validating the Google App ID format failed. - */ - FIRErrorCodeInvalidAppID = -101, - - /** - * Error code for failing to configure a specific service. - */ - FIRErrorCodeConfigFailed = -114, -}; diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRErrors.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRErrors.h deleted file mode 100644 index 19e4732..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRErrors.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#include "FIRErrorCode.h" - -extern NSString *const kFirebaseErrorDomain; -extern NSString *const kFirebaseConfigErrorDomain; -extern NSString *const kFirebaseCoreErrorDomain; -extern NSString *const kFirebasePerfErrorDomain; diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h deleted file mode 100644 index bfff73e..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -@interface FIRHeartbeatInfo : NSObject - -// Enum representing the different heartbeat codes. -typedef NS_ENUM(NSInteger, FIRHeartbeatInfoCode) { - FIRHeartbeatInfoCodeNone = 0, - FIRHeartbeatInfoCodeSDK = 1, - FIRHeartbeatInfoCodeGlobal = 2, - FIRHeartbeatInfoCodeCombined = 3, -}; - -/** - * Get heartbeat code requred for the sdk. - * @param heartbeatTag String representing the sdk heartbeat tag. - * @return Heartbeat code indicating whether or not an sdk/global heartbeat - * needs to be sent - */ -+ (FIRHeartbeatInfoCode)heartbeatCodeForTag:(NSString *)heartbeatTag; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLibrary.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLibrary.h deleted file mode 100644 index af9d968..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLibrary.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FIRLibrary_h -#define FIRLibrary_h - -#import <Foundation/Foundation.h> - -#import <FirebaseCore/FIRComponent.h> - -@class FIRApp; - -NS_ASSUME_NONNULL_BEGIN - -/// Provide an interface to register a library for userAgent logging and availability to others. -NS_SWIFT_NAME(Library) -@protocol FIRLibrary - -/// Returns one or more FIRComponents that will be registered in -/// FIRApp and participate in dependency resolution and injection. -+ (NSArray<FIRComponent *> *)componentsToRegister; - -@optional -/// Implement this method if the library needs notifications for lifecycle events. This method is -/// called when the developer calls `FirebaseApp.configure()`. -+ (void)configureWithApp:(FIRApp *)app; - -@end - -NS_ASSUME_NONNULL_END - -#endif /* FIRLibrary_h */ diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLogger.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLogger.h deleted file mode 100644 index 548e389..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLogger.h +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import <FirebaseCore/FIRLoggerLevel.h> - -NS_ASSUME_NONNULL_BEGIN - -/** - * The Firebase services used in Firebase logger. - */ -typedef NSString *const FIRLoggerService; - -extern FIRLoggerService kFIRLoggerABTesting; -extern FIRLoggerService kFIRLoggerAdMob; -extern FIRLoggerService kFIRLoggerAnalytics; -extern FIRLoggerService kFIRLoggerAuth; -extern FIRLoggerService kFIRLoggerCrash; -extern FIRLoggerService kFIRLoggerCore; -extern FIRLoggerService kFIRLoggerMLKit; -extern FIRLoggerService kFIRLoggerPerf; -extern FIRLoggerService kFIRLoggerRemoteConfig; - -/** - * The key used to store the logger's error count. - */ -extern NSString *const kFIRLoggerErrorCountKey; - -/** - * The key used to store the logger's warning count. - */ -extern NSString *const kFIRLoggerWarningCountKey; - -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus - -/** - * Enables or disables Analytics debug mode. - * If set to YES, the logging level for Analytics will be set to FIRLoggerLevelDebug. - * Enabling the debug mode has no effect if the app is running from App Store. - * (required) analytics debug mode flag. - */ -void FIRSetAnalyticsDebugMode(BOOL analyticsDebugMode); - -/** - * Changes the default logging level of FIRLoggerLevelNotice to a user-specified level. - * The default level cannot be set above FIRLoggerLevelNotice if the app is running from App Store. - * (required) log level (one of the FIRLoggerLevel enum values). - */ -void FIRSetLoggerLevel(FIRLoggerLevel loggerLevel); - -/** - * Checks if the specified logger level is loggable given the current settings. - * (required) log level (one of the FIRLoggerLevel enum values). - * (required) whether or not this function is called from the Analytics component. - */ -BOOL FIRIsLoggableLevel(FIRLoggerLevel loggerLevel, BOOL analyticsComponent); - -/** - * Logs a message to the Xcode console and the device log. If running from AppStore, will - * not log any messages with a level higher than FIRLoggerLevelNotice to avoid log spamming. - * (required) log level (one of the FIRLoggerLevel enum values). - * (required) service name of type FIRLoggerService. - * (required) message code starting with "I-" which means iOS, followed by a capitalized - * three-character service identifier and a six digit integer message ID that is unique - * within the service. - * An example of the message code is @"I-COR000001". - * (required) message string which can be a format string. - * (optional) variable arguments list obtained from calling va_start, used when message is a format - * string. - */ -extern void FIRLogBasic(FIRLoggerLevel level, - FIRLoggerService service, - NSString *messageCode, - NSString *message, -// On 64-bit simulators, va_list is not a pointer, so cannot be marked nullable -// See: http://stackoverflow.com/q/29095469 -#if __LP64__ && TARGET_OS_SIMULATOR || TARGET_OS_OSX - va_list args_ptr -#else - va_list _Nullable args_ptr -#endif -); - -/** - * The following functions accept the following parameters in order: - * (required) service name of type FIRLoggerService. - * (required) message code starting from "I-" which means iOS, followed by a capitalized - * three-character service identifier and a six digit integer message ID that is unique - * within the service. - * An example of the message code is @"I-COR000001". - * See go/firebase-log-proposal for details. - * (required) message string which can be a format string. - * (optional) the list of arguments to substitute into the format string. - * Example usage: - * FIRLogError(kFIRLoggerCore, @"I-COR000001", @"Configuration of %@ failed.", app.name); - */ -extern void FIRLogError(FIRLoggerService service, NSString *messageCode, NSString *message, ...) - NS_FORMAT_FUNCTION(3, 4); -extern void FIRLogWarning(FIRLoggerService service, NSString *messageCode, NSString *message, ...) - NS_FORMAT_FUNCTION(3, 4); -extern void FIRLogNotice(FIRLoggerService service, NSString *messageCode, NSString *message, ...) - NS_FORMAT_FUNCTION(3, 4); -extern void FIRLogInfo(FIRLoggerService service, NSString *messageCode, NSString *message, ...) - NS_FORMAT_FUNCTION(3, 4); -extern void FIRLogDebug(FIRLoggerService service, NSString *messageCode, NSString *message, ...) - NS_FORMAT_FUNCTION(3, 4); - -#ifdef __cplusplus -} // extern "C" -#endif // __cplusplus - -@interface FIRLoggerWrapper : NSObject - -/** - * Objective-C wrapper for FIRLogBasic to allow weak linking to FIRLogger - * (required) log level (one of the FIRLoggerLevel enum values). - * (required) service name of type FIRLoggerService. - * (required) message code starting with "I-" which means iOS, followed by a capitalized - * three-character service identifier and a six digit integer message ID that is unique - * within the service. - * An example of the message code is @"I-COR000001". - * (required) message string which can be a format string. - * (optional) variable arguments list obtained from calling va_start, used when message is a format - * string. - */ - -+ (void)logWithLevel:(FIRLoggerLevel)level - withService:(FIRLoggerService)service - withCode:(NSString *)messageCode - withMessage:(NSString *)message - withArgs:(va_list)args; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIROptionsInternal.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIROptionsInternal.h deleted file mode 100644 index 0660a3c..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIROptionsInternal.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <FirebaseCore/FIROptions.h> - -/** - * Keys for the strings in the plist file. - */ -extern NSString *const kFIRAPIKey; -extern NSString *const kFIRTrackingID; -extern NSString *const kFIRGoogleAppID; -extern NSString *const kFIRClientID; -extern NSString *const kFIRGCMSenderID; -extern NSString *const kFIRAndroidClientID; -extern NSString *const kFIRDatabaseURL; -extern NSString *const kFIRStorageBucket; -extern NSString *const kFIRBundleID; -extern NSString *const kFIRProjectID; - -/** - * Keys for the plist file name - */ -extern NSString *const kServiceInfoFileName; - -extern NSString *const kServiceInfoFileType; - -/** - * This header file exposes the initialization of FIROptions to internal use. - */ -@interface FIROptions () - -/** - * resetDefaultOptions and initInternalWithOptionsDictionary: are exposed only for unit tests. - */ -+ (void)resetDefaultOptions; - -/** - * Initializes the options with dictionary. The above strings are the keys of the dictionary. - * This is the designated initializer. - */ -- (instancetype)initInternalWithOptionsDictionary:(NSDictionary *)serviceInfoDictionary; - -/** - * defaultOptions and defaultOptionsDictionary are exposed in order to be used in FIRApp and - * other first party services. - */ -+ (FIROptions *)defaultOptions; - -+ (NSDictionary *)defaultOptionsDictionary; - -/** - * Indicates whether or not Analytics collection was explicitly enabled via a plist flag or at - * runtime. - */ -@property(nonatomic, readonly) BOOL isAnalyticsCollectionExplicitlySet; - -/** - * Whether or not Analytics Collection was enabled. Analytics Collection is enabled unless - * explicitly disabled in GoogleService-Info.plist. - */ -@property(nonatomic, readonly) BOOL isAnalyticsCollectionEnabled; - -/** - * Whether or not Analytics Collection was completely disabled. If YES, then - * isAnalyticsCollectionEnabled will be NO. - */ -@property(nonatomic, readonly) BOOL isAnalyticsCollectionDeactivated; - -/** - * The version ID of the client library, e.g. @"1100000". - */ -@property(nonatomic, readonly, copy) NSString *libraryVersionID; - -/** - * The flag indicating whether this object was constructed with the values in the default plist - * file. - */ -@property(nonatomic) BOOL usingOptionsFromDefaultPlist; - -/** - * Whether or not Measurement was enabled. Measurement is enabled unless explicitly disabled in - * GoogleService-Info.plist. - */ -@property(nonatomic, readonly) BOOL isMeasurementEnabled; - -/** - * Whether or not Analytics was enabled in the developer console. - */ -@property(nonatomic, readonly) BOOL isAnalyticsEnabled; - -/** - * Whether or not SignIn was enabled in the developer console. - */ -@property(nonatomic, readonly) BOOL isSignInEnabled; - -/** - * Whether or not editing is locked. This should occur after FIROptions has been set on a FIRApp. - */ -@property(nonatomic, getter=isEditingLocked) BOOL editingLocked; - -@end diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRApp.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRApp.h deleted file mode 100644 index f5578c6..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRApp.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@class FIROptions; - -NS_ASSUME_NONNULL_BEGIN - -/** A block that takes a BOOL and has no return value. */ -typedef void (^FIRAppVoidBoolCallback)(BOOL success) NS_SWIFT_NAME(FirebaseAppVoidBoolCallback); - -/** - * The entry point of Firebase SDKs. - * - * Initialize and configure FIRApp using +[FIRApp configure] - * or other customized ways as shown below. - * - * The logging system has two modes: default mode and debug mode. In default mode, only logs with - * log level Notice, Warning and Error will be sent to device. In debug mode, all logs will be sent - * to device. The log levels that Firebase uses are consistent with the ASL log levels. - * - * Enable debug mode by passing the -FIRDebugEnabled argument to the application. You can add this - * argument in the application's Xcode scheme. When debug mode is enabled via -FIRDebugEnabled, - * further executions of the application will also be in debug mode. In order to return to default - * mode, you must explicitly disable the debug mode with the application argument -FIRDebugDisabled. - * - * It is also possible to change the default logging level in code by calling setLoggerLevel: on - * the FIRConfiguration interface. - */ -NS_SWIFT_NAME(FirebaseApp) -@interface FIRApp : NSObject - -/** - * Configures a default Firebase app. Raises an exception if any configuration step fails. The - * default app is named "__FIRAPP_DEFAULT". This method should be called after the app is launched - * and before using Firebase services. This method should be called from the main thread and - * contains synchronous file I/O (reading GoogleService-Info.plist from disk). - */ -+ (void)configure; - -/** - * Configures the default Firebase app with the provided options. The default app is named - * "__FIRAPP_DEFAULT". Raises an exception if any configuration step fails. This method should be - * called from the main thread. - * - * @param options The Firebase application options used to configure the service. - */ -+ (void)configureWithOptions:(FIROptions *)options NS_SWIFT_NAME(configure(options:)); - -/** - * Configures a Firebase app with the given name and options. Raises an exception if any - * configuration step fails. This method should be called from the main thread. - * - * @param name The application's name given by the developer. The name should should only contain - Letters, Numbers and Underscore. - * @param options The Firebase application options used to configure the services. - */ -// clang-format off -+ (void)configureWithName:(NSString *)name - options:(FIROptions *)options NS_SWIFT_NAME(configure(name:options:)); -// clang-format on - -/** - * Returns the default app, or nil if the default app does not exist. - */ -+ (nullable FIRApp *)defaultApp NS_SWIFT_NAME(app()); - -/** - * Returns a previously created FIRApp instance with the given name, or nil if no such app exists. - * This method is thread safe. - */ -+ (nullable FIRApp *)appNamed:(NSString *)name NS_SWIFT_NAME(app(name:)); - -/** - * Returns the set of all extant FIRApp instances, or nil if there are no FIRApp instances. This - * method is thread safe. - */ -@property(class, readonly, nullable) NSDictionary<NSString *, FIRApp *> *allApps; - -/** - * Cleans up the current FIRApp, freeing associated data and returning its name to the pool for - * future use. This method is thread safe. - */ -- (void)deleteApp:(FIRAppVoidBoolCallback)completion; - -/** - * FIRApp instances should not be initialized directly. Call +[FIRApp configure], - * +[FIRApp configureWithOptions:], or +[FIRApp configureWithNames:options:] directly. - */ -- (instancetype)init NS_UNAVAILABLE; - -/** - * Gets the name of this app. - */ -@property(nonatomic, copy, readonly) NSString *name; - -/** - * Gets a copy of the options for this app. These are non-modifiable. - */ -@property(nonatomic, copy, readonly) FIROptions *options; - -/** - * Gets or sets whether automatic data collection is enabled for all products. Defaults to `YES` - * unless `FirebaseDataCollectionDefaultEnabled` is set to `NO` in your app's Info.plist. This value - * is persisted across runs of the app so that it can be set once when users have consented to - * collection. - */ -@property(nonatomic, readwrite, getter=isDataCollectionDefaultEnabled) - BOOL dataCollectionDefaultEnabled; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRConfiguration.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRConfiguration.h deleted file mode 100644 index 8de3b07..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRConfiguration.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import <FirebaseCore/FIRLoggerLevel.h> - -NS_ASSUME_NONNULL_BEGIN - -/** - * This interface provides global level properties that the developer can tweak. - */ -NS_SWIFT_NAME(FirebaseConfiguration) -@interface FIRConfiguration : NSObject - -/** Returns the shared configuration object. */ -@property(class, nonatomic, readonly) FIRConfiguration *sharedInstance NS_SWIFT_NAME(shared); - -/** - * Sets the logging level for internal Firebase logging. Firebase will only log messages - * that are logged at or below loggerLevel. The messages are logged both to the Xcode - * console and to the device's log. Note that if an app is running from AppStore, it will - * never log above FIRLoggerLevelNotice even if loggerLevel is set to a higher (more verbose) - * setting. - * - * @param loggerLevel The maximum logging level. The default level is set to FIRLoggerLevelNotice. - */ -- (void)setLoggerLevel:(FIRLoggerLevel)loggerLevel; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRLoggerLevel.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRLoggerLevel.h deleted file mode 100644 index dca3aa0..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRLoggerLevel.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// Note that importing GULLoggerLevel.h will lead to a non-modular header -// import error. - -/** - * The log levels used by internal logging. - */ -typedef NS_ENUM(NSInteger, FIRLoggerLevel) { - /** Error level, matches ASL_LEVEL_ERR. */ - FIRLoggerLevelError = 3, - /** Warning level, matches ASL_LEVEL_WARNING. */ - FIRLoggerLevelWarning = 4, - /** Notice level, matches ASL_LEVEL_NOTICE. */ - FIRLoggerLevelNotice = 5, - /** Info level, matches ASL_LEVEL_INFO. */ - FIRLoggerLevelInfo = 6, - /** Debug level, matches ASL_LEVEL_DEBUG. */ - FIRLoggerLevelDebug = 7, - /** Minimum log level. */ - FIRLoggerLevelMin = FIRLoggerLevelError, - /** Maximum log level. */ - FIRLoggerLevelMax = FIRLoggerLevelDebug -} NS_SWIFT_NAME(FirebaseLoggerLevel); diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIROptions.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIROptions.h deleted file mode 100644 index 67fbe5b..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIROptions.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -/** - * This class provides constant fields of Google APIs. - */ -NS_SWIFT_NAME(FirebaseOptions) -@interface FIROptions : NSObject <NSCopying> - -/** - * Returns the default options. The first time this is called it synchronously reads - * GoogleService-Info.plist from disk. - */ -+ (nullable FIROptions *)defaultOptions NS_SWIFT_NAME(defaultOptions()); - -/** - * An iOS API key used for authenticating requests from your app, e.g. - * @"AIzaSyDdVgKwhZl0sTTTLZ7iTmt1r3N2cJLnaDk", used to identify your app to Google servers. - */ -@property(nonatomic, copy, nullable) NSString *APIKey NS_SWIFT_NAME(apiKey); - -/** - * The bundle ID for the application. Defaults to `[[NSBundle mainBundle] bundleID]` when not set - * manually or in a plist. - */ -@property(nonatomic, copy) NSString *bundleID; - -/** - * The OAuth2 client ID for iOS application used to authenticate Google users, for example - * @"12345.apps.googleusercontent.com", used for signing in with Google. - */ -@property(nonatomic, copy, nullable) NSString *clientID; - -/** - * The tracking ID for Google Analytics, e.g. @"UA-12345678-1", used to configure Google Analytics. - */ -@property(nonatomic, copy, nullable) NSString *trackingID; - -/** - * The Project Number from the Google Developer's console, for example @"012345678901", used to - * configure Google Cloud Messaging. - */ -@property(nonatomic, copy) NSString *GCMSenderID NS_SWIFT_NAME(gcmSenderID); - -/** - * The Project ID from the Firebase console, for example @"abc-xyz-123". - */ -@property(nonatomic, copy, nullable) NSString *projectID; - -/** - * The Android client ID used in Google AppInvite when an iOS app has its Android version, for - * example @"12345.apps.googleusercontent.com". - */ -@property(nonatomic, copy, nullable) NSString *androidClientID; - -/** - * The Google App ID that is used to uniquely identify an instance of an app. - */ -@property(nonatomic, copy) NSString *googleAppID; - -/** - * The database root URL, e.g. @"http://abc-xyz-123.firebaseio.com". - */ -@property(nonatomic, copy, nullable) NSString *databaseURL; - -/** - * The URL scheme used to set up Durable Deep Link service. - */ -@property(nonatomic, copy, nullable) NSString *deepLinkURLScheme; - -/** - * The Google Cloud Storage bucket name, e.g. @"abc-xyz-123.storage.firebase.com". - */ -@property(nonatomic, copy, nullable) NSString *storageBucket; - -/** - * The App Group identifier to share data between the application and the application extensions. - * The App Group must be configured in the application and on the Apple Developer Portal. Default - * value `nil`. - */ -@property(nonatomic, copy, nullable) NSString *appGroupID; - -/** - * Initializes a customized instance of FIROptions from the file at the given plist file path. This - * will read the file synchronously from disk. - * For example, - * NSString *filePath = - * [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"]; - * FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath]; - * Returns nil if the plist file does not exist or is invalid. - */ -- (nullable instancetype)initWithContentsOfFile:(NSString *)plistPath; - -/** - * Initializes a customized instance of FIROptions with required fields. Use the mutable properties - * to modify fields for configuring specific services. - */ -// clang-format off -- (instancetype)initWithGoogleAppID:(NSString *)googleAppID - GCMSenderID:(NSString *)GCMSenderID - NS_SWIFT_NAME(init(googleAppID:gcmSenderID:)); -// clang-format on - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore.h b/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore.h deleted file mode 100644 index 95119ae..0000000 --- a/assign5/openTok/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRApp.h" -#import "FIRConfiguration.h" -#import "FIRLoggerLevel.h" -#import "FIROptions.h" diff --git a/assign5/openTok/Pods/FirebaseCore/LICENSE b/assign5/openTok/Pods/FirebaseCore/LICENSE deleted file mode 100644 index d645695..0000000 --- a/assign5/openTok/Pods/FirebaseCore/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/assign5/openTok/Pods/FirebaseCore/README.md b/assign5/openTok/Pods/FirebaseCore/README.md deleted file mode 100644 index b04a270..0000000 --- a/assign5/openTok/Pods/FirebaseCore/README.md +++ /dev/null @@ -1,282 +0,0 @@ -# Firebase iOS Open Source Development - [![Actions Status][gh-auth-badge]][gh-actions] - [![Actions Status][gh-core-badge]][gh-actions] - [![Actions Status][gh-datatransport-badge]][gh-actions] - [![Actions Status][gh-dynamiclinks-badge]][gh-actions] - [![Actions Status][gh-firebasepod-badge]][gh-actions] - [![Actions Status][gh-firestore-badge]][gh-actions] - [![Actions Status][gh-interop-badge]][gh-actions] - [![Actions Status][gh-messaging-badge]][gh-actions] - [![Actions Status][gh-storage-badge]][gh-actions] - [![Actions Status][gh-symbolcollision-badge]][gh-actions] - [![Actions Status][gh-zip-badge]][gh-actions] - [](https://travis-ci.org/firebase/firebase-ios-sdk) - -This repository contains all Firebase iOS SDK source except FirebaseAnalytics, -FirebasePerformance, and FirebaseML. - -The repository also includes GoogleUtilities source. The -[GoogleUtilities](GoogleUtilities/README.md) pod is -a set of utilities used by Firebase and other Google products. - -Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -## Installation - -See the three subsections for details about three different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) - -### Standard pod install - -Go to -[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). - -### Installing from GitHub - -For releases starting with 5.0.0, the source for each release is also deployed -to CocoaPods master and available via standard -[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). - -These instructions can be used to access the Firebase repo at other branches, -tags, or commits. - -#### Background - -See -[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) -for instructions and options about overriding pod source locations. - -#### Accessing Firebase Source Snapshots - -All of the official releases are tagged in this repo and available via CocoaPods. To access a local -source snapshot or unreleased branch, use Podfile directives like the following: - -To access FirebaseFirestore via a branch: -``` -pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -``` - -To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: - -``` -pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' -pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' -``` - -### Carthage (iOS only) - -Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). - -### Rome - -Instructions for installing binary frameworks via -[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). - -### Using Firebase from a Framework or a library - -[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md) - -## Development - -To develop Firebase software in this repository, ensure that you have at least -the following software: - - * Xcode 10.1 (or later) - * CocoaPods 1.7.2 (or later) - * [CocoaPods generate](https://github.com/square/cocoapods-generate) - -For the pod that you want to develop: - -`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios` - -Note: If the CocoaPods cache is out of date, you may need to run -`pod repo update` before the `pod gen` command. - -Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for -those platforms. Since 10.2, Xcode does not properly handle multi-platform -CocoaPods workspaces. - -Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). - -### Development for Catalyst -* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` -* Check the Mac box in the App-iOS Build Settings -* Sign the App in the Settings Signing & Capabilities tab -* Click Pods in the Project Manager -* Add Signing to the iOS host app and unit test targets -* Select the Unit-unit scheme -* Run it to build and test - -### Adding a New Firebase Pod - -See [AddNewPod.md](AddNewPod.md). - -### Code Formatting - -To ensure that the code is formatted consistently, run the script -[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) -before creating a PR. - -Travis will verify that any code changes are done in a style compliant way. Install -`clang-format` and `swiftformat`. -These commands will get the right versions: - -``` -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c6f1cbd/Formula/clang-format.rb -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c13eda8/Formula/swiftformat.rb -``` - -Note: if you already have a newer version of these installed you may need to -`brew switch` to this version. - -To update this section, find the versions of clang-format and swiftformat.rb to -match the versions in the CI failure logs -[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). - -### Running Unit Tests - -Select a scheme and press Command-u to build a component and run its unit tests. - -#### Viewing Code Coverage (Deprecated) - -First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. - -After running the `AllUnitTests_iOS` scheme in Xcode, execute -`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` -at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. - -### Running Sample Apps -In order to run the sample apps and integration tests, you'll need valid -`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist -files without real values, but can be replaced with real plist files. To get your own -`GoogleService-Info.plist` files: - -1. Go to the [Firebase Console](https://console.firebase.google.com/) -2. Create a new Firebase project, if you don't already have one -3. For each sample app you want to test, create a new Firebase app with the sample app's bundle -identifier (e.g. `com.google.Database-Example`) -4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file -(e.g. in [Example/Database/App/](Example/Database/App/)); - -Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require -special Apple capabilities, and you will have to change the sample app to use a unique bundle -identifier that you can control in your own Apple Developer account. - -## Specific Component Instructions -See the sections below for any special instructions for those components. - -### Firebase Auth - -If you're doing specific Firebase Auth development, see -[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about -building and running the FirebaseAuth pod along with various samples and tests. - -### Firebase Database - -To run the Database Integration tests, make your database authentication rules -[public](https://firebase.google.com/docs/database/security/quickstart). - -### Firebase Storage - -To run the Storage Integration tests, follow the instructions in -[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m). - -#### Push Notifications - -Push notifications can only be delivered to specially provisioned App IDs in the developer portal. -In order to actually test receiving push notifications, you will need to: - -1. Change the bundle identifier of the sample app to something you own in your Apple Developer -account, and enable that App ID for push notifications. -2. You'll also need to -[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) -at **Project Settings > Cloud Messaging > [Your Firebase App]**. -3. Ensure your iOS device is added to your Apple Developer portal as a test device. - -#### iOS Simulator - -The iOS Simulator cannot register for remote notifications, and will not receive push notifications. -In order to receive push notifications, you'll have to follow the steps above and run the app on a -physical device. - -## Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -### tvOS, macOS, watchOS and Catalyst -Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on -tvOS, macOS, watchOS and Catalyst. - -For tvOS, checkout the [Sample](Example/tvOSSample). -For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the -[Independent Watch App Sample](Example/watchOSSample). - -Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this -repository is actively developed primarily for iOS. While we can catch basic unit test issues with -Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you -encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). - -During app setup in the console, you may get to a step that mentions something like "Checking if the app -has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst. -**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected. - -To install, add a subset of the following to the Podfile: - -``` -pod 'Firebase/ABTesting' # No watchOS support yet -pod 'Firebase/Auth' # No watchOS support yet -pod 'Firebase/Crashlytics' # No watchOS support yet -pod 'Firebase/Database' # No watchOS support yet -pod 'Firebase/Firestore' # No watchOS support yet -pod 'Firebase/Functions' # No watchOS support yet -pod 'Firebase/Messaging' -pod 'Firebase/RemoteConfig' # No watchOS support yet -pod 'Firebase/Storage' -``` - -#### Additional Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - -## Roadmap - -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source -plans and directions. - -## Contributing - -See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. - -## License - -The contents of this repository is licensed under the -[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). - -Your use of Firebase is governed by the -[Terms of Service for Firebase Services](https://firebase.google.com/terms/). - -[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions -[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg -[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg -[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg -[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg -[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg -[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg -[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg -[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg -[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg -[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg -[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg diff --git a/assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m b/assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m deleted file mode 100644 index 87d57c4..0000000 --- a/assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m +++ /dev/null @@ -1,647 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <objc/runtime.h> -#include <sys/utsname.h> - -#import <GoogleDataTransport/GDTCORConsoleLogger.h> -#import <GoogleDataTransport/GDTCOREvent.h> -#import <GoogleDataTransport/GDTCORTargets.h> -#import <GoogleDataTransport/GDTCORTransport.h> - -#import <GoogleUtilities/GULAppEnvironmentUtil.h> -#import <GoogleUtilities/GULHeartbeatDateStorage.h> -#import <GoogleUtilities/GULLogger.h> - -#import <FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h> -#import <FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h> - -#import <nanopb/pb.h> -#import <nanopb/pb_decode.h> -#import <nanopb/pb_encode.h> - -#import "FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h" - -/** The logger service string to use when printing to the console. */ -static GULLoggerService kFIRCoreDiagnostics = @"[FirebaseCoreDiagnostics/FIRCoreDiagnostics]"; - -#ifdef FIREBASE_BUILD_ZIP_FILE -static BOOL kUsingZipFile = YES; -#else // FIREBASE_BUILD_ZIP_FILE -static BOOL kUsingZipFile = NO; -#endif // FIREBASE_BUILD_ZIP_FILE - -#ifdef FIREBASE_BUILD_CARTHAGE -#define kDeploymentType logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_CARTHAGE -#elif FIREBASE_BUILD_ZIP_FILE -#define kDeploymentType logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_ZIP_FILE -#else -#define kDeploymentType logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_COCOAPODS -#endif - -static NSString *const kFIRServiceMLVisionOnDeviceAutoML = @"MLVisionOnDeviceAutoML"; -static NSString *const kFIRServiceMLVisionOnDeviceFace = @"MLVisionOnDeviceFace"; -static NSString *const kFIRServiceMLVisionOnDeviceBarcode = @"MLVisionOnDeviceBarcode"; -static NSString *const kFIRServiceMLVisionOnDeviceText = @"MLVisionOnDeviceText"; -static NSString *const kFIRServiceMLVisionOnDeviceLabel = @"MLVisionOnDeviceLabel"; -static NSString *const kFIRServiceMLVisionOnDeviceObjectDetection = - @"MLVisionOnDeviceObjectDetection"; -static NSString *const kFIRServiceMLModelInterpreter = @"MLModelInterpreter"; - -static NSString *const kFIRServiceAdMob = @"AdMob"; -static NSString *const kFIRServiceAuth = @"Auth"; -static NSString *const kFIRServiceAuthUI = @"AuthUI"; -static NSString *const kFIRServiceCrash = @"Crash"; -static NSString *const kFIRServiceDatabase = @"Database"; -static NSString *const kFIRServiceDynamicLinks = @"DynamicLinks"; -static NSString *const kFIRServiceFirestore = @"Firestore"; -static NSString *const kFIRServiceFunctions = @"Functions"; -static NSString *const kFIRServiceIAM = @"InAppMessaging"; -static NSString *const kFIRServiceInstanceID = @"InstanceID"; -static NSString *const kFIRServiceInvites = @"Invites"; -static NSString *const kFIRServiceMessaging = @"Messaging"; -static NSString *const kFIRServiceMeasurement = @"Measurement"; -static NSString *const kFIRServicePerformance = @"Performance"; -static NSString *const kFIRServiceRemoteConfig = @"RemoteConfig"; -static NSString *const kFIRServiceStorage = @"Storage"; -static NSString *const kGGLServiceAnalytics = @"Analytics"; -static NSString *const kGGLServiceSignIn = @"SignIn"; -static NSString *const kFIRAppDiagnosticsConfigurationTypeKey = - @"FIRAppDiagnosticsConfigurationTypeKey"; -static NSString *const kFIRAppDiagnosticsFIRAppKey = @"FIRAppDiagnosticsFIRAppKey"; -static NSString *const kFIRAppDiagnosticsSDKNameKey = @"FIRAppDiagnosticsSDKNameKey"; -static NSString *const kFIRAppDiagnosticsSDKVersionKey = @"FIRAppDiagnosticsSDKVersionKey"; -static NSString *const kFIRCoreDiagnosticsHeartbeatTag = @"FIRCoreDiagnostics"; - -/** - * The file name to the recent heartbeat date. - */ -NSString *const kFIRCoreDiagnosticsHeartbeatDateFileName = @"FIREBASE_DIAGNOSTICS_HEARTBEAT_DATE"; - -/** - * @note This should implement the GDTCOREventDataObject protocol, but can't because of - * weak-linking. - */ -@interface FIRCoreDiagnosticsLog : NSObject - -/** The config that will be converted to proto bytes. */ -@property(nonatomic) logs_proto_mobilesdk_ios_ICoreConfiguration config; - -@end - -@implementation FIRCoreDiagnosticsLog - -- (instancetype)initWithConfig:(logs_proto_mobilesdk_ios_ICoreConfiguration)config { - self = [super init]; - if (self) { - _config = config; - } - return self; -} - -// Provided and required by the GDTCOREventDataObject protocol. -- (NSData *)transportBytes { - pb_ostream_t sizestream = PB_OSTREAM_SIZING; - - // Encode 1 time to determine the size. - if (!pb_encode(&sizestream, logs_proto_mobilesdk_ios_ICoreConfiguration_fields, &_config)) { - GDTCORLogError(GDTCORMCETransportBytesError, @"Error in nanopb encoding for size: %s", - PB_GET_ERROR(&sizestream)); - } - - // Encode a 2nd time to actually get the bytes from it. - size_t bufferSize = sizestream.bytes_written; - CFMutableDataRef dataRef = CFDataCreateMutable(CFAllocatorGetDefault(), bufferSize); - CFDataSetLength(dataRef, bufferSize); - pb_ostream_t ostream = pb_ostream_from_buffer((void *)CFDataGetBytePtr(dataRef), bufferSize); - if (!pb_encode(&ostream, logs_proto_mobilesdk_ios_ICoreConfiguration_fields, &_config)) { - GDTCORLogError(GDTCORMCETransportBytesError, @"Error in nanopb encoding for bytes: %s", - PB_GET_ERROR(&ostream)); - } - CFDataSetLength(dataRef, ostream.bytes_written); - - return CFBridgingRelease(dataRef); -} - -- (void)dealloc { - pb_release(logs_proto_mobilesdk_ios_ICoreConfiguration_fields, &_config); -} - -@end - -NS_ASSUME_NONNULL_BEGIN - -/** This class produces a protobuf containing diagnostics and usage data to be logged. */ -@interface FIRCoreDiagnostics : NSObject <FIRCoreDiagnosticsInterop> - -/** The queue on which all diagnostics collection will occur. */ -@property(nonatomic, readonly) dispatch_queue_t diagnosticsQueue; - -/** The transport object used to send data. */ -@property(nonatomic, readonly) GDTCORTransport *transport; - -/** The storage to store the date of the last sent heartbeat. */ -@property(nonatomic, readonly) GULHeartbeatDateStorage *heartbeatDateStorage; - -@end - -NS_ASSUME_NONNULL_END - -@implementation FIRCoreDiagnostics - -+ (instancetype)sharedInstance { - static FIRCoreDiagnostics *sharedInstance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[FIRCoreDiagnostics alloc] init]; - }); - return sharedInstance; -} - -- (instancetype)init { - GDTCORTransport *transport = [[GDTCORTransport alloc] initWithMappingID:@"137" - transformers:nil - target:kGDTCORTargetFLL]; - - GULHeartbeatDateStorage *dateStorage = - [[GULHeartbeatDateStorage alloc] initWithFileName:kFIRCoreDiagnosticsHeartbeatDateFileName]; - - return [self initWithTransport:transport heartbeatDateStorage:dateStorage]; -} - -/** Initializer for unit tests. - * - * @param transport A `GDTCORTransport` instance which that be used to send event. - * @param heartbeatDateStorage An instanse of date storage to track heartbeat sending. - * @return Returns the initialized `FIRCoreDiagnostics` instance. - */ -- (instancetype)initWithTransport:(GDTCORTransport *)transport - heartbeatDateStorage:(GULHeartbeatDateStorage *)heartbeatDateStorage { - self = [super init]; - if (self) { - _diagnosticsQueue = - dispatch_queue_create("com.google.FIRCoreDiagnostics", DISPATCH_QUEUE_SERIAL); - _transport = transport; - _heartbeatDateStorage = heartbeatDateStorage; - } - return self; -} - -#pragma mark - Metadata helpers - -/** Returns the model of iOS device. Sample platform strings are @"iPhone7,1" for iPhone 6 Plus, - * @"iPhone7,2" for iPhone 6, etc. Refer to the Hardware strings at - * https://en.wikipedia.org/wiki/List_of_iOS_devices - * - * @return The device model as an NSString. - */ -+ (NSString *)deviceModel { - static NSString *deviceModel = nil; - if (deviceModel == nil) { - struct utsname systemInfo; - uname(&systemInfo); - deviceModel = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; - } - return deviceModel; -} - -#pragma mark - nanopb helper functions - -/** Callocs a pb_bytes_array and copies the given NSString's bytes into the bytes array. - * - * @note Memory needs to be free manually, through pb_free or pb_release. - * @param string The string to encode as pb_bytes. - */ -pb_bytes_array_t *FIREncodeString(NSString *string) { - NSData *stringBytes = [string dataUsingEncoding:NSUTF8StringEncoding]; - return FIREncodeData(stringBytes); -} - -/** Callocs a pb_bytes_array and copies the given NSData bytes into the bytes array. - * - * @note Memory needs to be free manually, through pb_free or pb_release. - * @param data The data to copy into the new bytes array. - */ -pb_bytes_array_t *FIREncodeData(NSData *data) { - pb_bytes_array_t *pbBytesArray = calloc(1, PB_BYTES_ARRAY_T_ALLOCSIZE(data.length)); - if (pbBytesArray != NULL) { - [data getBytes:pbBytesArray->bytes length:data.length]; - pbBytesArray->size = (pb_size_t)data.length; - } - return pbBytesArray; -} - -/** Maps a service string to the representative nanopb enum. - * - * @param serviceString The SDK service string to convert. - * @return The representative nanopb enum. - */ -logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType FIRMapFromServiceStringToTypeEnum( - NSString *serviceString) { - static NSDictionary<NSString *, NSNumber *> *serviceStringToTypeEnum; - if (serviceStringToTypeEnum == nil) { - serviceStringToTypeEnum = @{ - kFIRServiceAdMob : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ADMOB), - kFIRServiceMessaging : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MESSAGING), - kFIRServiceMeasurement : - @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MEASUREMENT), - kFIRServiceRemoteConfig : - @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_REMOTE_CONFIG), - kFIRServiceDatabase : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DATABASE), - kFIRServiceDynamicLinks : - @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DYNAMIC_LINKS), - kFIRServiceAuth : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_AUTH), - kFIRServiceAuthUI : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_AUTH_UI), - kFIRServiceFirestore : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_FIRESTORE), - kFIRServiceFunctions : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_FUNCTIONS), - kFIRServicePerformance : - @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_PERFORMANCE), - kFIRServiceStorage : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_STORAGE), - kFIRServiceMLVisionOnDeviceAutoML : - @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_AUTOML), - kFIRServiceMLVisionOnDeviceFace : - @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_FACE), - kFIRServiceMLVisionOnDeviceBarcode : - @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_BARCODE), - kFIRServiceMLVisionOnDeviceText : - @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_TEXT), - kFIRServiceMLVisionOnDeviceLabel : - @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_LABEL), - kFIRServiceMLVisionOnDeviceObjectDetection : @( - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_OBJECT_DETECTION), - kFIRServiceMLModelInterpreter : - @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_MODEL_INTERPRETER), - kGGLServiceAnalytics : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ANALYTICS), - kGGLServiceSignIn : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_SIGN_IN), - kFIRServiceIAM : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_IN_APP_MESSAGING), - }; - } - if (serviceStringToTypeEnum[serviceString] != nil) { - return (int32_t)serviceStringToTypeEnum[serviceString].longLongValue; - } - return logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_UNKNOWN_SDK_SERVICE; -} - -#pragma mark - Proto population functions - -/** Populates the given proto with data related to an SDK logDiagnostics call from the - * diagnosticObjects dictionary. - * - * @param config The proto to populate - * @param diagnosticObjects The dictionary of diagnostics objects. - */ -void FIRPopulateProtoWithInfoFromUserInfoParams(logs_proto_mobilesdk_ios_ICoreConfiguration *config, - NSDictionary<NSString *, id> *diagnosticObjects) { - NSNumber *configurationType = diagnosticObjects[kFIRCDConfigurationTypeKey]; - if (configurationType != nil) { - switch (configurationType.integerValue) { - case logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_CORE: - config->configuration_type = - logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_CORE; - config->has_configuration_type = 1; - break; - case logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK: - config->configuration_type = - logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK; - config->has_configuration_type = 1; - break; - default: - break; - } - } - - NSString *sdkName = diagnosticObjects[kFIRCDSdkNameKey]; - if (sdkName) { - config->sdk_name = FIRMapFromServiceStringToTypeEnum(sdkName); - config->has_sdk_name = 1; - } - - NSString *version = diagnosticObjects[kFIRCDSdkVersionKey]; - if (version) { - config->sdk_version = FIREncodeString(version); - } -} - -/** Populates the given proto with data from the calling FIRApp using the given - * diagnosticObjects dictionary. - * - * @param config The proto to populate - * @param diagnosticObjects The dictionary of diagnostics objects. - */ -void FIRPopulateProtoWithCommonInfoFromApp(logs_proto_mobilesdk_ios_ICoreConfiguration *config, - NSDictionary<NSString *, id> *diagnosticObjects) { - config->pod_name = logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_FIREBASE; - config->has_pod_name = 1; - - if (!diagnosticObjects[kFIRCDllAppsCountKey]) { - GDTCORLogError(GDTCORMCEGeneralError, @"%@", - @"App count is a required value in the data dict."); - } - config->app_count = (int32_t)[diagnosticObjects[kFIRCDllAppsCountKey] integerValue]; - config->has_app_count = 1; - - NSString *googleAppID = diagnosticObjects[kFIRCDGoogleAppIDKey]; - if (googleAppID.length) { - config->app_id = FIREncodeString(googleAppID); - } - - NSString *bundleID = diagnosticObjects[kFIRCDBundleIDKey]; - if (bundleID.length) { - config->bundle_id = FIREncodeString(bundleID); - } - - NSString *firebaseUserAgent = diagnosticObjects[kFIRCDFirebaseUserAgentKey]; - if (firebaseUserAgent.length) { - config->platform_info = FIREncodeString(firebaseUserAgent); - } - - NSNumber *usingOptionsFromDefaultPlist = diagnosticObjects[kFIRCDUsingOptionsFromDefaultPlistKey]; - if (usingOptionsFromDefaultPlist != nil) { - config->use_default_app = [usingOptionsFromDefaultPlist boolValue]; - config->has_use_default_app = 1; - } - - NSString *libraryVersionID = diagnosticObjects[kFIRCDLibraryVersionIDKey]; - if (libraryVersionID) { - config->icore_version = FIREncodeString(libraryVersionID); - } - - NSString *deviceModel = [FIRCoreDiagnostics deviceModel]; - if (deviceModel.length) { - config->device_model = FIREncodeString(deviceModel); - } - - NSString *osVersion = [GULAppEnvironmentUtil systemVersion]; - if (osVersion.length) { - config->os_version = FIREncodeString(osVersion); - } - - config->using_zip_file = kUsingZipFile; - config->has_using_zip_file = 1; - config->deployment_type = kDeploymentType; - config->has_deployment_type = 1; - config->deployed_in_app_store = [GULAppEnvironmentUtil isFromAppStore]; - config->has_deployed_in_app_store = 1; -} - -/** Populates the given proto with installed services data. - * - * @param config The proto to populate - */ -void FIRPopulateProtoWithInstalledServices(logs_proto_mobilesdk_ios_ICoreConfiguration *config) { - NSMutableArray<NSNumber *> *sdkServiceInstalledArray = [NSMutableArray array]; - - // AdMob - if (NSClassFromString(@"GADBannerView") != nil) { - [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceAdMob))]; - } - // CloudMessaging - if (NSClassFromString(@"FIRMessaging") != nil) { - [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMessaging))]; - } - // RemoteConfig - if (NSClassFromString(@"FIRRemoteConfig") != nil) { - [sdkServiceInstalledArray - addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceRemoteConfig))]; - } - // Measurement/Analtyics - if (NSClassFromString(@"FIRAnalytics") != nil) { - [sdkServiceInstalledArray - addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMeasurement))]; - } - // ML Vision On Device AutoML. - if (NSClassFromString(@"FIRVisionOnDeviceAutoMLImageLabelerOptions") != nil) { - [sdkServiceInstalledArray - addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceAutoML))]; - } - // ML Vision On Device Face. - if (NSClassFromString(@"FIRVisionFaceDetector") != nil && - NSClassFromString(@"GMVFaceDetector") != nil) { - [sdkServiceInstalledArray - addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceFace))]; - } - // ML Vision On Device Barcode. - if (NSClassFromString(@"FIRVisionBarcodeDetector") != nil && - NSClassFromString(@"GMVBarcodeDetector") != nil) { - [sdkServiceInstalledArray - addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceBarcode))]; - } - // ML Vision On Device Text. - if (NSClassFromString(@"FIRVisionTextDetector") != nil && - NSClassFromString(@"GMVTextDetector") != nil) { - [sdkServiceInstalledArray - addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceText))]; - } - // ML Vision On Device Image Label. - if (NSClassFromString(@"FIRVisionLabelDetector") != nil && - NSClassFromString(@"GMVLabelDetector") != nil) { - [sdkServiceInstalledArray - addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceLabel))]; - } - // ML Vision On Device Object. - if (NSClassFromString(@"FIRVisionObjectDetector") != nil) { - [sdkServiceInstalledArray - addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceObjectDetection))]; - } - // ML Model Interpreter - if (NSClassFromString(@"FIRCustomModelInterpreter") != nil) { - [sdkServiceInstalledArray - addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLModelInterpreter))]; - } - // Database - if (NSClassFromString(@"FIRDatabase") != nil) { - [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceDatabase))]; - } - // DynamicDeepLink - if (NSClassFromString(@"FIRDynamicLinks") != nil) { - [sdkServiceInstalledArray - addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceDynamicLinks))]; - } - // Auth - if (NSClassFromString(@"FIRAuth") != nil) { - [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceAuth))]; - } - // AuthUI - if (NSClassFromString(@"FUIAuth") != nil) { - [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceAuthUI))]; - } - // Firestore - if (NSClassFromString(@"FIRFirestore") != nil) { - [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceFirestore))]; - } - // Functions - if (NSClassFromString(@"FIRFunctions") != nil) { - [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceFunctions))]; - } - // Performance - if (NSClassFromString(@"FIRPerformance") != nil) { - [sdkServiceInstalledArray - addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServicePerformance))]; - } - // Storage - if (NSClassFromString(@"FIRStorage") != nil) { - [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceStorage))]; - } - // SignIn via Google pod - if (NSClassFromString(@"GIDSignIn") != nil && NSClassFromString(@"GGLContext") != nil) { - [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kGGLServiceSignIn))]; - } - // Analytics via Google pod - if (NSClassFromString(@"GAI") != nil && NSClassFromString(@"GGLContext") != nil) { - [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kGGLServiceAnalytics))]; - } - - // In-App Messaging - if (NSClassFromString(@"FIRInAppMessaging") != nil) { - [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceIAM))]; - } - - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType *servicesInstalled = - calloc(sdkServiceInstalledArray.count, - sizeof(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType)); - if (servicesInstalled == NULL) { - return; - } - for (NSUInteger i = 0; i < sdkServiceInstalledArray.count; i++) { - NSNumber *typeEnum = sdkServiceInstalledArray[i]; - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType serviceType = - (int32_t)typeEnum.integerValue; - servicesInstalled[i] = serviceType; - } - - config->sdk_service_installed = servicesInstalled; - config->sdk_service_installed_count = (int32_t)sdkServiceInstalledArray.count; -} - -/** Populates the proto with the number of linked frameworks. - * - * @param config The proto to populate. - */ -void FIRPopulateProtoWithNumberOfLinkedFrameworks( - logs_proto_mobilesdk_ios_ICoreConfiguration *config) { - int numFrameworks = -1; // Subtract the app binary itself. - unsigned int numImages; - const char **imageNames = objc_copyImageNames(&numImages); - for (unsigned int i = 0; i < numImages; i++) { - NSString *imageName = [NSString stringWithUTF8String:imageNames[i]]; - if ([imageName rangeOfString:@"System/Library"].length != 0 // Apple .frameworks - || [imageName rangeOfString:@"Developer/Library"].length != 0 // Xcode debug .frameworks - || [imageName rangeOfString:@"usr/lib"].length != 0) { // Public .dylibs - continue; - } - numFrameworks++; - } - free(imageNames); - config->dynamic_framework_count = numFrameworks; - config->has_dynamic_framework_count = 1; -} - -/** Populates the proto with Info.plist values. - * - * @param config The proto to populate. - */ -void FIRPopulateProtoWithInfoPlistValues(logs_proto_mobilesdk_ios_ICoreConfiguration *config) { - NSDictionary<NSString *, id> *info = [[NSBundle mainBundle] infoDictionary]; - - NSString *xcodeVersion = info[@"DTXcodeBuild"] ?: @""; - NSString *sdkVersion = info[@"DTSDKBuild"] ?: @""; - NSString *combinedVersions = [NSString stringWithFormat:@"%@-%@", xcodeVersion, sdkVersion]; - config->apple_framework_version = FIREncodeString(combinedVersions); - - NSString *minVersion = info[@"MinimumOSVersion"]; - if (minVersion) { - config->min_supported_ios_version = FIREncodeString(minVersion); - } - - // Apps can turn off swizzling in the Info.plist, check if they've explicitly set the value and - // report it. It's enabled by default. - NSNumber *appDelegateSwizzledNum = info[@"FirebaseAppDelegateProxyEnabled"]; - BOOL appDelegateSwizzled = YES; - if ([appDelegateSwizzledNum isKindOfClass:[NSNumber class]]) { - appDelegateSwizzled = [appDelegateSwizzledNum boolValue]; - } - config->swizzling_enabled = appDelegateSwizzled; - config->has_swizzling_enabled = 1; -} - -#pragma mark - FIRCoreDiagnosticsInterop - -+ (void)sendDiagnosticsData:(nonnull id<FIRCoreDiagnosticsData>)diagnosticsData { - FIRCoreDiagnostics *diagnostics = [FIRCoreDiagnostics sharedInstance]; - [diagnostics sendDiagnosticsData:diagnosticsData]; -} - -- (void)sendDiagnosticsData:(nonnull id<FIRCoreDiagnosticsData>)diagnosticsData { - dispatch_async(self.diagnosticsQueue, ^{ - NSDictionary<NSString *, id> *diagnosticObjects = diagnosticsData.diagnosticObjects; - NSNumber *isDataCollectionDefaultEnabled = - diagnosticObjects[kFIRCDIsDataCollectionDefaultEnabledKey]; - if (isDataCollectionDefaultEnabled && ![isDataCollectionDefaultEnabled boolValue]) { - return; - } - - // Create the proto. - logs_proto_mobilesdk_ios_ICoreConfiguration icore_config = - logs_proto_mobilesdk_ios_ICoreConfiguration_init_default; - - icore_config.using_gdt = 1; - icore_config.has_using_gdt = 1; - - // Populate the proto with information. - FIRPopulateProtoWithInfoFromUserInfoParams(&icore_config, diagnosticObjects); - FIRPopulateProtoWithCommonInfoFromApp(&icore_config, diagnosticObjects); - FIRPopulateProtoWithInstalledServices(&icore_config); - FIRPopulateProtoWithNumberOfLinkedFrameworks(&icore_config); - FIRPopulateProtoWithInfoPlistValues(&icore_config); - [self setHeartbeatFlagIfNeededToConfig:&icore_config]; - - // This log object is capable of converting the proto to bytes. - FIRCoreDiagnosticsLog *log = [[FIRCoreDiagnosticsLog alloc] initWithConfig:icore_config]; - - // Send the log as a telemetry event. - GDTCOREvent *event = [self.transport eventForTransport]; - event.dataObject = (id<GDTCOREventDataObject>)log; - [self.transport sendTelemetryEvent:event]; - }); -} - -#pragma mark - Heartbeat - -- (void)setHeartbeatFlagIfNeededToConfig:(logs_proto_mobilesdk_ios_ICoreConfiguration *)config { - // Check if need to send a heartbeat. - NSDate *currentDate = [NSDate date]; - NSDate *lastCheckin = - [self.heartbeatDateStorage heartbeatDateForTag:kFIRCoreDiagnosticsHeartbeatTag]; - if (lastCheckin) { - // Ensure the previous checkin was on a different date in the past. - if ([self isDate:currentDate inSameDayOrBeforeThan:lastCheckin]) { - return; - } - } - - // Update heartbeat sent date. - [self.heartbeatDateStorage setHearbeatDate:currentDate forTag:kFIRCoreDiagnosticsHeartbeatTag]; - // Set the flag. - config->sdk_name = logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ICORE; - config->has_sdk_name = 1; -} - -- (BOOL)isDate:(NSDate *)date1 inSameDayOrBeforeThan:(NSDate *)date2 { - return [[NSCalendar currentCalendar] isDate:date1 inSameDayAsDate:date2] || - [date1 compare:date2] == NSOrderedAscending; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c b/assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c deleted file mode 100644 index 4b2ac2f..0000000 --- a/assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.3.9.3 */ - -#include "firebasecore.nanopb.h" - -/* @@protoc_insertion_point(includes) */ -#if PB_PROTO_HEADER_VERSION != 30 -#error Regenerate this file with the current version of nanopb generator. -#endif - - - -const pb_field_t logs_proto_mobilesdk_ios_ICoreConfiguration_fields[22] = { - PB_FIELD( 1, UENUM , OPTIONAL, STATIC , FIRST, logs_proto_mobilesdk_ios_ICoreConfiguration, configuration_type, configuration_type, 0), - PB_FIELD( 7, UENUM , REPEATED, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, sdk_service_installed, configuration_type, 0), - PB_FIELD( 9, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, device_model, sdk_service_installed, 0), - PB_FIELD( 10, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, app_id, device_model, 0), - PB_FIELD( 12, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, bundle_id, app_id, 0), - PB_FIELD( 16, UENUM , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, pod_name, bundle_id, 0), - PB_FIELD( 18, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, icore_version, pod_name, 0), - PB_FIELD( 19, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, sdk_version, icore_version, 0), - PB_FIELD( 20, UENUM , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, sdk_name, sdk_version, 0), - PB_FIELD( 21, INT32 , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, app_count, sdk_name, 0), - PB_FIELD( 22, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, os_version, app_count, 0), - PB_FIELD( 24, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, min_supported_ios_version, os_version, 0), - PB_FIELD( 25, BOOL , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, use_default_app, min_supported_ios_version, 0), - PB_FIELD( 26, BOOL , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, deployed_in_app_store, use_default_app, 0), - PB_FIELD( 27, INT32 , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, dynamic_framework_count, deployed_in_app_store, 0), - PB_FIELD( 28, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, apple_framework_version, dynamic_framework_count, 0), - PB_FIELD( 29, BOOL , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, using_zip_file, apple_framework_version, 0), - PB_FIELD( 30, UENUM , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, deployment_type, using_zip_file, 0), - PB_FIELD( 31, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, platform_info, deployment_type, 0), - PB_FIELD( 33, BOOL , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, swizzling_enabled, platform_info, 0), - PB_FIELD( 36, BOOL , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, using_gdt, swizzling_enabled, 0), - PB_LAST_FIELD -}; - - - - - - - -/* @@protoc_insertion_point(eof) */ diff --git a/assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h b/assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h deleted file mode 100644 index 3e4c195..0000000 --- a/assign5/openTok/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* Automatically generated nanopb header */ -/* Generated by nanopb-0.3.9.3 */ - -#ifndef PB_LOGS_PROTO_MOBILESDK_IOS_FIREBASECORE_NANOPB_H_INCLUDED -#define PB_LOGS_PROTO_MOBILESDK_IOS_FIREBASECORE_NANOPB_H_INCLUDED -#include <nanopb/pb.h> - -/* @@protoc_insertion_point(includes) */ -#if PB_PROTO_HEADER_VERSION != 30 -#error Regenerate this file with the current version of nanopb generator. -#endif - - -/* Enum definitions */ -typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType { - logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_UNKNOWN_CONFIGURATION_TYPE = 0, - logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_CORE = 1, - logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK = 2 -} logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType; -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_UNKNOWN_CONFIGURATION_TYPE -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType)(logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK+1)) - -typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType { - logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_UNKNOWN_BUILD_TYPE = 0, - logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_INTERNAL = 1, - logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_EAP = 2, - logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_PROD = 3 -} logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType; -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_UNKNOWN_BUILD_TYPE -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_PROD -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType)(logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_PROD+1)) - -typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType { - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_UNKNOWN_SDK_SERVICE = 0, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ICORE = 1, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ADMOB = 2, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_APP_INVITE = 3, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_SIGN_IN = 5, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_GCM = 6, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MAPS = 7, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_SCION = 8, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ANALYTICS = 9, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_APP_INDEXING = 10, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_CONFIG = 11, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DURABLE_DEEP_LINKS = 12, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_CRASH = 13, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_AUTH = 14, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DATABASE = 15, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_STORAGE = 16, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MESSAGING = 17, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MEASUREMENT = 18, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_REMOTE_CONFIG = 19, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DYNAMIC_LINKS = 20, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_INVITES = 21, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_AUTH_UI = 22, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_FIRESTORE = 23, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_PERFORMANCE = 24, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_FACE = 26, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_BARCODE = 27, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_TEXT = 28, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_LABEL = 29, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_MODEL_INTERPRETER = 30, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_IN_APP_MESSAGING = 31, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_FUNCTIONS = 32, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_NATURAL_LANGUAGE = 33, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_AUTOML = 34, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_OBJECT_DETECTION = 35 -} logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType; -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_UNKNOWN_SDK_SERVICE -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_OBJECT_DETECTION -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType)(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_OBJECT_DETECTION+1)) - -typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName { - logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_UNKNOWN_POD_NAME = 0, - logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_GOOGLE = 1, - logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_FIREBASE = 2 -} logs_proto_mobilesdk_ios_ICoreConfiguration_PodName; -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_UNKNOWN_POD_NAME -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_FIREBASE -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_PodName)(logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_FIREBASE+1)) - -typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType { - logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_UNKNOWN = 0, - logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_COCOAPODS = 1, - logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_ZIP_FILE = 2, - logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_CARTHAGE = 3, - logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_SPM = 4 -} logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType; -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_UNKNOWN -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_SPM -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType)(logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_SPM+1)) - -/* Struct definitions */ -typedef struct _logs_proto_mobilesdk_ios_ICoreConfiguration { - bool has_configuration_type; - logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType configuration_type; - pb_size_t sdk_service_installed_count; - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType *sdk_service_installed; - pb_bytes_array_t *device_model; - pb_bytes_array_t *app_id; - pb_bytes_array_t *bundle_id; - bool has_pod_name; - logs_proto_mobilesdk_ios_ICoreConfiguration_PodName pod_name; - pb_bytes_array_t *icore_version; - pb_bytes_array_t *sdk_version; - bool has_sdk_name; - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType sdk_name; - bool has_app_count; - int32_t app_count; - pb_bytes_array_t *os_version; - pb_bytes_array_t *min_supported_ios_version; - bool has_use_default_app; - bool use_default_app; - bool has_deployed_in_app_store; - bool deployed_in_app_store; - bool has_dynamic_framework_count; - int32_t dynamic_framework_count; - pb_bytes_array_t *apple_framework_version; - bool has_using_zip_file; - bool using_zip_file; - bool has_deployment_type; - logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType deployment_type; - pb_bytes_array_t *platform_info; - bool has_swizzling_enabled; - bool swizzling_enabled; - bool has_using_gdt; - bool using_gdt; -/* @@protoc_insertion_point(struct:logs_proto_mobilesdk_ios_ICoreConfiguration) */ -} logs_proto_mobilesdk_ios_ICoreConfiguration; - -/* Default values for struct fields */ - -/* Initializer values for message structs */ -#define logs_proto_mobilesdk_ios_ICoreConfiguration_init_default {false, _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_MIN, 0, NULL, NULL, NULL, NULL, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_MIN, NULL, NULL, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MIN, false, 0, NULL, NULL, false, 0, false, 0, false, 0, NULL, false, 0, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_MIN, NULL, false, 0, false, 0} -#define logs_proto_mobilesdk_ios_ICoreConfiguration_init_zero {false, _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_MIN, 0, NULL, NULL, NULL, NULL, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_MIN, NULL, NULL, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MIN, false, 0, NULL, NULL, false, 0, false, 0, false, 0, NULL, false, 0, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_MIN, NULL, false, 0, false, 0} - -/* Field tags (for use in manual encoding/decoding) */ -#define logs_proto_mobilesdk_ios_ICoreConfiguration_pod_name_tag 16 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_configuration_type_tag 1 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_icore_version_tag 18 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_sdk_version_tag 19 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_sdk_service_installed_tag 7 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_sdk_name_tag 20 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_device_model_tag 9 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_os_version_tag 22 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_app_id_tag 10 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_bundle_id_tag 12 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_min_supported_ios_version_tag 24 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_use_default_app_tag 25 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_app_count_tag 21 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_deployed_in_app_store_tag 26 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_dynamic_framework_count_tag 27 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_apple_framework_version_tag 28 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_using_zip_file_tag 29 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_deployment_type_tag 30 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_platform_info_tag 31 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_swizzling_enabled_tag 33 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_using_gdt_tag 36 - -/* Struct field encoding specification for nanopb */ -extern const pb_field_t logs_proto_mobilesdk_ios_ICoreConfiguration_fields[22]; - -/* Maximum encoded size of messages (where known) */ -/* logs_proto_mobilesdk_ios_ICoreConfiguration_size depends on runtime parameters */ - -/* Message IDs (where set with "msgid" option) */ -#ifdef PB_MSGID - -#define FIREBASECORE_MESSAGES \ - - -#endif - -/* @@protoc_insertion_point(eof) */ - -#endif diff --git a/assign5/openTok/Pods/FirebaseCoreDiagnostics/LICENSE b/assign5/openTok/Pods/FirebaseCoreDiagnostics/LICENSE deleted file mode 100644 index d645695..0000000 --- a/assign5/openTok/Pods/FirebaseCoreDiagnostics/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/assign5/openTok/Pods/FirebaseCoreDiagnostics/README.md b/assign5/openTok/Pods/FirebaseCoreDiagnostics/README.md deleted file mode 100644 index b04a270..0000000 --- a/assign5/openTok/Pods/FirebaseCoreDiagnostics/README.md +++ /dev/null @@ -1,282 +0,0 @@ -# Firebase iOS Open Source Development - [![Actions Status][gh-auth-badge]][gh-actions] - [![Actions Status][gh-core-badge]][gh-actions] - [![Actions Status][gh-datatransport-badge]][gh-actions] - [![Actions Status][gh-dynamiclinks-badge]][gh-actions] - [![Actions Status][gh-firebasepod-badge]][gh-actions] - [![Actions Status][gh-firestore-badge]][gh-actions] - [![Actions Status][gh-interop-badge]][gh-actions] - [![Actions Status][gh-messaging-badge]][gh-actions] - [![Actions Status][gh-storage-badge]][gh-actions] - [![Actions Status][gh-symbolcollision-badge]][gh-actions] - [![Actions Status][gh-zip-badge]][gh-actions] - [](https://travis-ci.org/firebase/firebase-ios-sdk) - -This repository contains all Firebase iOS SDK source except FirebaseAnalytics, -FirebasePerformance, and FirebaseML. - -The repository also includes GoogleUtilities source. The -[GoogleUtilities](GoogleUtilities/README.md) pod is -a set of utilities used by Firebase and other Google products. - -Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -## Installation - -See the three subsections for details about three different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) - -### Standard pod install - -Go to -[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). - -### Installing from GitHub - -For releases starting with 5.0.0, the source for each release is also deployed -to CocoaPods master and available via standard -[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). - -These instructions can be used to access the Firebase repo at other branches, -tags, or commits. - -#### Background - -See -[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) -for instructions and options about overriding pod source locations. - -#### Accessing Firebase Source Snapshots - -All of the official releases are tagged in this repo and available via CocoaPods. To access a local -source snapshot or unreleased branch, use Podfile directives like the following: - -To access FirebaseFirestore via a branch: -``` -pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -``` - -To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: - -``` -pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' -pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' -``` - -### Carthage (iOS only) - -Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). - -### Rome - -Instructions for installing binary frameworks via -[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). - -### Using Firebase from a Framework or a library - -[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md) - -## Development - -To develop Firebase software in this repository, ensure that you have at least -the following software: - - * Xcode 10.1 (or later) - * CocoaPods 1.7.2 (or later) - * [CocoaPods generate](https://github.com/square/cocoapods-generate) - -For the pod that you want to develop: - -`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios` - -Note: If the CocoaPods cache is out of date, you may need to run -`pod repo update` before the `pod gen` command. - -Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for -those platforms. Since 10.2, Xcode does not properly handle multi-platform -CocoaPods workspaces. - -Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). - -### Development for Catalyst -* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` -* Check the Mac box in the App-iOS Build Settings -* Sign the App in the Settings Signing & Capabilities tab -* Click Pods in the Project Manager -* Add Signing to the iOS host app and unit test targets -* Select the Unit-unit scheme -* Run it to build and test - -### Adding a New Firebase Pod - -See [AddNewPod.md](AddNewPod.md). - -### Code Formatting - -To ensure that the code is formatted consistently, run the script -[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) -before creating a PR. - -Travis will verify that any code changes are done in a style compliant way. Install -`clang-format` and `swiftformat`. -These commands will get the right versions: - -``` -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c6f1cbd/Formula/clang-format.rb -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c13eda8/Formula/swiftformat.rb -``` - -Note: if you already have a newer version of these installed you may need to -`brew switch` to this version. - -To update this section, find the versions of clang-format and swiftformat.rb to -match the versions in the CI failure logs -[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). - -### Running Unit Tests - -Select a scheme and press Command-u to build a component and run its unit tests. - -#### Viewing Code Coverage (Deprecated) - -First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. - -After running the `AllUnitTests_iOS` scheme in Xcode, execute -`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` -at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. - -### Running Sample Apps -In order to run the sample apps and integration tests, you'll need valid -`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist -files without real values, but can be replaced with real plist files. To get your own -`GoogleService-Info.plist` files: - -1. Go to the [Firebase Console](https://console.firebase.google.com/) -2. Create a new Firebase project, if you don't already have one -3. For each sample app you want to test, create a new Firebase app with the sample app's bundle -identifier (e.g. `com.google.Database-Example`) -4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file -(e.g. in [Example/Database/App/](Example/Database/App/)); - -Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require -special Apple capabilities, and you will have to change the sample app to use a unique bundle -identifier that you can control in your own Apple Developer account. - -## Specific Component Instructions -See the sections below for any special instructions for those components. - -### Firebase Auth - -If you're doing specific Firebase Auth development, see -[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about -building and running the FirebaseAuth pod along with various samples and tests. - -### Firebase Database - -To run the Database Integration tests, make your database authentication rules -[public](https://firebase.google.com/docs/database/security/quickstart). - -### Firebase Storage - -To run the Storage Integration tests, follow the instructions in -[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m). - -#### Push Notifications - -Push notifications can only be delivered to specially provisioned App IDs in the developer portal. -In order to actually test receiving push notifications, you will need to: - -1. Change the bundle identifier of the sample app to something you own in your Apple Developer -account, and enable that App ID for push notifications. -2. You'll also need to -[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) -at **Project Settings > Cloud Messaging > [Your Firebase App]**. -3. Ensure your iOS device is added to your Apple Developer portal as a test device. - -#### iOS Simulator - -The iOS Simulator cannot register for remote notifications, and will not receive push notifications. -In order to receive push notifications, you'll have to follow the steps above and run the app on a -physical device. - -## Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -### tvOS, macOS, watchOS and Catalyst -Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on -tvOS, macOS, watchOS and Catalyst. - -For tvOS, checkout the [Sample](Example/tvOSSample). -For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the -[Independent Watch App Sample](Example/watchOSSample). - -Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this -repository is actively developed primarily for iOS. While we can catch basic unit test issues with -Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you -encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). - -During app setup in the console, you may get to a step that mentions something like "Checking if the app -has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst. -**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected. - -To install, add a subset of the following to the Podfile: - -``` -pod 'Firebase/ABTesting' # No watchOS support yet -pod 'Firebase/Auth' # No watchOS support yet -pod 'Firebase/Crashlytics' # No watchOS support yet -pod 'Firebase/Database' # No watchOS support yet -pod 'Firebase/Firestore' # No watchOS support yet -pod 'Firebase/Functions' # No watchOS support yet -pod 'Firebase/Messaging' -pod 'Firebase/RemoteConfig' # No watchOS support yet -pod 'Firebase/Storage' -``` - -#### Additional Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - -## Roadmap - -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source -plans and directions. - -## Contributing - -See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. - -## License - -The contents of this repository is licensed under the -[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). - -Your use of Firebase is governed by the -[Terms of Service for Firebase Services](https://firebase.google.com/terms/). - -[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions -[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg -[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg -[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg -[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg -[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg -[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg -[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg -[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg -[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg -[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg -[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg diff --git a/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h b/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h deleted file mode 100644 index 69c4072..0000000 --- a/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -/** If present, is a BOOL wrapped in an NSNumber. */ -#define kFIRCDIsDataCollectionDefaultEnabledKey @"FIRCDIsDataCollectionDefaultEnabledKey" - -/** If present, is an int32_t wrapped in an NSNumber. */ -#define kFIRCDConfigurationTypeKey @"FIRCDConfigurationTypeKey" - -/** If present, is an NSString. */ -#define kFIRCDSdkNameKey @"FIRCDSdkNameKey" - -/** If present, is an NSString. */ -#define kFIRCDSdkVersionKey @"FIRCDSdkVersionKey" - -/** If present, is an int32_t wrapped in an NSNumber. */ -#define kFIRCDllAppsCountKey @"FIRCDllAppsCountKey" - -/** If present, is an NSString. */ -#define kFIRCDGoogleAppIDKey @"FIRCDGoogleAppIDKey" - -/** If present, is an NSString. */ -#define kFIRCDBundleIDKey @"FIRCDBundleID" - -/** If present, is a BOOL wrapped in an NSNumber. */ -#define kFIRCDUsingOptionsFromDefaultPlistKey @"FIRCDUsingOptionsFromDefaultPlistKey" - -/** If present, is an NSString. */ -#define kFIRCDLibraryVersionIDKey @"FIRCDLibraryVersionIDKey" - -/** If present, is an NSString. */ -#define kFIRCDFirebaseUserAgentKey @"FIRCDFirebaseUserAgentKey" - -/** Defines the interface of a data object needed to log diagnostics data. */ -@protocol FIRCoreDiagnosticsData <NSObject> - -@required - -/** A dictionary containing data (non-exhaustive) to be logged in diagnostics. */ -@property(nonatomic) NSDictionary<NSString *, id> *diagnosticObjects; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h b/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h deleted file mode 100644 index 2b0eb71..0000000 --- a/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import "FIRCoreDiagnosticsData.h" - -NS_ASSUME_NONNULL_BEGIN - -/** Allows the interoperation of FirebaseCore and FirebaseCoreDiagnostics. */ -@protocol FIRCoreDiagnosticsInterop <NSObject> - -/** Sends the given diagnostics data. - * - * @param diagnosticsData The diagnostics data object to send. - */ -+ (void)sendDiagnosticsData:(id<FIRCoreDiagnosticsData>)diagnosticsData; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/LICENSE b/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/LICENSE deleted file mode 100644 index d645695..0000000 --- a/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/README.md b/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/README.md deleted file mode 100644 index 3ddc8fb..0000000 --- a/assign5/openTok/Pods/FirebaseCoreDiagnosticsInterop/README.md +++ /dev/null @@ -1,251 +0,0 @@ -# Firebase iOS Open Source Development [](https://travis-ci.org/firebase/firebase-ios-sdk) - -This repository contains a subset of the Firebase iOS SDK source. It currently -includes FirebaseCore, FirebaseABTesting, FirebaseAuth, FirebaseDatabase, -FirebaseFirestore, FirebaseFunctions, FirebaseInstanceID, FirebaseInAppMessaging, -FirebaseInAppMessagingDisplay, FirebaseMessaging, FirebaseRemoteConfig, and -FirebaseStorage. - -The repository also includes GoogleUtilities source. The -[GoogleUtilities](GoogleUtilities/README.md) pod is -a set of utilities used by Firebase and other Google products. - -Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -## Installation - -See the three subsections for details about three different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) - -### Standard pod install - -Go to -[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). - -### Installing from GitHub - -For releases starting with 5.0.0, the source for each release is also deployed -to CocoaPods master and available via standard -[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). - -These instructions can be used to access the Firebase repo at other branches, -tags, or commits. - -#### Background - -See -[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) -for instructions and options about overriding pod source locations. - -#### Accessing Firebase Source Snapshots - -All of the official releases are tagged in this repo and available via CocoaPods. To access a local -source snapshot or unreleased branch, use Podfile directives like the following: - -To access FirebaseFirestore via a branch: -``` -pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -``` - -To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: - -``` -pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' -pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' -``` - -### Carthage (iOS only) - -Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). - -### Rome - -Instructions for installing binary frameworks via -[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). - -## Development - -To develop Firebase software in this repository, ensure that you have at least -the following software: - - * Xcode 10.1 (or later) - * CocoaPods 1.7.2 (or later) - * [CocoaPods generate](https://github.com/square/cocoapods-generate) - -For the pod that you want to develop: - -`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios` - -Note: If the CocoaPods cache is out of date, you may need to run -`pod repo update` before the `pod gen` command. - -Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for -those platforms. Since 10.2, Xcode does not properly handle multi-platform -CocoaPods workspaces. - -Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). - -### Development for Catalyst -* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` -* Check the Mac box in the App-iOS Build Settings -* Sign the App in the Settings Signing & Capabilities tab -* Click Pods in the Project Manager -* Add Signing to the iOS host app and unit test targets -* Select the Unit-unit scheme -* Run it to build and test - -### Adding a New Firebase Pod - -See [AddNewPod.md](AddNewPod.md). - -### Code Formatting - -To ensure that the code is formatted consistently, run the script -[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) -before creating a PR. - -Travis will verify that any code changes are done in a style compliant way. Install -`clang-format` and `swiftformat`. -These commands will get the right versions: - -``` -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/e3496d9/Formula/clang-format.rb -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/7963c3d/Formula/swiftformat.rb -``` - -Note: if you already have a newer version of these installed you may need to -`brew switch` to this version. - -To update this section, find the versions of clang-format and swiftformat.rb to -match the versions in the CI failure logs -[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). - -### Running Unit Tests - -Select a scheme and press Command-u to build a component and run its unit tests. - -#### Viewing Code Coverage - -First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. - -After running the `AllUnitTests_iOS` scheme in Xcode, execute -`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` -at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. - -### Running Sample Apps -In order to run the sample apps and integration tests, you'll need valid -`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist -files without real values, but can be replaced with real plist files. To get your own -`GoogleService-Info.plist` files: - -1. Go to the [Firebase Console](https://console.firebase.google.com/) -2. Create a new Firebase project, if you don't already have one -3. For each sample app you want to test, create a new Firebase app with the sample app's bundle -identifier (e.g. `com.google.Database-Example`) -4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file -(e.g. in [Example/Database/App/](Example/Database/App/)); - -Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require -special Apple capabilities, and you will have to change the sample app to use a unique bundle -identifier that you can control in your own Apple Developer account. - -## Specific Component Instructions -See the sections below for any special instructions for those components. - -### Firebase Auth - -If you're doing specific Firebase Auth development, see -[the Auth Sample README](Example/Auth/README.md) for instructions about -building and running the FirebaseAuth pod along with various samples and tests. - -### Firebase Database - -To run the Database Integration tests, make your database authentication rules -[public](https://firebase.google.com/docs/database/security/quickstart). - -### Firebase Storage - -To run the Storage Integration tests, follow the instructions in -[FIRStorageIntegrationTests.m](Example/Storage/Tests/Integration/FIRStorageIntegrationTests.m). - -#### Push Notifications - -Push notifications can only be delivered to specially provisioned App IDs in the developer portal. -In order to actually test receiving push notifications, you will need to: - -1. Change the bundle identifier of the sample app to something you own in your Apple Developer -account, and enable that App ID for push notifications. -2. You'll also need to -[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) -at **Project Settings > Cloud Messaging > [Your Firebase App]**. -3. Ensure your iOS device is added to your Apple Developer portal as a test device. - -#### iOS Simulator - -The iOS Simulator cannot register for remote notifications, and will not receive push notifications. -In order to receive push notifications, you'll have to follow the steps above and run the app on a -physical device. - -## Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -### tvOS, macOS, and Catalyst -Thanks to contributions from the community, FirebaseABTesting, FirebaseAuth, FirebaseCore, -FirebaseDatabase, FirebaseMessaging, FirebaseFirestore, -FirebaseFunctions, FirebaseRemoteConfig, and FirebaseStorage now compile, run unit tests, and work on -tvOS, macOS, and Catalyst. - -For tvOS, checkout the [Sample](Example/tvOSSample). - -Keep in mind that macOS, Catalyst and tvOS are not officially supported by Firebase, and this -repository is actively developed primarily for iOS. While we can catch basic unit test issues with -Travis, there may be some changes where the SDK no longer works as expected on macOS or tvOS. If you -encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). - -To install, add a subset of the following to the Podfile: - -``` -pod 'Firebase/ABTesting' -pod 'Firebase/Auth' -pod 'Firebase/Database' -pod 'Firebase/Firestore' -pod 'Firebase/Functions' -pod 'Firebase/Messaging' -pod 'Firebase/RemoteConfig' -pod 'Firebase/Storage' -``` - -#### Additional Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - -## Roadmap - -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source -plans and directions. - -## Contributing - -See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. - -## License - -The contents of this repository is licensed under the -[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). - -Your use of Firebase is governed by the -[Terms of Service for Firebase Services](https://firebase.google.com/terms/). diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDataSnapshot.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDataSnapshot.m deleted file mode 100644 index c1d48ec..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDataSnapshot.m +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRDataSnapshot.h" -#import "FChildrenNode.h" -#import "FIRDataSnapshot_Private.h" -#import "FIRDatabaseReference.h" -#import "FTransformedEnumerator.h" -#import "FValidation.h" - -@interface FIRDataSnapshot () -@property(nonatomic, strong) FIRDatabaseReference *ref; -@end - -@implementation FIRDataSnapshot - -- (id)initWithRef:(FIRDatabaseReference *)ref indexedNode:(FIndexedNode *)node { - self = [super init]; - if (self != nil) { - self->_ref = ref; - self->_node = node; - } - return self; -} - -- (id)value { - return [self.node.node val]; -} - -- (id)valueInExportFormat { - return [self.node.node valForExport:YES]; -} - -- (FIRDataSnapshot *)childSnapshotForPath:(NSString *)childPathString { - [FValidation validateFrom:@"child:" validPathString:childPathString]; - FPath *childPath = [[FPath alloc] initWith:childPathString]; - FIRDatabaseReference *childRef = [self.ref child:childPathString]; - - id<FNode> childNode = [self.node.node getChild:childPath]; - return [[FIRDataSnapshot alloc] - initWithRef:childRef - indexedNode:[FIndexedNode indexedNodeWithNode:childNode]]; -} - -- (BOOL)hasChild:(NSString *)childPathString { - [FValidation validateFrom:@"hasChild:" validPathString:childPathString]; - FPath *childPath = [[FPath alloc] initWith:childPathString]; - return ![[self.node.node getChild:childPath] isEmpty]; -} - -- (id)priority { - id<FNode> priority = [self.node.node getPriority]; - return priority.val; -} - -- (BOOL)hasChildren { - if ([self.node.node isLeafNode]) { - return false; - } else { - return ![self.node.node isEmpty]; - } -} - -- (BOOL)exists { - return ![self.node.node isEmpty]; -} - -- (NSString *)key { - return [self.ref key]; -} - -- (NSUInteger)childrenCount { - return [self.node.node numChildren]; -} - -- (NSEnumerator<FIRDataSnapshot *> *)children { - return [[FTransformedEnumerator alloc] - initWithEnumerator:self.node.childEnumerator - andTransform:^id(FNamedNode *node) { - FIRDatabaseReference *childRef = [self.ref child:node.name]; - return [[FIRDataSnapshot alloc] - initWithRef:childRef - indexedNode:[FIndexedNode indexedNodeWithNode:node.node]]; - }]; -} - -- (NSString *)description { - return - [NSString stringWithFormat:@"Snap (%@) %@", self.key, self.node.node]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabase.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabase.m deleted file mode 100644 index 8957336..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabase.m +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import <FirebaseAuthInterop/FIRAuthInterop.h> -#import <FirebaseCore/FIRAppInternal.h> -#import <FirebaseCore/FIRComponent.h> -#import <FirebaseCore/FIRComponentContainer.h> -#import <FirebaseCore/FIRDependency.h> -#import <FirebaseCore/FIRLogger.h> -#import <FirebaseCore/FIROptions.h> - -#import "FIRDatabase.h" -#import "FIRDatabaseComponent.h" -#import "FIRDatabaseConfig_Private.h" -#import "FIRDatabaseQuery_Private.h" -#import "FIRDatabaseReference_Private.h" -#import "FIRDatabase_Private.h" -#import "FRepoInfo.h" -#import "FValidation.h" - -@implementation FIRDatabase - -// The STR and STR_EXPAND macro allow a numeric version passed to he compiler -// driver with a -D to be treated as a string instead of an invalid floating -// point value. -#define STR(x) STR_EXPAND(x) -#define STR_EXPAND(x) #x -static const char *FIREBASE_SEMVER = (const char *)STR(FIRDatabase_VERSION); - -+ (FIRDatabase *)database { - if (![FIRApp isDefaultAppConfigured]) { - [NSException raise:@"FIRAppNotConfigured" - format:@"Failed to get default Firebase Database instance. " - @"Must call `[FIRApp " - @"configure]` (`FirebaseApp.configure()` in Swift) " - @"before using " - @"Firebase Database."]; - } - return [FIRDatabase databaseForApp:[FIRApp defaultApp]]; -} - -+ (FIRDatabase *)databaseWithURL:(NSString *)url { - FIRApp *app = [FIRApp defaultApp]; - if (app == nil) { - [NSException - raise:@"FIRAppNotConfigured" - format: - @"Failed to get default Firebase Database instance. " - @"Must call `[FIRApp configure]` (`FirebaseApp.configure()` in " - @"Swift) before using Firebase Database."]; - } - return [FIRDatabase databaseForApp:app URL:url]; -} - -+ (FIRDatabase *)databaseForApp:(FIRApp *)app { - if (app == nil) { - [NSException raise:@"InvalidFIRApp" - format:@"nil FIRApp instance passed to databaseForApp."]; - } - return [FIRDatabase databaseForApp:app URL:app.options.databaseURL]; -} - -+ (FIRDatabase *)databaseForApp:(FIRApp *)app URL:(NSString *)url { - if (app == nil) { - [NSException raise:@"InvalidFIRApp" - format:@"nil FIRApp instance passed to databaseForApp."]; - } - if (url == nil) { - [NSException raise:@"MissingDatabaseURL" - format:@"Failed to get FirebaseDatabase instance: " - @"Specify DatabaseURL within FIRApp or from your " - @"databaseForApp:URL: call."]; - } - id<FIRDatabaseProvider> provider = - FIR_COMPONENT(FIRDatabaseProvider, app.container); - return [provider databaseForApp:app URL:url]; -} - -+ (NSString *)buildVersion { - // TODO: Restore git hash when build moves back to git - return [NSString stringWithFormat:@"%s_%s", FIREBASE_SEMVER, __DATE__]; -} - -+ (FIRDatabase *)createDatabaseForTests:(FRepoInfo *)repoInfo - config:(FIRDatabaseConfig *)config { - FIRDatabase *db = [[FIRDatabase alloc] initWithApp:nil - repoInfo:repoInfo - config:config]; - [db ensureRepo]; - return db; -} - -+ (NSString *)sdkVersion { - return [NSString stringWithUTF8String:FIREBASE_SEMVER]; -} - -+ (void)setLoggingEnabled:(BOOL)enabled { - [FUtilities setLoggingEnabled:enabled]; - FFLog(@"I-RDB024001", @"BUILD Version: %@", [FIRDatabase buildVersion]); -} - -- (id)initWithApp:(FIRApp *)app - repoInfo:(FRepoInfo *)info - config:(FIRDatabaseConfig *)config { - self = [super init]; - if (self != nil) { - self->_repoInfo = info; - self->_config = config; - self->_app = app; - } - return self; -} - -- (FIRDatabaseReference *)reference { - [self ensureRepo]; - - return [[FIRDatabaseReference alloc] initWithRepo:self.repo - path:[FPath empty]]; -} - -- (FIRDatabaseReference *)referenceWithPath:(NSString *)path { - [self ensureRepo]; - - [FValidation validateFrom:@"referenceWithPath" validRootPathString:path]; - FPath *childPath = [[FPath alloc] initWith:path]; - return [[FIRDatabaseReference alloc] initWithRepo:self.repo path:childPath]; -} - -- (FIRDatabaseReference *)referenceFromURL:(NSString *)databaseUrl { - [self ensureRepo]; - - if (databaseUrl == nil) { - [NSException raise:@"InvalidDatabaseURL" - format:@"Invalid nil url passed to referenceFromURL:"]; - } - FParsedUrl *parsedUrl = [FUtilities parseUrl:databaseUrl]; - [FValidation validateFrom:@"referenceFromURL:" validURL:parsedUrl]; - if (![parsedUrl.repoInfo.host isEqualToString:_repoInfo.host]) { - [NSException - raise:@"InvalidDatabaseURL" - format: - @"Invalid URL (%@) passed to getReference(). URL was expected " - "to match configured Database URL: %@", - databaseUrl, [self reference].URL]; - } - return [[FIRDatabaseReference alloc] initWithRepo:self.repo - path:parsedUrl.path]; -} - -- (void)purgeOutstandingWrites { - [self ensureRepo]; - - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - [self.repo purgeOutstandingWrites]; - }); -} - -- (void)goOnline { - [self ensureRepo]; - - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - [self.repo resume]; - }); -} - -- (void)goOffline { - [self ensureRepo]; - - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - [self.repo interrupt]; - }); -} - -- (void)setPersistenceEnabled:(BOOL)persistenceEnabled { - [self assertUnfrozen:@"setPersistenceEnabled"]; - self->_config.persistenceEnabled = persistenceEnabled; -} - -- (BOOL)persistenceEnabled { - return self->_config.persistenceEnabled; -} - -- (void)setPersistenceCacheSizeBytes:(NSUInteger)persistenceCacheSizeBytes { - [self assertUnfrozen:@"setPersistenceCacheSizeBytes"]; - self->_config.persistenceCacheSizeBytes = persistenceCacheSizeBytes; -} - -- (NSUInteger)persistenceCacheSizeBytes { - return self->_config.persistenceCacheSizeBytes; -} - -- (void)setCallbackQueue:(dispatch_queue_t)callbackQueue { - [self assertUnfrozen:@"setCallbackQueue"]; - self->_config.callbackQueue = callbackQueue; -} - -- (dispatch_queue_t)callbackQueue { - return self->_config.callbackQueue; -} - -- (void)assertUnfrozen:(NSString *)methodName { - if (self.repo != nil) { - [NSException - raise:@"FIRDatabaseAlreadyInUse" - format:@"Calls to %@ must be made before any other usage of " - "FIRDatabase instance.", - methodName]; - } -} - -- (void)ensureRepo { - if (self.repo == nil) { - self.repo = [FRepoManager createRepo:self.repoInfo - config:self.config - database:self]; - } -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseComponent.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseComponent.h deleted file mode 100644 index 9d8bdb2..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseComponent.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@class FIRApp; -@class FIRDatabase; - -NS_ASSUME_NONNULL_BEGIN - -/// This protocol is used in the interop registration process to register an -/// instance provider for individual FIRApps. -@protocol FIRDatabaseProvider - -/// Gets a FirebaseDatabase instance for the specified URL, using the specified -/// FirebaseApp. -- (FIRDatabase *)databaseForApp:(FIRApp *)app URL:(NSString *)url; - -@end - -/// A concrete implementation for FIRDatabaseProvider to create Database -/// instances. -@interface FIRDatabaseComponent : NSObject <FIRDatabaseProvider> - -/// The FIRApp that instances will be set up with. -@property(nonatomic, weak, readonly) FIRApp *app; - -/// Unavailable, use `databaseForApp:URL:` instead. -- (instancetype)init NS_UNAVAILABLE; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseComponent.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseComponent.m deleted file mode 100644 index 8e44778..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseComponent.m +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRDatabaseComponent.h" - -#import "FIRDatabaseConfig_Private.h" -#import "FIRDatabase_Private.h" -#import "FRepoManager.h" - -#import <FirebaseAuthInterop/FIRAuthInterop.h> -#import <FirebaseCore/FIRAppInternal.h> -#import <FirebaseCore/FIRComponent.h> -#import <FirebaseCore/FIRComponentContainer.h> -#import <FirebaseCore/FIRDependency.h> -#import <FirebaseCore/FIRLibrary.h> -#import <FirebaseCore/FIROptions.h> - -NS_ASSUME_NONNULL_BEGIN - -/** A NSMutableDictionary of FirebaseApp name and FRepoInfo to FirebaseDatabase - * instance. */ -typedef NSMutableDictionary<NSString *, FIRDatabase *> FIRDatabaseDictionary; - -@interface FIRDatabaseComponent () <FIRComponentLifecycleMaintainer, FIRLibrary> -@property(nonatomic) FIRDatabaseDictionary *instances; -/// Internal intializer. -- (instancetype)initWithApp:(FIRApp *)app; -@end - -@implementation FIRDatabaseComponent - -#pragma mark - Initialization - -- (instancetype)initWithApp:(FIRApp *)app { - self = [super init]; - if (self) { - _app = app; - _instances = [NSMutableDictionary dictionary]; - } - return self; -} - -#pragma mark - Lifecycle - -+ (void)load { - [FIRApp registerInternalLibrary:(Class<FIRLibrary>)self - withName:@"fire-db" - withVersion:[FIRDatabase sdkVersion]]; -} - -#pragma mark - FIRComponentRegistrant - -+ (NSArray<FIRComponent *> *)componentsToRegister { - FIRDependency *authDep = - [FIRDependency dependencyWithProtocol:@protocol(FIRAuthInterop) - isRequired:NO]; - FIRComponentCreationBlock creationBlock = - ^id _Nullable(FIRComponentContainer *container, BOOL *isCacheable) { - *isCacheable = YES; - return [[FIRDatabaseComponent alloc] initWithApp:container.app]; - }; - FIRComponent *databaseProvider = - [FIRComponent componentWithProtocol:@protocol(FIRDatabaseProvider) - instantiationTiming:FIRInstantiationTimingLazy - dependencies:@[ authDep ] - creationBlock:creationBlock]; - return @[ databaseProvider ]; -} - -#pragma mark - Instance management. - -- (void)appWillBeDeleted:(FIRApp *)app { - NSString *appName = app.name; - if (appName == nil) { - return; - } - FIRDatabaseDictionary *instances = [self instances]; - @synchronized(instances) { - // Clean up the deleted instance in an effort to remove any resources - // still in use. Note: Any leftover instances of this exact database - // will be invalid. - for (FIRDatabase *database in [instances allValues]) { - [FRepoManager disposeRepos:database.config]; - } - [instances removeAllObjects]; - } -} - -#pragma mark - FIRDatabaseProvider Conformance - -- (FIRDatabase *)databaseForApp:(FIRApp *)app URL:(NSString *)url { - if (app == nil) { - [NSException raise:@"InvalidFIRApp" - format:@"nil FIRApp instance passed to databaseForApp."]; - } - - if (url == nil) { - [NSException raise:@"MissingDatabaseURL" - format:@"Failed to get FirebaseDatabase instance: " - "Specify DatabaseURL within FIRApp or from your " - "databaseForApp:URL: call."]; - } - - NSURL *databaseUrl = [NSURL URLWithString:url]; - - if (databaseUrl == nil) { - [NSException raise:@"InvalidDatabaseURL" - format:@"The Database URL '%@' cannot be parsed. " - "Specify a valid DatabaseURL within FIRApp or from " - "your databaseForApp:URL: call.", - databaseUrl]; - } else if (![databaseUrl.path isEqualToString:@""] && - ![databaseUrl.path isEqualToString:@"/"]) { - [NSException - raise:@"InvalidDatabaseURL" - format:@"Configured Database URL '%@' is invalid. It should point " - "to the root of a Firebase Database but it includes a " - "path: %@", - databaseUrl, databaseUrl.path]; - } - - FIRDatabaseDictionary *instances = [self instances]; - @synchronized(instances) { - FParsedUrl *parsedUrl = - [FUtilities parseUrl:databaseUrl.absoluteString]; - NSString *urlIndex = - [NSString stringWithFormat:@"%@:%@", parsedUrl.repoInfo.host, - [parsedUrl.path toString]]; - FIRDatabase *database = instances[urlIndex]; - if (!database) { - id<FAuthTokenProvider> authTokenProvider = [FAuthTokenProvider - authTokenProviderWithAuth:FIR_COMPONENT(FIRAuthInterop, - app.container)]; - - // If this is the default app, don't set the session persistence key - // so that we use our default ("default") instead of the FIRApp - // default ("[DEFAULT]") so that we preserve the default location - // used by the legacy Firebase SDK. - NSString *sessionIdentifier = @"default"; - if (![FIRApp isDefaultAppConfigured] || - app != [FIRApp defaultApp]) { - sessionIdentifier = app.name; - } - - FIRDatabaseConfig *config = [[FIRDatabaseConfig alloc] - initWithSessionIdentifier:sessionIdentifier - authTokenProvider:authTokenProvider]; - database = [[FIRDatabase alloc] initWithApp:app - repoInfo:parsedUrl.repoInfo - config:config]; - instances[urlIndex] = database; - } - - return database; - } -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseConfig.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseConfig.h deleted file mode 100644 index 85399f9..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseConfig.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@protocol FAuthTokenProvider; - -NS_ASSUME_NONNULL_BEGIN - -/** - * TODO: Merge FIRDatabaseConfig into FIRDatabase. - */ -@interface FIRDatabaseConfig : NSObject - -- (id)initWithSessionIdentifier:(NSString *)identifier - authTokenProvider:(id<FAuthTokenProvider>)authTokenProvider; - -/** - * By default the Firebase Database client will keep data in memory while your - * application is running, but not when it is restarted. By setting this value - * to YES, the data will be persisted to on-device (disk) storage and will thus - * be available again when the app is restarted (even when there is no network - * connectivity at that time). Note that this property must be set before - * creating your first FIRDatabaseReference and only needs to be called once per - * application. - * - * If your app uses Firebase Authentication, the client will automatically - * persist the user's authentication token across restarts, even without - * persistence enabled. But if the auth token expired while offline and you've - * enabled persistence, the client will pause write operations until you - * successfully re-authenticate (or explicitly unauthenticate) to prevent your - * writes from being sent unauthenticated and failing due to security rules. - */ -@property(nonatomic) BOOL persistenceEnabled; - -/** - * By default the Firebase Database client will use up to 10MB of disk space to - * cache data. If the cache grows beyond this size, the client will start - * removing data that hasn't been recently used. If you find that your - * application caches too little or too much data, call this method to change - * the cache size. This property must be set before creating your first - * FIRDatabaseReference and only needs to be called once per application. - * - * Note that the specified cache size is only an approximation and the size on - * disk may temporarily exceed it at times. - */ -@property(nonatomic) NSUInteger persistenceCacheSizeBytes; - -/** - * Sets the dispatch queue on which all events are raised. The default queue is - * the main queue. - */ -@property(nonatomic, strong) dispatch_queue_t callbackQueue; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseConfig.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseConfig.m deleted file mode 100644 index 9e9f8b5..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseConfig.m +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRDatabaseConfig.h" - -#import "FAuthTokenProvider.h" -#import "FIRDatabaseConfig_Private.h" -#import "FIRNoopAuthTokenProvider.h" - -@interface FIRDatabaseConfig (Private) - -@property(nonatomic, strong, readwrite) NSString *sessionIdentifier; - -@end - -@implementation FIRDatabaseConfig - -- (id)init { - [NSException raise:NSInvalidArgumentException - format:@"Can't create config objects!"]; - return nil; -} - -- (id)initWithSessionIdentifier:(NSString *)identifier - authTokenProvider:(id<FAuthTokenProvider>)authTokenProvider { - self = [super init]; - if (self != nil) { - self->_sessionIdentifier = identifier; - self->_callbackQueue = dispatch_get_main_queue(); - self->_persistenceCacheSizeBytes = - 10 * 1024 * 1024; // Default cache size is 10MB - self->_authTokenProvider = authTokenProvider; - } - return self; -} - -- (void)assertUnfrozen { - if (self.isFrozen) { - [NSException raise:NSGenericException - format:@"Can't modify config objects after they are in use " - @"for FIRDatabaseReferences."]; - } -} - -- (void)setAuthTokenProvider:(id<FAuthTokenProvider>)authTokenProvider { - [self assertUnfrozen]; - self->_authTokenProvider = authTokenProvider; -} - -- (void)setPersistenceEnabled:(BOOL)persistenceEnabled { - [self assertUnfrozen]; - self->_persistenceEnabled = persistenceEnabled; -} - -- (void)setPersistenceCacheSizeBytes:(NSUInteger)persistenceCacheSizeBytes { - [self assertUnfrozen]; - // Can't be less than 1MB - if (persistenceCacheSizeBytes < 1024 * 1024) { - [NSException raise:NSInvalidArgumentException - format:@"The minimum cache size must be at least 1MB"]; - } - if (persistenceCacheSizeBytes > 100 * 1024 * 1024) { - [NSException raise:NSInvalidArgumentException - format:@"Firebase Database currently doesn't support a " - @"cache size larger than 100MB"]; - } - self->_persistenceCacheSizeBytes = persistenceCacheSizeBytes; -} - -- (void)setCallbackQueue:(dispatch_queue_t)callbackQueue { - [self assertUnfrozen]; - self->_callbackQueue = callbackQueue; -} - -- (void)freeze { - self->_isFrozen = YES; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseQuery.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseQuery.m deleted file mode 100644 index cd62979..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRDatabaseQuery.m +++ /dev/null @@ -1,677 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRDatabaseQuery.h" -#import "FChildEventRegistration.h" -#import "FConstants.h" -#import "FIRDatabaseQuery_Private.h" -#import "FKeyIndex.h" -#import "FLeafNode.h" -#import "FPath.h" -#import "FPathIndex.h" -#import "FPriorityIndex.h" -#import "FQueryParams.h" -#import "FQuerySpec.h" -#import "FSnapshotUtilities.h" -#import "FValidation.h" -#import "FValueEventRegistration.h" -#import "FValueIndex.h" - -@implementation FIRDatabaseQuery - -@synthesize repo; -@synthesize path; -@synthesize queryParams; - -#define INVALID_QUERY_PARAM_ERROR @"InvalidQueryParameter" - -+ (dispatch_queue_t)sharedQueue { - // We use this shared queue across all of the FQueries so things happen FIFO - // (as opposed to dispatch_get_global_queue(0, 0) which is concurrent) - static dispatch_once_t pred; - static dispatch_queue_t sharedDispatchQueue; - - dispatch_once(&pred, ^{ - sharedDispatchQueue = dispatch_queue_create("FirebaseWorker", NULL); - }); - - return sharedDispatchQueue; -} - -- (id)initWithRepo:(FRepo *)theRepo path:(FPath *)thePath { - return [self initWithRepo:theRepo - path:thePath - params:nil - orderByCalled:NO - priorityMethodCalled:NO]; -} - -- (id)initWithRepo:(FRepo *)theRepo - path:(FPath *)thePath - params:(FQueryParams *)theParams - orderByCalled:(BOOL)orderByCalled - priorityMethodCalled:(BOOL)priorityMethodCalled { - self = [super init]; - if (self) { - self.repo = theRepo; - self.path = thePath; - if (!theParams) { - theParams = [FQueryParams defaultInstance]; - } - if (![theParams isValid]) { - @throw [[NSException alloc] - initWithName:@"InvalidArgumentError" - reason:@"Queries are limited to two constraints" - userInfo:nil]; - } - self.queryParams = theParams; - self.orderByCalled = orderByCalled; - self.priorityMethodCalled = priorityMethodCalled; - } - return self; -} - -- (FQuerySpec *)querySpec { - return [[FQuerySpec alloc] initWithPath:self.path params:self.queryParams]; -} - -- (void)validateQueryEndpointsForParams:(FQueryParams *)params { - if ([params.index isEqual:[FKeyIndex keyIndex]]) { - if ([params hasStart]) { - if (params.indexStartKey != [FUtilities minName]) { - [NSException raise:INVALID_QUERY_PARAM_ERROR - format:@"Can't use queryStartingAtValue:childKey: " - @"or queryEqualTo:andChildKey: in " - @"combination with queryOrderedByKey"]; - } - if (![params.indexStartValue.val isKindOfClass:[NSString class]]) { - [NSException - raise:INVALID_QUERY_PARAM_ERROR - format: - @"Can't use queryStartingAtValue: with other types " - @"than string in combination with queryOrderedByKey"]; - } - } - if ([params hasEnd]) { - if (params.indexEndKey != [FUtilities maxName]) { - [NSException raise:INVALID_QUERY_PARAM_ERROR - format:@"Can't use queryEndingAtValue:childKey: or " - @"queryEqualToValue:childKey: in " - @"combination with queryOrderedByKey"]; - } - if (![params.indexEndValue.val isKindOfClass:[NSString class]]) { - [NSException - raise:INVALID_QUERY_PARAM_ERROR - format: - @"Can't use queryEndingAtValue: with other types than " - @"string in combination with queryOrderedByKey"]; - } - } - } else if ([params.index isEqual:[FPriorityIndex priorityIndex]]) { - if (([params hasStart] && - ![FValidation validatePriorityValue:params.indexStartValue.val]) || - ([params hasEnd] && - ![FValidation validatePriorityValue:params.indexEndValue.val])) { - [NSException - raise:INVALID_QUERY_PARAM_ERROR - format:@"When using queryOrderedByPriority, values provided to " - @"queryStartingAtValue:, queryEndingAtValue:, or " - @"queryEqualToValue: must be valid priorities."]; - } - } -} - -- (void)validateEqualToCall { - if ([self.queryParams hasStart]) { - [NSException - raise:INVALID_QUERY_PARAM_ERROR - format: - @"Cannot combine queryEqualToValue: and queryStartingAtValue:"]; - } - if ([self.queryParams hasEnd]) { - [NSException - raise:INVALID_QUERY_PARAM_ERROR - format: - @"Cannot combine queryEqualToValue: and queryEndingAtValue:"]; - } -} - -- (void)validateNoPreviousOrderByCalled { - if (self.orderByCalled) { - [NSException raise:INVALID_QUERY_PARAM_ERROR - format:@"Cannot use multiple queryOrderedBy calls!"]; - } -} - -- (void)validateIndexValueType:(id)type fromMethod:(NSString *)method { - if (type != nil && ![type isKindOfClass:[NSNumber class]] && - ![type isKindOfClass:[NSString class]] && - ![type isKindOfClass:[NSNull class]]) { - [NSException raise:INVALID_QUERY_PARAM_ERROR - format:@"You can only pass nil, NSString or NSNumber to %@", - method]; - } -} - -- (FIRDatabaseQuery *)queryStartingAtValue:(id)startValue { - return [self queryStartingAtInternal:startValue - childKey:nil - from:@"queryStartingAtValue:" - priorityMethod:NO]; -} - -- (FIRDatabaseQuery *)queryStartingAtValue:(id)startValue - childKey:(NSString *)childKey { - if ([self.queryParams.index isEqual:[FKeyIndex keyIndex]]) { - @throw [[NSException alloc] - initWithName:INVALID_QUERY_PARAM_ERROR - reason:@"You must use queryStartingAtValue: instead of " - @"queryStartingAtValue:childKey: when using " - @"queryOrderedByKey:" - userInfo:nil]; - } - return [self queryStartingAtInternal:startValue - childKey:childKey - from:@"queryStartingAtValue:childKey:" - priorityMethod:NO]; -} - -- (FIRDatabaseQuery *)queryStartingAtInternal:(id<FNode>)startValue - childKey:(NSString *)childKey - from:(NSString *)methodName - priorityMethod:(BOOL)priorityMethod { - [self validateIndexValueType:startValue fromMethod:methodName]; - if (childKey != nil) { - [FValidation validateFrom:methodName validKey:childKey]; - } - if ([self.queryParams hasStart]) { - [NSException raise:INVALID_QUERY_PARAM_ERROR - format:@"Can't call %@ after queryStartingAtValue or " - @"queryEqualToValue was previously called", - methodName]; - } - id<FNode> startNode = [FSnapshotUtilities nodeFrom:startValue]; - FQueryParams *params = [self.queryParams startAt:startNode - childKey:childKey]; - [self validateQueryEndpointsForParams:params]; - return [[FIRDatabaseQuery alloc] - initWithRepo:self.repo - path:self.path - params:params - orderByCalled:self.orderByCalled - priorityMethodCalled:priorityMethod || self.priorityMethodCalled]; -} - -- (FIRDatabaseQuery *)queryEndingAtValue:(id)endValue { - return [self queryEndingAtInternal:endValue - childKey:nil - from:@"queryEndingAtValue:" - priorityMethod:NO]; -} - -- (FIRDatabaseQuery *)queryEndingAtValue:(id)endValue - childKey:(NSString *)childKey { - if ([self.queryParams.index isEqual:[FKeyIndex keyIndex]]) { - @throw [[NSException alloc] - initWithName:INVALID_QUERY_PARAM_ERROR - reason:@"You must use queryEndingAtValue: instead of " - @"queryEndingAtValue:childKey: when using " - @"queryOrderedByKey:" - userInfo:nil]; - } - - return [self queryEndingAtInternal:endValue - childKey:childKey - from:@"queryEndingAtValue:childKey:" - priorityMethod:NO]; -} - -- (FIRDatabaseQuery *)queryEndingAtInternal:(id)endValue - childKey:(NSString *)childKey - from:(NSString *)methodName - priorityMethod:(BOOL)priorityMethod { - [self validateIndexValueType:endValue fromMethod:methodName]; - if (childKey != nil) { - [FValidation validateFrom:methodName validKey:childKey]; - } - if ([self.queryParams hasEnd]) { - [NSException raise:INVALID_QUERY_PARAM_ERROR - format:@"Can't call %@ after queryEndingAtValue or " - @"queryEqualToValue was previously called", - methodName]; - } - id<FNode> endNode = [FSnapshotUtilities nodeFrom:endValue]; - FQueryParams *params = [self.queryParams endAt:endNode childKey:childKey]; - [self validateQueryEndpointsForParams:params]; - return [[FIRDatabaseQuery alloc] - initWithRepo:self.repo - path:self.path - params:params - orderByCalled:self.orderByCalled - priorityMethodCalled:priorityMethod || self.priorityMethodCalled]; -} - -- (FIRDatabaseQuery *)queryEqualToValue:(id)value { - return [self queryEqualToInternal:value - childKey:nil - from:@"queryEqualToValue:" - priorityMethod:NO]; -} - -- (FIRDatabaseQuery *)queryEqualToValue:(id)value - childKey:(NSString *)childKey { - if ([self.queryParams.index isEqual:[FKeyIndex keyIndex]]) { - @throw [[NSException alloc] - initWithName:INVALID_QUERY_PARAM_ERROR - reason:@"You must use queryEqualToValue: instead of " - @"queryEqualTo:childKey: when using queryOrderedByKey:" - userInfo:nil]; - } - return [self queryEqualToInternal:value - childKey:childKey - from:@"queryEqualToValue:childKey:" - priorityMethod:NO]; -} - -- (FIRDatabaseQuery *)queryEqualToInternal:(id)value - childKey:(NSString *)childKey - from:(NSString *)methodName - priorityMethod:(BOOL)priorityMethod { - [self validateIndexValueType:value fromMethod:methodName]; - if (childKey != nil) { - [FValidation validateFrom:methodName validKey:childKey]; - } - if ([self.queryParams hasEnd] || [self.queryParams hasStart]) { - [NSException - raise:INVALID_QUERY_PARAM_ERROR - format: - @"Can't call %@ after queryStartingAtValue, queryEndingAtValue " - @"or queryEqualToValue was previously called", - methodName]; - } - id<FNode> node = [FSnapshotUtilities nodeFrom:value]; - FQueryParams *params = [[self.queryParams startAt:node - childKey:childKey] endAt:node - childKey:childKey]; - [self validateQueryEndpointsForParams:params]; - return [[FIRDatabaseQuery alloc] - initWithRepo:self.repo - path:self.path - params:params - orderByCalled:self.orderByCalled - priorityMethodCalled:priorityMethod || self.priorityMethodCalled]; -} - -- (void)validateLimitRange:(NSUInteger)limit { - // No need to check for negative ranges, since limit is unsigned - if (limit == 0) { - [NSException raise:INVALID_QUERY_PARAM_ERROR - format:@"Limit can't be zero"]; - } - if (limit >= 1ul << 31) { - [NSException raise:INVALID_QUERY_PARAM_ERROR - format:@"Limit must be less than 2,147,483,648"]; - } -} - -- (FIRDatabaseQuery *)queryLimitedToFirst:(NSUInteger)limit { - if (self.queryParams.limitSet) { - [NSException raise:INVALID_QUERY_PARAM_ERROR - format:@"Can't call queryLimitedToFirst: if a limit was " - @"previously set"]; - } - [self validateLimitRange:limit]; - FQueryParams *params = [self.queryParams limitToFirst:limit]; - return [[FIRDatabaseQuery alloc] initWithRepo:self.repo - path:self.path - params:params - orderByCalled:self.orderByCalled - priorityMethodCalled:self.priorityMethodCalled]; -} - -- (FIRDatabaseQuery *)queryLimitedToLast:(NSUInteger)limit { - if (self.queryParams.limitSet) { - [NSException raise:INVALID_QUERY_PARAM_ERROR - format:@"Can't call queryLimitedToLast: if a limit was " - @"previously set"]; - } - [self validateLimitRange:limit]; - FQueryParams *params = [self.queryParams limitToLast:limit]; - return [[FIRDatabaseQuery alloc] initWithRepo:self.repo - path:self.path - params:params - orderByCalled:self.orderByCalled - priorityMethodCalled:self.priorityMethodCalled]; -} - -- (FIRDatabaseQuery *)queryOrderedByChild:(NSString *)indexPathString { - if ([indexPathString isEqualToString:@"$key"] || - [indexPathString isEqualToString:@".key"]) { - @throw [[NSException alloc] - initWithName:INVALID_QUERY_PARAM_ERROR - reason:[NSString stringWithFormat: - @"(queryOrderedByChild:) %@ is invalid. " - @" Use queryOrderedByKey: instead.", - indexPathString] - userInfo:nil]; - } else if ([indexPathString isEqualToString:@"$priority"] || - [indexPathString isEqualToString:@".priority"]) { - @throw [[NSException alloc] - initWithName:INVALID_QUERY_PARAM_ERROR - reason:[NSString stringWithFormat: - @"(queryOrderedByChild:) %@ is invalid. " - @" Use queryOrderedByPriority: instead.", - indexPathString] - userInfo:nil]; - } else if ([indexPathString isEqualToString:@"$value"] || - [indexPathString isEqualToString:@".value"]) { - @throw [[NSException alloc] - initWithName:INVALID_QUERY_PARAM_ERROR - reason:[NSString stringWithFormat: - @"(queryOrderedByChild:) %@ is invalid. " - @" Use queryOrderedByValue: instead.", - indexPathString] - userInfo:nil]; - } - [self validateNoPreviousOrderByCalled]; - - [FValidation validateFrom:@"queryOrderedByChild:" - validPathString:indexPathString]; - FPath *indexPath = [FPath pathWithString:indexPathString]; - if (indexPath.isEmpty) { - @throw [[NSException alloc] - initWithName:INVALID_QUERY_PARAM_ERROR - reason:[NSString - stringWithFormat:@"(queryOrderedByChild:) with an " - @"empty path is invalid. Use " - @"queryOrderedByValue: instead."] - userInfo:nil]; - } - id<FIndex> index = [[FPathIndex alloc] initWithPath:indexPath]; - - FQueryParams *params = [self.queryParams orderBy:index]; - [self validateQueryEndpointsForParams:params]; - return [[FIRDatabaseQuery alloc] initWithRepo:self.repo - path:self.path - params:params - orderByCalled:YES - priorityMethodCalled:self.priorityMethodCalled]; -} - -- (FIRDatabaseQuery *)queryOrderedByKey { - [self validateNoPreviousOrderByCalled]; - FQueryParams *params = [self.queryParams orderBy:[FKeyIndex keyIndex]]; - [self validateQueryEndpointsForParams:params]; - return [[FIRDatabaseQuery alloc] initWithRepo:self.repo - path:self.path - params:params - orderByCalled:YES - priorityMethodCalled:self.priorityMethodCalled]; -} - -- (FIRDatabaseQuery *)queryOrderedByValue { - [self validateNoPreviousOrderByCalled]; - FQueryParams *params = [self.queryParams orderBy:[FValueIndex valueIndex]]; - return [[FIRDatabaseQuery alloc] initWithRepo:self.repo - path:self.path - params:params - orderByCalled:YES - priorityMethodCalled:self.priorityMethodCalled]; -} - -- (FIRDatabaseQuery *)queryOrderedByPriority { - [self validateNoPreviousOrderByCalled]; - FQueryParams *params = - [self.queryParams orderBy:[FPriorityIndex priorityIndex]]; - return [[FIRDatabaseQuery alloc] initWithRepo:self.repo - path:self.path - params:params - orderByCalled:YES - priorityMethodCalled:self.priorityMethodCalled]; -} - -- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType - withBlock:(void (^)(FIRDataSnapshot *))block { - [FValidation validateFrom:@"observeEventType:withBlock:" - knownEventType:eventType]; - return [self observeEventType:eventType - withBlock:block - withCancelBlock:nil]; -} - -- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType - andPreviousSiblingKeyWithBlock:(fbt_void_datasnapshot_nsstring)block { - [FValidation - validateFrom:@"observeEventType:andPreviousSiblingKeyWithBlock:" - knownEventType:eventType]; - return [self observeEventType:eventType - andPreviousSiblingKeyWithBlock:block - withCancelBlock:nil]; -} - -- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType - withBlock:(fbt_void_datasnapshot)block - withCancelBlock:(fbt_void_nserror)cancelBlock { - [FValidation validateFrom:@"observeEventType:withBlock:withCancelBlock:" - knownEventType:eventType]; - - if (eventType == FIRDataEventTypeValue) { - // Handle FIRDataEventTypeValue specially because they shouldn't have - // prevName callbacks - NSUInteger handle = [[FUtilities LUIDGenerator] integerValue]; - [self observeValueEventWithHandle:handle - withBlock:block - cancelCallback:cancelBlock]; - return handle; - } else { - // Wrap up the userCallback so we can treat everything as a callback - // that has a prevName - fbt_void_datasnapshot userCallback = [block copy]; - return [self observeEventType:eventType - andPreviousSiblingKeyWithBlock:^(FIRDataSnapshot *snapshot, - NSString *prevName) { - if (userCallback != nil) { - userCallback(snapshot); - } - } - withCancelBlock:cancelBlock]; - } -} - -- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType - andPreviousSiblingKeyWithBlock:(fbt_void_datasnapshot_nsstring)block - withCancelBlock:(fbt_void_nserror)cancelBlock { - [FValidation validateFrom:@"observeEventType:" - @"andPreviousSiblingKeyWithBlock:withCancelBlock:" - knownEventType:eventType]; - - if (eventType == FIRDataEventTypeValue) { - // TODO: This gets hit by observeSingleEventOfType. Need to fix. - /* - @throw [[NSException alloc] initWithName:@"InvalidEventTypeForObserver" - reason:@"(observeEventType:andPreviousSiblingKeyWithBlock:withCancelBlock:) - Cannot use - observeEventType:andPreviousSiblingKeyWithBlock:withCancelBlock: with - FIRDataEventTypeValue. Use observeEventType:withBlock:withCancelBlock: - instead." userInfo:nil]; - */ - } - - NSUInteger handle = [[FUtilities LUIDGenerator] integerValue]; - NSDictionary *callbacks = - @{[NSNumber numberWithInteger:eventType] : [block copy]}; - [self observeChildEventWithHandle:handle - withCallbacks:callbacks - cancelCallback:cancelBlock]; - - return handle; -} - -// If we want to distinguish between value event listeners and child event -// listeners, like in the Java client, we can consider exporting this. If we do, -// add argument validation. Otherwise, arguments are validated in the -// public-facing portions of the API. Also, move the FIRDatabaseHandle logic. -- (void)observeValueEventWithHandle:(FIRDatabaseHandle)handle - withBlock:(fbt_void_datasnapshot)block - cancelCallback:(fbt_void_nserror)cancelBlock { - // Note that we don't need to copy the callbacks here, FEventRegistration - // callback properties set to copy - FValueEventRegistration *registration = - [[FValueEventRegistration alloc] initWithRepo:self.repo - handle:handle - callback:block - cancelCallback:cancelBlock]; - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - [self.repo addEventRegistration:registration forQuery:self.querySpec]; - }); -} - -// Note: as with the above method, we may wish to expose this at some point. -- (void)observeChildEventWithHandle:(FIRDatabaseHandle)handle - withCallbacks:(NSDictionary *)callbacks - cancelCallback:(fbt_void_nserror)cancelBlock { - // Note that we don't need to copy the callbacks here, FEventRegistration - // callback properties set to copy - FChildEventRegistration *registration = - [[FChildEventRegistration alloc] initWithRepo:self.repo - handle:handle - callbacks:callbacks - cancelCallback:cancelBlock]; - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - [self.repo addEventRegistration:registration forQuery:self.querySpec]; - }); -} - -- (void)removeObserverWithHandle:(FIRDatabaseHandle)handle { - FValueEventRegistration *event = - [[FValueEventRegistration alloc] initWithRepo:self.repo - handle:handle - callback:nil - cancelCallback:nil]; - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - [self.repo removeEventRegistration:event forQuery:self.querySpec]; - }); -} - -- (void)removeAllObservers { - [self removeObserverWithHandle:NSNotFound]; -} - -- (void)keepSynced:(BOOL)keepSynced { - if ([self.path.getFront isEqualToString:kDotInfoPrefix]) { - [NSException raise:NSInvalidArgumentException - format:@"Can't keep query on .info tree synced (this " - @"already is the case)."]; - } - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - [self.repo keepQuery:self.querySpec synced:keepSynced]; - }); -} - -- (void)observeSingleEventOfType:(FIRDataEventType)eventType - withBlock:(fbt_void_datasnapshot)block { - - [self observeSingleEventOfType:eventType - withBlock:block - withCancelBlock:nil]; -} - -- (void)observeSingleEventOfType:(FIRDataEventType)eventType - andPreviousSiblingKeyWithBlock:(fbt_void_datasnapshot_nsstring)block { - - [self observeSingleEventOfType:eventType - andPreviousSiblingKeyWithBlock:block - withCancelBlock:nil]; -} - -- (void)observeSingleEventOfType:(FIRDataEventType)eventType - withBlock:(fbt_void_datasnapshot)block - withCancelBlock:(fbt_void_nserror)cancelBlock { - - // XXX: user reported memory leak in method - - // "When you copy a block, any references to other blocks from within that - // block are copied if necessary—an entire tree may be copied (from the - // top). If you have block variables and you reference a block from within - // the block, that block will be copied." - // http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/bxVariables.html#//apple_ref/doc/uid/TP40007502-CH6-SW1 - // So... we don't need to do this since inside the on: we copy this block - // off the stack to the heap. - // __block fbt_void_datasnapshot userCallback = [callback copy]; - - [self observeSingleEventOfType:eventType - andPreviousSiblingKeyWithBlock:^(FIRDataSnapshot *snapshot, - NSString *prevName) { - if (block != nil) { - block(snapshot); - } - } - withCancelBlock:cancelBlock]; -} - -/** - * Attaches a listener, waits for the first event, and then removes the listener - */ -- (void)observeSingleEventOfType:(FIRDataEventType)eventType - andPreviousSiblingKeyWithBlock:(fbt_void_datasnapshot_nsstring)block - withCancelBlock:(fbt_void_nserror)cancelBlock { - - // XXX: user reported memory leak in method - - // "When you copy a block, any references to other blocks from within that - // block are copied if necessary—an entire tree may be copied (from the - // top). If you have block variables and you reference a block from within - // the block, that block will be copied." - // http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/bxVariables.html#//apple_ref/doc/uid/TP40007502-CH6-SW1 - // So... we don't need to do this since inside the on: we copy this block - // off the stack to the heap. - // __block fbt_void_datasnapshot userCallback = [callback copy]; - - __block FIRDatabaseHandle handle; - __block BOOL firstCall = YES; - - fbt_void_datasnapshot_nsstring callback = [block copy]; - fbt_void_datasnapshot_nsstring wrappedCallback = - ^(FIRDataSnapshot *snap, NSString *prevName) { - if (firstCall) { - firstCall = NO; - [self removeObserverWithHandle:handle]; - callback(snap, prevName); - } - }; - - fbt_void_nserror cancelCallback = [cancelBlock copy]; - handle = [self observeEventType:eventType - andPreviousSiblingKeyWithBlock:wrappedCallback - withCancelBlock:^(NSError *error) { - [self removeObserverWithHandle:handle]; - - if (cancelCallback) { - cancelCallback(error); - } - }]; -} - -- (NSString *)description { - return [NSString - stringWithFormat:@"(%@ %@)", self.path, self.queryParams.description]; -} - -- (FIRDatabaseReference *)ref { - return [[FIRDatabaseReference alloc] initWithRepo:self.repo path:self.path]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRMutableData.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRMutableData.m deleted file mode 100644 index 5da7fae..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRMutableData.m +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRMutableData.h" -#import "FChildrenNode.h" -#import "FIRMutableData_Private.h" -#import "FIndexedNode.h" -#import "FNamedNode.h" -#import "FSnapshotHolder.h" -#import "FSnapshotUtilities.h" -#import "FTransformedEnumerator.h" - -@interface FIRMutableData () - -- (id)initWithPrefixPath:(FPath *)path - andSnapshotHolder:(FSnapshotHolder *)snapshotHolder; - -@property(strong, nonatomic) FSnapshotHolder *data; -@property(strong, nonatomic) FPath *prefixPath; - -@end - -@implementation FIRMutableData - -@synthesize data; -@synthesize prefixPath; - -- (id)initWithNode:(id<FNode>)node { - FSnapshotHolder *holder = [[FSnapshotHolder alloc] init]; - FPath *path = [FPath empty]; - [holder updateSnapshot:path withNewSnapshot:node]; - return [self initWithPrefixPath:path andSnapshotHolder:holder]; -} - -- (id)initWithPrefixPath:(FPath *)path - andSnapshotHolder:(FSnapshotHolder *)snapshotHolder { - self = [super init]; - if (self) { - self.prefixPath = path; - self.data = snapshotHolder; - } - return self; -} - -- (FIRMutableData *)childDataByAppendingPath:(NSString *)path { - FPath *wholePath = [self.prefixPath childFromString:path]; - return [[FIRMutableData alloc] initWithPrefixPath:wholePath - andSnapshotHolder:self.data]; -} - -- (FIRMutableData *)parent { - if ([self.prefixPath isEmpty]) { - return nil; - } else { - FPath *path = [self.prefixPath parent]; - return [[FIRMutableData alloc] initWithPrefixPath:path - andSnapshotHolder:self.data]; - } -} - -- (void)setValue:(id)aValue { - id<FNode> node = [FSnapshotUtilities nodeFrom:aValue - withValidationFrom:@"setValue:"]; - [self.data updateSnapshot:self.prefixPath withNewSnapshot:node]; -} - -- (void)setPriority:(id)aPriority { - id<FNode> node = [self.data getNode:self.prefixPath]; - id<FNode> pri = [FSnapshotUtilities nodeFrom:aPriority]; - node = [node updatePriority:pri]; - [self.data updateSnapshot:self.prefixPath withNewSnapshot:node]; -} - -- (id)value { - return [[self.data getNode:self.prefixPath] val]; -} - -- (id)priority { - return [[[self.data getNode:self.prefixPath] getPriority] val]; -} - -- (BOOL)hasChildren { - id<FNode> node = [self.data getNode:self.prefixPath]; - return ![node isLeafNode] && ![(FChildrenNode *)node isEmpty]; -} - -- (BOOL)hasChildAtPath:(NSString *)path { - id<FNode> node = [self.data getNode:self.prefixPath]; - FPath *childPath = [[FPath alloc] initWith:path]; - return ![[node getChild:childPath] isEmpty]; -} - -- (NSUInteger)childrenCount { - return [[self.data getNode:self.prefixPath] numChildren]; -} - -- (NSString *)key { - return [self.prefixPath getBack]; -} - -- (id<FNode>)nodeValue { - return [self.data getNode:self.prefixPath]; -} - -- (NSEnumerator<FIRMutableData *> *)children { - FIndexedNode *indexedNode = - [FIndexedNode indexedNodeWithNode:self.nodeValue]; - return [[FTransformedEnumerator alloc] - initWithEnumerator:[indexedNode childEnumerator] - andTransform:^id(FNamedNode *node) { - FPath *childPath = [self.prefixPath childFromString:node.name]; - FIRMutableData *childData = - [[FIRMutableData alloc] initWithPrefixPath:childPath - andSnapshotHolder:self.data]; - return childData; - }]; -} - -- (BOOL)isEqualToData:(FIRMutableData *)other { - return self.data == other.data && - [[self.prefixPath description] - isEqualToString:[other.prefixPath description]]; -} - -- (NSString *)description { - if (self.key == nil) { - return [NSString - stringWithFormat:@"FIRMutableData (top-most transaction) %@ %@", - self.key, self.value]; - } else { - return [NSString - stringWithFormat:@"FIRMutableData (%@) %@", self.key, self.value]; - } -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRServerValue.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRServerValue.m deleted file mode 100644 index 928dae0..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRServerValue.m +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRServerValue.h" - -@implementation FIRServerValue - -+ (NSDictionary *)timestamp { - static NSDictionary *timestamp = nil; - if (timestamp == nil) { - timestamp = @{@".sv" : @"timestamp"}; - } - return timestamp; -} - -+ (NSDictionary *)increment:(NSNumber *)delta { - return @{@".sv" : @{@"increment" : delta}}; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRTransactionResult.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRTransactionResult.m deleted file mode 100644 index 9fec862..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/FIRTransactionResult.m +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRTransactionResult.h" -#import "FIRTransactionResult_Private.h" - -@implementation FIRTransactionResult - -@synthesize update; -@synthesize isSuccess; - -+ (FIRTransactionResult *)successWithValue:(FIRMutableData *)value { - FIRTransactionResult *result = [[FIRTransactionResult alloc] init]; - result.isSuccess = YES; - result.update = value; - return result; -} - -+ (FIRTransactionResult *)abort { - FIRTransactionResult *result = [[FIRTransactionResult alloc] init]; - result.isSuccess = NO; - result.update = nil; - return result; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDataSnapshot_Private.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDataSnapshot_Private.h deleted file mode 100644 index ac23045..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDataSnapshot_Private.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRDataSnapshot.h" -#import "FIndexedNode.h" -#import "FTypedefs_Private.h" - -@interface FIRDataSnapshot () - -// in _Private for testing purposes -@property(nonatomic, strong) FIndexedNode *node; - -- (id)initWithRef:(FIRDatabaseReference *)ref indexedNode:(FIndexedNode *)node; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabaseQuery_Private.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabaseQuery_Private.h deleted file mode 100644 index 30f19f0..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabaseQuery_Private.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRDatabaseQuery.h" -#import "FPath.h" -#import "FQueryParams.h" -#import "FRepo.h" -#import "FRepoManager.h" -#import "FTypedefs_Private.h" - -@interface FIRDatabaseQuery () - -+ (dispatch_queue_t)sharedQueue; - -- (id)initWithRepo:(FRepo *)repo path:(FPath *)path; -- (id)initWithRepo:(FRepo *)repo - path:(FPath *)path - params:(FQueryParams *)params - orderByCalled:(BOOL)orderByCalled - priorityMethodCalled:(BOOL)priorityMethodCalled; - -@property(nonatomic, strong) FRepo *repo; -@property(nonatomic, strong) FPath *path; -@property(nonatomic, strong) FQueryParams *queryParams; -@property(nonatomic) BOOL orderByCalled; -@property(nonatomic) BOOL priorityMethodCalled; - -- (FQuerySpec *)querySpec; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabaseReference_Private.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabaseReference_Private.h deleted file mode 100644 index 1d7e37c..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabaseReference_Private.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRDatabaseConfig.h" -#import "FIRDatabaseReference.h" -#import "FRepo.h" -#import "FTypedefs_Private.h" - -@interface FIRDatabaseReference () - -- (id)initWithConfig:(FIRDatabaseConfig *)config; -- (id)initWithRepo:(FRepo *)repo path:(FPath *)path; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabase_Private.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabase_Private.h deleted file mode 100644 index 0ff3e70..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRDatabase_Private.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRDatabase.h" - -@class FRepo; -@class FRepoInfo; -@class FIRDatabaseConfig; - -@interface FIRDatabase () - -@property(nonatomic, strong) FRepoInfo *repoInfo; -@property(nonatomic, strong) FIRDatabaseConfig *config; -@property(nonatomic, strong) FRepo *repo; - -- (id)initWithApp:(FIRApp *)app - repoInfo:(FRepoInfo *)info - config:(FIRDatabaseConfig *)config; - -+ (NSString *)buildVersion; -+ (FIRDatabase *)createDatabaseForTests:(FRepoInfo *)repoInfo - config:(FIRDatabaseConfig *)config; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRMutableData_Private.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRMutableData_Private.h deleted file mode 100644 index fded102..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRMutableData_Private.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRMutableData.h" -#import "FNode.h" - -@interface FIRMutableData () - -- (id)initWithNode:(id<FNode>)node; -- (id<FNode>)nodeValue; -- (BOOL)isEqualToData:(FIRMutableData *)other; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRTransactionResult_Private.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRTransactionResult_Private.h deleted file mode 100644 index bdf250a..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FIRTransactionResult_Private.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRMutableData.h" -#import "FIRTransactionResult.h" - -@interface FIRTransactionResult () - -@property(nonatomic) BOOL isSuccess; -@property(nonatomic, strong) FIRMutableData *update; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FTypedefs_Private.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FTypedefs_Private.h deleted file mode 100644 index dac55bc..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Api/Private/FTypedefs_Private.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef __FTYPEDEFS_PRIVATE__ -#define __FTYPEDEFS_PRIVATE__ - -#import <Foundation/Foundation.h> - -typedef NS_ENUM(NSInteger, FTransactionStatus) { - FTransactionInitializing, // 0 - FTransactionRun, // 1 - FTransactionSent, // 2 - FTransactionCompleted, // 3 - FTransactionSentNeedsAbort, // 4 - FTransactionNeedsAbort // 5 -}; - -@protocol FNode; -@class FPath; -@class FIRTransactionResult; -@class FIRMutableData; -@class FIRDataSnapshot; -@class FCompoundHash; - -typedef void (^fbt_void_nserror_bool_datasnapshot)(NSError *error, - BOOL committed, - FIRDataSnapshot *snapshot); -typedef FIRTransactionResult * (^fbt_transactionresult_mutabledata)( - FIRMutableData *currentData); -typedef void (^fbt_void_path_node)(FPath *, id<FNode>); -typedef void (^fbt_void_nsstring)(NSString *); -typedef BOOL (^fbt_bool_nsstring_node)(NSString *, id<FNode>); -typedef void (^fbt_void_path_node_marray)(FPath *, id<FNode>, NSMutableArray *); -typedef BOOL (^fbt_bool_void)(void); -typedef void (^fbt_void_nsstring_nsstring)(NSString *str1, NSString *str2); -typedef void (^fbt_void_nsstring_nserror)(NSString *str, NSError *error); -typedef BOOL (^fbt_bool_path)(FPath *str); -typedef void (^fbt_void_id)(id data); -typedef NSString * (^fbt_nsstring_void)(void); -typedef FCompoundHash * (^fbt_compoundhash_void)(void); -typedef NSArray * (^fbt_nsarray_nsstring_id)(NSString *status, id Data); -typedef NSArray * (^fbt_nsarray_nsstring)(NSString *status); - -// WWDC 2012 session 712 starting in page 83 for saving blocks in properties -// (use @property (strong) type name). - -#endif diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Constants/FConstants.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Constants/FConstants.h deleted file mode 100644 index ae237a6..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Constants/FConstants.h +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef Firebase_FConstants_h -#define Firebase_FConstants_h - -#import <Foundation/Foundation.h> - -#pragma mark - -#pragma mark Wire Protocol Envelope Constants - -FOUNDATION_EXPORT NSString *const kFWPRequestType; -FOUNDATION_EXPORT NSString *const kFWPRequestTypeData; -FOUNDATION_EXPORT NSString *const kFWPRequestDataPayload; -FOUNDATION_EXPORT NSString *const kFWPRequestNumber; -FOUNDATION_EXPORT NSString *const kFWPRequestPayloadBody; -FOUNDATION_EXPORT NSString *const kFWPRequestError; -FOUNDATION_EXPORT NSString *const kFWPRequestAction; -FOUNDATION_EXPORT NSString *const kFWPResponseForRNData; -FOUNDATION_EXPORT NSString *const kFWPResponseForActionStatus; -FOUNDATION_EXPORT NSString *const kFWPResponseForActionStatusOk; -FOUNDATION_EXPORT NSString *const kFWPResponseForActionStatusDataStale; -FOUNDATION_EXPORT NSString *const kFWPResponseForActionData; -FOUNDATION_EXPORT NSString *const kFWPResponseDataWarnings; - -FOUNDATION_EXPORT NSString *const kFWPAsyncServerAction; -FOUNDATION_EXPORT NSString *const kFWPAsyncServerPayloadBody; -FOUNDATION_EXPORT NSString *const kFWPAsyncServerDataUpdate; -FOUNDATION_EXPORT NSString *const kFWPAsyncServerDataMerge; -FOUNDATION_EXPORT NSString *const kFWPAsyncServerDataRangeMerge; -FOUNDATION_EXPORT NSString *const kFWPAsyncServerAuthRevoked; -FOUNDATION_EXPORT NSString *const kFWPASyncServerListenCancelled; -FOUNDATION_EXPORT NSString *const kFWPAsyncServerSecurityDebug; -FOUNDATION_EXPORT NSString - *const kFWPAsyncServerDataUpdateBodyPath; // {"a": "d", "b": {"p": "/", "d": - // "<data>""}} -FOUNDATION_EXPORT NSString *const kFWPAsyncServerDataUpdateBodyData; -FOUNDATION_EXPORT NSString *const kFWPAsyncServerDataUpdateStartPath; -FOUNDATION_EXPORT NSString *const kFWPAsyncServerDataUpdateEndPath; -FOUNDATION_EXPORT NSString *const kFWPAsyncServerDataUpdateRangeMerge; -FOUNDATION_EXPORT NSString *const kFWPAsyncServerDataUpdateBodyTag; -FOUNDATION_EXPORT NSString *const kFWPAsyncServerDataQueries; - -FOUNDATION_EXPORT NSString *const kFWPAsyncServerEnvelopeType; -FOUNDATION_EXPORT NSString *const kFWPAsyncServerEnvelopeData; -FOUNDATION_EXPORT NSString *const kFWPAsyncServerControlMessage; -FOUNDATION_EXPORT NSString *const kFWPAsyncServerControlMessageType; -FOUNDATION_EXPORT NSString *const kFWPAsyncServerControlMessageData; -FOUNDATION_EXPORT NSString *const kFWPAsyncServerDataMessage; - -FOUNDATION_EXPORT NSString *const kFWPAsyncServerHello; -FOUNDATION_EXPORT NSString *const kFWPAsyncServerHelloTimestamp; -FOUNDATION_EXPORT NSString *const kFWPAsyncServerHelloVersion; -FOUNDATION_EXPORT NSString *const kFWPAsyncServerHelloConnectedHost; -FOUNDATION_EXPORT NSString *const kFWPAsyncServerHelloSession; - -FOUNDATION_EXPORT NSString *const kFWPAsyncServerControlMessageShutdown; -FOUNDATION_EXPORT NSString *const kFWPAsyncServerControlMessageReset; - -#pragma mark - -#pragma mark Wire Protocol Payload Constants - -FOUNDATION_EXPORT NSString *const kFWPRequestActionPut; -FOUNDATION_EXPORT NSString *const kFWPRequestActionMerge; -FOUNDATION_EXPORT NSString *const kFWPRequestActionTaggedListen; -FOUNDATION_EXPORT NSString *const kFWPRequestActionTaggedUnlisten; -FOUNDATION_EXPORT NSString - *const kFWPRequestActionListen; // {"t": "d", "d": {"r": 1, "a": "l", "b": { - // "p": "/" } } } -FOUNDATION_EXPORT NSString *const kFWPRequestActionUnlisten; -FOUNDATION_EXPORT NSString *const kFWPRequestActionStats; -FOUNDATION_EXPORT NSString *const kFWPRequestActionDisconnectPut; -FOUNDATION_EXPORT NSString *const kFWPRequestActionDisconnectMerge; -FOUNDATION_EXPORT NSString *const kFWPRequestActionDisconnectCancel; -FOUNDATION_EXPORT NSString *const kFWPRequestActionAuth; -FOUNDATION_EXPORT NSString *const kFWPRequestActionUnauth; -FOUNDATION_EXPORT NSString *const kFWPRequestCredential; -FOUNDATION_EXPORT NSString *const kFWPRequestPath; -FOUNDATION_EXPORT NSString *const kFWPRequestCounters; -FOUNDATION_EXPORT NSString *const kFWPRequestQueries; -FOUNDATION_EXPORT NSString *const kFWPRequestTag; -FOUNDATION_EXPORT NSString *const kFWPRequestData; -FOUNDATION_EXPORT NSString *const kFWPRequestHash; -FOUNDATION_EXPORT NSString *const kFWPRequestCompoundHash; -FOUNDATION_EXPORT NSString *const kFWPRequestCompoundHashPaths; -FOUNDATION_EXPORT NSString *const kFWPRequestCompoundHashHashes; -FOUNDATION_EXPORT NSString *const kFWPRequestStatus; - -#pragma mark - -#pragma mark Websock Transport Constants - -FOUNDATION_EXPORT NSString *const kWireProtocolVersionParam; -FOUNDATION_EXPORT NSString *const kWebsocketProtocolVersion; -FOUNDATION_EXPORT NSString *const kWebsocketServerKillPacket; -FOUNDATION_EXPORT const int kWebsocketMaxFrameSize; -FOUNDATION_EXPORT NSUInteger const kWebsocketKeepaliveInterval; -FOUNDATION_EXPORT NSUInteger const kWebsocketConnectTimeout; - -FOUNDATION_EXPORT float const kPersistentConnReconnectMinDelay; -FOUNDATION_EXPORT float const kPersistentConnReconnectMaxDelay; -FOUNDATION_EXPORT float const kPersistentConnReconnectMultiplier; -FOUNDATION_EXPORT float const - kPersistentConnSuccessfulConnectionEstablishedDelay; - -#pragma mark - -#pragma mark Query / QueryParams constants - -FOUNDATION_EXPORT NSString *const kQueryDefault; -FOUNDATION_EXPORT NSString *const kQueryDefaultObject; -FOUNDATION_EXPORT NSString *const kViewManagerDictConstView; -FOUNDATION_EXPORT NSString *const kFQPIndexStartValue; -FOUNDATION_EXPORT NSString *const kFQPIndexStartName; -FOUNDATION_EXPORT NSString *const kFQPIndexEndValue; -FOUNDATION_EXPORT NSString *const kFQPIndexEndName; -FOUNDATION_EXPORT NSString *const kFQPLimit; -FOUNDATION_EXPORT NSString *const kFQPViewFrom; -FOUNDATION_EXPORT NSString *const kFQPViewFromLeft; -FOUNDATION_EXPORT NSString *const kFQPViewFromRight; -FOUNDATION_EXPORT NSString *const kFQPIndex; - -#pragma mark - -#pragma mark Interrupt Reasons - -FOUNDATION_EXPORT NSString *const kFInterruptReasonServerKill; -FOUNDATION_EXPORT NSString *const kFInterruptReasonWaitingForOpen; -FOUNDATION_EXPORT NSString *const kFInterruptReasonRepoInterrupt; -FOUNDATION_EXPORT NSString *const kFInterruptReasonAuthExpired; - -#pragma mark - -#pragma mark Payload constants - -FOUNDATION_EXPORT NSString *const kPayloadPriority; -FOUNDATION_EXPORT NSString *const kPayloadValue; -FOUNDATION_EXPORT NSString *const kPayloadMetadataPrefix; - -#pragma mark - -#pragma mark ServerValue constants - -FOUNDATION_EXPORT NSString *const kServerValueSubKey; -FOUNDATION_EXPORT NSString *const kServerValuePriority; - -#pragma mark - -#pragma mark.info/ constants - -FOUNDATION_EXPORT NSString *const kDotInfoPrefix; -FOUNDATION_EXPORT NSString *const kDotInfoConnected; -FOUNDATION_EXPORT NSString *const kDotInfoServerTimeOffset; - -#pragma mark - -#pragma mark ObjectiveC to JavaScript type constants - -FOUNDATION_EXPORT NSString *const kJavaScriptObject; -FOUNDATION_EXPORT NSString *const kJavaScriptString; -FOUNDATION_EXPORT NSString *const kJavaScriptBoolean; -FOUNDATION_EXPORT NSString *const kJavaScriptNumber; -FOUNDATION_EXPORT NSString *const kJavaScriptNull; -FOUNDATION_EXPORT NSString *const kJavaScriptTrue; -FOUNDATION_EXPORT NSString *const kJavaScriptFalse; - -#pragma mark - -#pragma mark Error handling constants - -FOUNDATION_EXPORT NSString *const kFErrorDomain; -FOUNDATION_EXPORT NSUInteger const kFAuthError; -FOUNDATION_EXPORT NSString *const kFErrorWriteCanceled; - -#pragma mark - -#pragma mark Validation Constants - -FOUNDATION_EXPORT NSUInteger const kFirebaseMaxObjectDepth; -FOUNDATION_EXPORT const unsigned int kFirebaseMaxLeafSize; - -#pragma mark - -#pragma mark Transaction Constants - -FOUNDATION_EXPORT NSUInteger const kFTransactionMaxRetries; -FOUNDATION_EXPORT NSString *const kFTransactionTooManyRetries; -FOUNDATION_EXPORT NSString *const kFTransactionNoData; -FOUNDATION_EXPORT NSString *const kFTransactionSet; -FOUNDATION_EXPORT NSString *const kFTransactionDisconnect; - -#endif diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Constants/FConstants.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Constants/FConstants.m deleted file mode 100644 index 2343991..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Constants/FConstants.m +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FConstants.h" - -#pragma mark - -#pragma mark Wire Protocol Envelope Constants - -NSString *const kFWPRequestType = @"t"; -NSString *const kFWPRequestTypeData = @"d"; -NSString *const kFWPRequestDataPayload = @"d"; -NSString *const kFWPRequestNumber = @"r"; -NSString *const kFWPRequestPayloadBody = @"b"; -NSString *const kFWPRequestError = @"error"; -NSString *const kFWPRequestAction = @"a"; -NSString *const kFWPResponseForRNData = @"b"; -NSString *const kFWPResponseForActionStatus = @"s"; -NSString *const kFWPResponseForActionStatusOk = @"ok"; -NSString *const kFWPResponseForActionStatusDataStale = @"datastale"; -NSString *const kFWPResponseForActionData = @"d"; -NSString *const kFWPResponseDataWarnings = @"w"; -NSString *const kFWPAsyncServerAction = @"a"; -NSString *const kFWPAsyncServerPayloadBody = @"b"; -NSString *const kFWPAsyncServerDataUpdate = @"d"; -NSString *const kFWPAsyncServerDataMerge = @"m"; -NSString *const kFWPAsyncServerDataRangeMerge = @"rm"; -NSString *const kFWPAsyncServerAuthRevoked = @"ac"; -NSString *const kFWPASyncServerListenCancelled = @"c"; -NSString *const kFWPAsyncServerSecurityDebug = @"sd"; -NSString *const kFWPAsyncServerDataUpdateBodyPath = - @"p"; // {"a": "d", "b": {"p": "/", "d": "<data>"}} -NSString *const kFWPAsyncServerDataUpdateBodyData = @"d"; -NSString *const kFWPAsyncServerDataUpdateStartPath = @"s"; -NSString *const kFWPAsyncServerDataUpdateEndPath = @"e"; -NSString *const kFWPAsyncServerDataUpdateRangeMerge = @"m"; -NSString *const kFWPAsyncServerDataUpdateBodyTag = @"t"; -NSString *const kFWPAsyncServerDataQueries = @"q"; - -NSString *const kFWPAsyncServerEnvelopeType = @"t"; -NSString *const kFWPAsyncServerEnvelopeData = @"d"; -NSString *const kFWPAsyncServerControlMessage = @"c"; -NSString *const kFWPAsyncServerControlMessageType = @"t"; -NSString *const kFWPAsyncServerControlMessageData = @"d"; -NSString *const kFWPAsyncServerDataMessage = @"d"; - -NSString *const kFWPAsyncServerHello = @"h"; -NSString *const kFWPAsyncServerHelloTimestamp = @"ts"; -NSString *const kFWPAsyncServerHelloVersion = @"v"; -NSString *const kFWPAsyncServerHelloConnectedHost = @"h"; -NSString *const kFWPAsyncServerHelloSession = @"s"; - -NSString *const kFWPAsyncServerControlMessageShutdown = @"s"; -NSString *const kFWPAsyncServerControlMessageReset = @"r"; - -#pragma mark - -#pragma mark Wire Protocol Payload Constants - -NSString *const kFWPRequestActionPut = @"p"; -NSString *const kFWPRequestActionMerge = @"m"; -NSString *const kFWPRequestActionListen = - @"l"; // {"t": "d", "d": {"r": 1, "a": "l", "b": { "p": "/" } } } -NSString *const kFWPRequestActionUnlisten = @"u"; -NSString *const kFWPRequestActionStats = @"s"; -NSString *const kFWPRequestActionTaggedListen = @"q"; -NSString *const kFWPRequestActionTaggedUnlisten = @"n"; -NSString *const kFWPRequestActionDisconnectPut = @"o"; -NSString *const kFWPRequestActionDisconnectMerge = @"om"; -NSString *const kFWPRequestActionDisconnectCancel = @"oc"; -NSString *const kFWPRequestActionAuth = @"auth"; -NSString *const kFWPRequestActionUnauth = @"unauth"; -NSString *const kFWPRequestCredential = @"cred"; -NSString *const kFWPRequestPath = @"p"; -NSString *const kFWPRequestCounters = @"c"; -NSString *const kFWPRequestQueries = @"q"; -NSString *const kFWPRequestTag = @"t"; -NSString *const kFWPRequestData = @"d"; -NSString *const kFWPRequestHash = @"h"; -NSString *const kFWPRequestCompoundHash = @"ch"; -NSString *const kFWPRequestCompoundHashPaths = @"ps"; -NSString *const kFWPRequestCompoundHashHashes = @"hs"; -NSString *const kFWPRequestStatus = @"s"; - -#pragma mark - -#pragma mark Websock Transport Constants - -NSString *const kWireProtocolVersionParam = @"v"; -NSString *const kWebsocketProtocolVersion = @"5"; -NSString *const kWebsocketServerKillPacket = @"kill"; -const int kWebsocketMaxFrameSize = 16384; -NSUInteger const kWebsocketKeepaliveInterval = 45; -NSUInteger const kWebsocketConnectTimeout = 30; - -float const kPersistentConnReconnectMinDelay = 1.0; -float const kPersistentConnReconnectMaxDelay = 30.0; -float const kPersistentConnReconnectMultiplier = 1.3f; -float const kPersistentConnSuccessfulConnectionEstablishedDelay = 30.0; - -#pragma mark - -#pragma mark Query constants - -NSString *const kQueryDefault = @"default"; -NSString *const kQueryDefaultObject = @"{}"; -NSString *const kViewManagerDictConstView = @"view"; -NSString *const kFQPIndexStartValue = @"sp"; -NSString *const kFQPIndexStartName = @"sn"; -NSString *const kFQPIndexEndValue = @"ep"; -NSString *const kFQPIndexEndName = @"en"; -NSString *const kFQPLimit = @"l"; -NSString *const kFQPViewFrom = @"vf"; -NSString *const kFQPViewFromLeft = @"l"; -NSString *const kFQPViewFromRight = @"r"; -NSString *const kFQPIndex = @"i"; - -#pragma mark - -#pragma mark Interrupt Reasons - -NSString *const kFInterruptReasonServerKill = @"server_kill"; -NSString *const kFInterruptReasonWaitingForOpen = @"waiting_for_open"; -NSString *const kFInterruptReasonRepoInterrupt = @"repo_interrupt"; - -#pragma mark - -#pragma mark Payload constants - -NSString *const kPayloadPriority = @".priority"; -NSString *const kPayloadValue = @".value"; -NSString *const kPayloadMetadataPrefix = @"."; - -#pragma mark - -#pragma mark ServerValue constants - -NSString *const kServerValueSubKey = @".sv"; -NSString *const kServerValuePriority = @"timestamp"; - -#pragma mark - -#pragma mark.info/ constants - -NSString *const kDotInfoPrefix = @".info"; -NSString *const kDotInfoConnected = @"connected"; -NSString *const kDotInfoServerTimeOffset = @"serverTimeOffset"; - -#pragma mark - -#pragma mark ObjectiveC to JavaScript type constants - -NSString *const kJavaScriptObject = @"object"; -NSString *const kJavaScriptString = @"string"; -NSString *const kJavaScriptBoolean = @"boolean"; -NSString *const kJavaScriptNumber = @"number"; -NSString *const kJavaScriptNull = @"null"; -NSString *const kJavaScriptTrue = @"true"; -NSString *const kJavaScriptFalse = @"false"; - -#pragma mark - -#pragma mark Error handling constants - -NSString *const kFErrorDomain = @"com.firebase"; -NSUInteger const kFAuthError = 1; -NSString *const kFErrorWriteCanceled = @"write_canceled"; - -#pragma mark - -#pragma mark Validation Constants - -NSUInteger const kFirebaseMaxObjectDepth = 1000; -const unsigned int kFirebaseMaxLeafSize = 1024 * 1024 * 10; // 10 MB - -#pragma mark - -#pragma mark Transaction Constants - -NSUInteger const kFTransactionMaxRetries = 25; -NSString *const kFTransactionTooManyRetries = @"maxretry"; -NSString *const kFTransactionNoData = @"nodata"; -NSString *const kFTransactionSet = @"set"; -NSString *const kFTransactionDisconnect = @"disconnect"; diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FCompoundHash.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FCompoundHash.h deleted file mode 100644 index 2453a81..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FCompoundHash.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import "FNode.h" - -@interface FCompoundHashBuilder : NSObject - -- (FPath *)currentPath; - -@end - -typedef BOOL (^FCompoundHashSplitStrategy)(FCompoundHashBuilder *builder); - -@interface FCompoundHash : NSObject - -@property(nonatomic, strong, readonly) NSArray *posts; -@property(nonatomic, strong, readonly) NSArray *hashes; - -+ (FCompoundHash *)fromNode:(id<FNode>)node; -+ (FCompoundHash *)fromNode:(id<FNode>)node - splitStrategy:(FCompoundHashSplitStrategy)strategy; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FCompoundHash.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FCompoundHash.m deleted file mode 100644 index ced79cd..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FCompoundHash.m +++ /dev/null @@ -1,259 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FCompoundHash.h" -#import "FChildrenNode.h" -#import "FLeafNode.h" -#import "FSnapshotUtilities.h" -#import "FStringUtilities.h" - -@interface FCompoundHashBuilder () - -@property(nonatomic, strong) FCompoundHashSplitStrategy splitStrategy; - -@property(nonatomic, strong) NSMutableArray *currentPaths; -@property(nonatomic, strong) NSMutableArray *currentHashes; - -@end - -@implementation FCompoundHashBuilder { - - // NOTE: We use the existence of this to know if we've started building a - // range (i.e. encountered a leaf node). - NSMutableString *optHashValueBuilder; - - // The current path as a stack. This is used in combination with - // currentPathDepth to simultaneously store the last leaf node path. The - // depth is changed when descending and ascending, at the same time the - // current key is set for the current depth. Because the keys are left - // unchanged for ascending the path will also contain the path of the last - // visited leaf node (using lastLeafDepth elements) - NSMutableArray *currentPath; - NSInteger lastLeafDepth; - NSInteger currentPathDepth; - - BOOL needsComma; -} - -- (instancetype)initWithSplitStrategy:(FCompoundHashSplitStrategy)strategy { - self = [super init]; - if (self != nil) { - self->_splitStrategy = strategy; - self->optHashValueBuilder = nil; - self->currentPath = [NSMutableArray array]; - self->lastLeafDepth = -1; - self->currentPathDepth = 0; - self->needsComma = YES; - self->_currentPaths = [NSMutableArray array]; - self->_currentHashes = [NSMutableArray array]; - } - return self; -} - -- (BOOL)isBuildingRange { - return self->optHashValueBuilder != nil; -} - -- (NSUInteger)currentHashLength { - return self->optHashValueBuilder.length; -} - -- (FPath *)currentPath { - return [self currentPathWithDepth:self->currentPathDepth]; -} - -- (FPath *)currentPathWithDepth:(NSInteger)depth { - NSArray *pieces = - [self->currentPath subarrayWithRange:NSMakeRange(0, depth)]; - return [[FPath alloc] initWithPieces:pieces andPieceNum:0]; -} - -- (void)enumerateCurrentPathToDepth:(NSInteger)depth - withBlock:(void (^)(NSString *key))block { - for (NSInteger i = 0; i < depth; i++) { - block(self->currentPath[i]); - } -} - -- (void)appendKey:(NSString *)key toString:(NSMutableString *)string { - [FSnapshotUtilities appendHashV2RepresentationForString:key - toString:string]; -} - -- (void)ensureRange { - if (![self isBuildingRange]) { - optHashValueBuilder = [NSMutableString string]; - [optHashValueBuilder appendString:@"("]; - [self - enumerateCurrentPathToDepth:self->currentPathDepth - withBlock:^(NSString *key) { - [self appendKey:key - toString:self->optHashValueBuilder]; - [self->optHashValueBuilder appendString:@":("]; - }]; - self->needsComma = NO; - } -} - -- (void)processLeaf:(FLeafNode *)leafNode { - [self ensureRange]; - - self->lastLeafDepth = self->currentPathDepth; - [FSnapshotUtilities - appendHashRepresentationForLeafNode:leafNode - toString:self->optHashValueBuilder - hashVersion:FDataHashVersionV2]; - self->needsComma = YES; - if (self.splitStrategy(self)) { - [self endRange]; - } -} - -- (void)startChild:(NSString *)key { - [self ensureRange]; - - if (self->needsComma) { - [self->optHashValueBuilder appendString:@","]; - } - [self appendKey:key toString:self->optHashValueBuilder]; - [self->optHashValueBuilder appendString:@":("]; - if (self->currentPathDepth == currentPath.count) { - [self->currentPath addObject:key]; - } else { - self->currentPath[self->currentPathDepth] = key; - } - self->currentPathDepth++; - self->needsComma = NO; -} - -- (void)endChild { - self->currentPathDepth--; - if ([self isBuildingRange]) { - [self->optHashValueBuilder appendString:@")"]; - } - self->needsComma = YES; -} - -- (void)finishHashing { - NSAssert(self->currentPathDepth == 0, - @"Can't finish hashing in the middle of processing a child"); - if ([self isBuildingRange]) { - [self endRange]; - } - - // Always close with the empty hash for the remaining range to allow simple - // appending - [self.currentHashes addObject:@""]; -} - -- (void)endRange { - NSAssert([self isBuildingRange], - @"Can't end range without starting a range!"); - // Add closing parenthesis for current depth - for (NSUInteger i = 0; i < currentPathDepth; i++) { - [self->optHashValueBuilder appendString:@")"]; - } - [self->optHashValueBuilder appendString:@")"]; - - FPath *lastLeafPath = [self currentPathWithDepth:self->lastLeafDepth]; - NSString *hash = - [FStringUtilities base64EncodedSha1:self->optHashValueBuilder]; - [self.currentHashes addObject:hash]; - [self.currentPaths addObject:lastLeafPath]; - - self->optHashValueBuilder = nil; -} - -@end - -@interface FCompoundHash () - -@property(nonatomic, strong, readwrite) NSArray *posts; -@property(nonatomic, strong, readwrite) NSArray *hashes; - -@end - -@implementation FCompoundHash - -- (id)initWithPosts:(NSArray *)posts hashes:(NSArray *)hashes { - self = [super init]; - if (self != nil) { - if (posts.count != hashes.count - 1) { - [NSException raise:NSInvalidArgumentException - format:@"Number of posts need to be n-1 for n hashes " - @"in FCompoundHash"]; - } - self.posts = posts; - self.hashes = hashes; - } - return self; -} - -+ (FCompoundHashSplitStrategy)simpleSizeSplitStrategyForNode:(id<FNode>)node { - NSUInteger estimatedSize = - [FSnapshotUtilities estimateSerializedNodeSize:node]; - - // Splits for - // 1k -> 512 (2 parts) - // 5k -> 715 (7 parts) - // 100k -> 3.2k (32 parts) - // 500k -> 7k (71 parts) - // 5M -> 23k (228 parts) - NSUInteger splitThreshold = MAX(512, (NSUInteger)sqrt(estimatedSize * 100)); - - return ^BOOL(FCompoundHashBuilder *builder) { - // Never split on priorities - return [builder currentHashLength] > splitThreshold && - ![[[builder currentPath] getBack] isEqualToString:@".priority"]; - }; -} - -+ (FCompoundHash *)fromNode:(id<FNode>)node { - return [FCompoundHash - fromNode:node - splitStrategy:[FCompoundHash simpleSizeSplitStrategyForNode:node]]; -} - -+ (FCompoundHash *)fromNode:(id<FNode>)node - splitStrategy:(FCompoundHashSplitStrategy)strategy { - if ([node isEmpty]) { - return [[FCompoundHash alloc] initWithPosts:@[] hashes:@[ @"" ]]; - } else { - FCompoundHashBuilder *builder = - [[FCompoundHashBuilder alloc] initWithSplitStrategy:strategy]; - [FCompoundHash processNode:node builder:builder]; - [builder finishHashing]; - return [[FCompoundHash alloc] initWithPosts:builder.currentPaths - hashes:builder.currentHashes]; - } -} - -+ (void)processNode:(id<FNode>)node builder:(FCompoundHashBuilder *)builder { - if ([node isLeafNode]) { - [builder processLeaf:node]; - } else { - NSAssert(![node isEmpty], @"Can't calculate hash on empty node!"); - FChildrenNode *childrenNode = (FChildrenNode *)node; - [childrenNode enumerateChildrenAndPriorityUsingBlock:^( - NSString *key, id<FNode> node, BOOL *stop) { - [builder startChild:key]; - [self processNode:node builder:builder]; - [builder endChild]; - }]; - } -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FListenProvider.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FListenProvider.h deleted file mode 100644 index 8efd803..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FListenProvider.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTypedefs_Private.h" - -@class FQuerySpec; -@protocol FSyncTreeHash; - -typedef NSArray * (^fbt_startListeningBlock)(FQuerySpec *query, NSNumber *tagId, - id<FSyncTreeHash> hash, - fbt_nsarray_nsstring onComplete); -typedef void (^fbt_stopListeningBlock)(FQuerySpec *query, NSNumber *tagId); - -@interface FListenProvider : NSObject - -@property(nonatomic, copy) fbt_startListeningBlock startListening; -@property(nonatomic, copy) fbt_stopListeningBlock stopListening; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FListenProvider.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FListenProvider.m deleted file mode 100644 index 27da015..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FListenProvider.m +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FListenProvider.h" -#import "FIRDatabaseQuery.h" - -@implementation FListenProvider - -@synthesize startListening; -@synthesize stopListening; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FPersistentConnection.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FPersistentConnection.h deleted file mode 100644 index 81836fd..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FPersistentConnection.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FConnection.h" -#import "FRepoInfo.h" -#import "FTypedefs.h" -#import "FTypedefs_Private.h" -#import <Foundation/Foundation.h> - -@protocol FPersistentConnectionDelegate; -@protocol FSyncTreeHash; -@class FQuerySpec; -@class FIRDatabaseConfig; - -@interface FPersistentConnection : NSObject <FConnectionDelegate> - -@property(nonatomic, weak) id<FPersistentConnectionDelegate> delegate; -@property(nonatomic) BOOL pauseWrites; - -- (id)initWithRepoInfo:(FRepoInfo *)repoInfo - dispatchQueue:(dispatch_queue_t)queue - config:(FIRDatabaseConfig *)config; - -- (void)open; - -- (void)putData:(id)data - forPath:(NSString *)pathString - withHash:(NSString *)hash - withCallback:(fbt_void_nsstring_nsstring)onComplete; -- (void)mergeData:(id)data - forPath:(NSString *)pathString - withCallback:(fbt_void_nsstring_nsstring)onComplete; - -- (void)listen:(FQuerySpec *)query - tagId:(NSNumber *)tagId - hash:(id<FSyncTreeHash>)hash - onComplete:(fbt_void_nsstring)onComplete; - -- (void)unlisten:(FQuerySpec *)query tagId:(NSNumber *)tagId; -- (void)refreshAuthToken:(NSString *)token; -- (void)onDisconnectPutData:(id)data - forPath:(FPath *)path - withCallback:(fbt_void_nsstring_nsstring)callback; -- (void)onDisconnectMergeData:(id)data - forPath:(FPath *)path - withCallback:(fbt_void_nsstring_nsstring)callback; -- (void)onDisconnectCancelPath:(FPath *)path - withCallback:(fbt_void_nsstring_nsstring)callback; -- (void)ackPuts; -- (void)purgeOutstandingWrites; - -- (void)interruptForReason:(NSString *)reason; -- (void)resumeForReason:(NSString *)reason; -- (BOOL)isInterruptedForReason:(NSString *)reason; - -// FConnection delegate methods -- (void)onReady:(FConnection *)fconnection - atTime:(NSNumber *)timestamp - sessionID:(NSString *)sessionID; -- (void)onDataMessage:(FConnection *)fconnection - withMessage:(NSDictionary *)message; -- (void)onDisconnect:(FConnection *)fconnection - withReason:(FDisconnectReason)reason; -- (void)onKill:(FConnection *)fconnection withReason:(NSString *)reason; - -// Testing methods -- (NSDictionary *)dumpListens; - -@end - -@protocol FPersistentConnectionDelegate <NSObject> - -- (void)onDataUpdate:(FPersistentConnection *)fpconnection - forPath:(NSString *)pathString - message:(id)message - isMerge:(BOOL)isMerge - tagId:(NSNumber *)tagId; -- (void)onRangeMerge:(NSArray *)ranges - forPath:(NSString *)path - tagId:(NSNumber *)tag; -- (void)onConnect:(FPersistentConnection *)fpconnection; -- (void)onDisconnect:(FPersistentConnection *)fpconnection; -- (void)onServerInfoUpdate:(FPersistentConnection *)fpconnection - updates:(NSDictionary *)updates; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FPersistentConnection.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FPersistentConnection.m deleted file mode 100644 index 69f52c1..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FPersistentConnection.m +++ /dev/null @@ -1,1141 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#import <Foundation/Foundation.h> - -#import "FAtomicNumber.h" -#import "FAuthTokenProvider.h" -#import "FCompoundHash.h" -#import "FConstants.h" -#import "FIRDatabaseConfig.h" -#import "FIRDatabaseConfig_Private.h" -#import "FIRDatabaseReference.h" -#import "FIRRetryHelper.h" -#import "FIndex.h" -#import "FPersistentConnection.h" -#import "FQueryParams.h" -#import "FQuerySpec.h" -#import "FRangeMerge.h" -#import "FSnapshotUtilities.h" -#import "FSyncTree.h" -#import "FTupleCallbackStatus.h" -#import "FTupleOnDisconnect.h" -#import "FUtilities.h" -#import <FirebaseCore/FIRLogger.h> -#import <SystemConfiguration/SystemConfiguration.h> -#import <dlfcn.h> -#import <netinet/in.h> - -@interface FOutstandingQuery : NSObject - -@property(nonatomic, strong) FQuerySpec *query; -@property(nonatomic, strong) NSNumber *tagId; -@property(nonatomic, strong) id<FSyncTreeHash> syncTreeHash; -@property(nonatomic, copy) fbt_void_nsstring onComplete; - -@end - -@implementation FOutstandingQuery - -@end - -@interface FOutstandingPut : NSObject - -@property(nonatomic, strong) NSString *action; -@property(nonatomic, strong) NSDictionary *request; -@property(nonatomic, copy) fbt_void_nsstring_nsstring onCompleteBlock; -@property(nonatomic) BOOL sent; - -@end - -@implementation FOutstandingPut - -@end - -typedef enum { - ConnectionStateDisconnected, - ConnectionStateGettingToken, - ConnectionStateConnecting, - ConnectionStateAuthenticating, - ConnectionStateConnected -} ConnectionState; - -@interface FPersistentConnection () { - ConnectionState connectionState; - BOOL firstConnection; - NSTimeInterval reconnectDelay; - NSTimeInterval lastConnectionAttemptTime; - NSTimeInterval lastConnectionEstablishedTime; - SCNetworkReachabilityRef reachability; -} - -- (int)getNextRequestNumber; -- (void)onDataPushWithAction:(NSString *)action andBody:(NSDictionary *)body; -- (void)handleTimestamp:(NSNumber *)timestamp; -- (void)sendOnDisconnectAction:(NSString *)action - forPath:(NSString *)pathString - withData:(id)data - andCallback:(fbt_void_nsstring_nsstring)callback; - -@property(nonatomic, strong) FConnection *realtime; -@property(nonatomic, strong) NSMutableDictionary *listens; -@property(nonatomic, strong) NSMutableDictionary *outstandingPuts; -@property(nonatomic, strong) NSMutableArray *onDisconnectQueue; -@property(nonatomic, strong) FRepoInfo *repoInfo; -@property(nonatomic, strong) FAtomicNumber *putCounter; -@property(nonatomic, strong) FAtomicNumber *requestNumber; -@property(nonatomic, strong) NSMutableDictionary *requestCBHash; -@property(nonatomic, strong) FIRDatabaseConfig *config; -@property(nonatomic) NSUInteger unackedListensCount; -@property(nonatomic, strong) NSMutableArray *putsToAck; -@property(nonatomic, strong) dispatch_queue_t dispatchQueue; -@property(nonatomic, strong) NSString *lastSessionID; -@property(nonatomic, strong) NSMutableSet *interruptReasons; -@property(nonatomic, strong) FIRRetryHelper *retryHelper; -@property(nonatomic, strong) id<FAuthTokenProvider> authTokenProvider; -@property(nonatomic, strong) NSString *authToken; -@property(nonatomic) BOOL forceAuthTokenRefresh; -@property(nonatomic) NSUInteger currentFetchTokenAttempt; - -@end - -@implementation FPersistentConnection - -- (id)initWithRepoInfo:(FRepoInfo *)repoInfo - dispatchQueue:(dispatch_queue_t)dispatchQueue - config:(FIRDatabaseConfig *)config { - self = [super init]; - if (self) { - self->_config = config; - self->_repoInfo = repoInfo; - self->_dispatchQueue = dispatchQueue; - self->_authTokenProvider = config.authTokenProvider; - NSAssert(self->_authTokenProvider != nil, - @"Expected auth token provider"); - self.interruptReasons = [NSMutableSet set]; - - self.listens = [[NSMutableDictionary alloc] init]; - self.outstandingPuts = [[NSMutableDictionary alloc] init]; - self.onDisconnectQueue = [[NSMutableArray alloc] init]; - self.putCounter = [[FAtomicNumber alloc] init]; - self.requestNumber = [[FAtomicNumber alloc] init]; - self.requestCBHash = [[NSMutableDictionary alloc] init]; - self.unackedListensCount = 0; - self.putsToAck = [NSMutableArray array]; - connectionState = ConnectionStateDisconnected; - firstConnection = YES; - reconnectDelay = kPersistentConnReconnectMinDelay; - - self->_retryHelper = [[FIRRetryHelper alloc] - initWithDispatchQueue:dispatchQueue - minRetryDelayAfterFailure:kPersistentConnReconnectMinDelay - maxRetryDelay:kPersistentConnReconnectMaxDelay - retryExponent:kPersistentConnReconnectMultiplier - jitterFactor:0.7]; - - [self setupNotifications]; - // Make sure we don't actually connect until open is called - [self interruptForReason:kFInterruptReasonWaitingForOpen]; - } - // nb: The reason establishConnection isn't called here like the JS version - // is because callers need to set the delegate first. The ctor can be - // modified to accept the delegate but that deviates from normal ios - // conventions. After the delegate has been set, the caller is responsible - // for calling establishConnection: - return self; -} - -- (void)dealloc { - if (reachability) { - // Unschedule the notifications - SCNetworkReachabilitySetDispatchQueue(reachability, NULL); - CFRelease(reachability); - } -} - -#pragma mark - -#pragma mark Public methods - -- (void)open { - [self resumeForReason:kFInterruptReasonWaitingForOpen]; -} - -/** - * Note that the listens dictionary has a type of Map[String (pathString), - * Map[FQueryParams, FOutstandingQuery]] - * - * This means, for each path we care about, there are sets of queryParams that - * correspond to an FOutstandingQuery object. There can be multiple sets at a - * path since we overlap listens for a short time while adding or removing a - * query from a location in the tree. - */ -- (void)listen:(FQuerySpec *)query - tagId:(NSNumber *)tagId - hash:(id<FSyncTreeHash>)hash - onComplete:(fbt_void_nsstring)onComplete { - FFLog(@"I-RDB034001", @"Listen called for %@", query); - - NSAssert(self.listens[query] == nil, - @"listen() called twice for the same query"); - NSAssert(query.isDefault || !query.loadsAllData, - @"listen called for non-default but complete query"); - FOutstandingQuery *outstanding = [[FOutstandingQuery alloc] init]; - outstanding.query = query; - outstanding.tagId = tagId; - outstanding.syncTreeHash = hash; - outstanding.onComplete = onComplete; - [self.listens setObject:outstanding forKey:query]; - if ([self connected]) { - [self sendListen:outstanding]; - } -} - -- (void)putData:(id)data - forPath:(NSString *)pathString - withHash:(NSString *)hash - withCallback:(fbt_void_nsstring_nsstring)onComplete { - [self putInternal:data - forAction:kFWPRequestActionPut - forPath:pathString - withHash:hash - withCallback:onComplete]; -} - -- (void)mergeData:(id)data - forPath:(NSString *)pathString - withCallback:(fbt_void_nsstring_nsstring)onComplete { - [self putInternal:data - forAction:kFWPRequestActionMerge - forPath:pathString - withHash:nil - withCallback:onComplete]; -} - -- (void)onDisconnectPutData:(id)data - forPath:(FPath *)path - withCallback:(fbt_void_nsstring_nsstring)callback { - if ([self canSendWrites]) { - [self sendOnDisconnectAction:kFWPRequestActionDisconnectPut - forPath:[path description] - withData:data - andCallback:callback]; - } else { - FTupleOnDisconnect *tuple = [[FTupleOnDisconnect alloc] init]; - tuple.pathString = [path description]; - tuple.action = kFWPRequestActionDisconnectPut; - tuple.data = data; - tuple.onComplete = callback; - [self.onDisconnectQueue addObject:tuple]; - } -} - -- (void)onDisconnectMergeData:(id)data - forPath:(FPath *)path - withCallback:(fbt_void_nsstring_nsstring)callback { - if ([self canSendWrites]) { - [self sendOnDisconnectAction:kFWPRequestActionDisconnectMerge - forPath:[path description] - withData:data - andCallback:callback]; - } else { - FTupleOnDisconnect *tuple = [[FTupleOnDisconnect alloc] init]; - tuple.pathString = [path description]; - tuple.action = kFWPRequestActionDisconnectMerge; - tuple.data = data; - tuple.onComplete = callback; - [self.onDisconnectQueue addObject:tuple]; - } -} - -- (void)onDisconnectCancelPath:(FPath *)path - withCallback:(fbt_void_nsstring_nsstring)callback { - if ([self canSendWrites]) { - [self sendOnDisconnectAction:kFWPRequestActionDisconnectCancel - forPath:[path description] - withData:[NSNull null] - andCallback:callback]; - } else { - FTupleOnDisconnect *tuple = [[FTupleOnDisconnect alloc] init]; - tuple.pathString = [path description]; - tuple.action = kFWPRequestActionDisconnectCancel; - tuple.data = [NSNull null]; - tuple.onComplete = callback; - [self.onDisconnectQueue addObject:tuple]; - } -} - -- (void)unlisten:(FQuerySpec *)query tagId:(NSNumber *)tagId { - FPath *path = query.path; - FFLog(@"I-RDB034002", @"Unlistening for %@", query); - - NSArray *outstanding = [self removeListen:query]; - if (outstanding.count > 0 && [self connected]) { - [self sendUnlisten:path queryParams:query.params tagId:tagId]; - } -} - -- (void)refreshAuthToken:(NSString *)token { - self.authToken = token; - if ([self connected]) { - if (token != nil) { - [self sendAuthAndRestoreStateAfterComplete:NO]; - } else { - [self sendUnauth]; - } - } -} - -#pragma mark - -#pragma mark Connection status - -- (BOOL)connected { - return self->connectionState == ConnectionStateAuthenticating || - self->connectionState == ConnectionStateConnected; -} - -- (BOOL)canSendWrites { - return self->connectionState == ConnectionStateConnected; -} - -#pragma mark - -#pragma mark FConnection delegate methods - -- (void)onReady:(FConnection *)fconnection - atTime:(NSNumber *)timestamp - sessionID:(NSString *)sessionID { - FFLog(@"I-RDB034003", @"On ready"); - lastConnectionEstablishedTime = [[NSDate date] timeIntervalSince1970]; - [self handleTimestamp:timestamp]; - - if (firstConnection) { - [self sendConnectStats]; - } - - [self restoreAuth]; - firstConnection = NO; - self.lastSessionID = sessionID; - dispatch_async(self.dispatchQueue, ^{ - [self.delegate onConnect:self]; - }); -} - -- (void)onDataMessage:(FConnection *)fconnection - withMessage:(NSDictionary *)message { - if (message[kFWPRequestNumber] != nil) { - // this is a response to a request we sent - NSNumber *rn = [NSNumber - numberWithInt:[[message objectForKey:kFWPRequestNumber] intValue]]; - if ([self.requestCBHash objectForKey:rn]) { - void (^callback)(NSDictionary *) = - [self.requestCBHash objectForKey:rn]; - [self.requestCBHash removeObjectForKey:rn]; - - if (callback) { - // dispatch_async(self.dispatchQueue, ^{ - callback([message objectForKey:kFWPResponseForRNData]); - //}); - } - } - } else if (message[kFWPRequestError] != nil) { - NSString *error = [message objectForKey:kFWPRequestError]; - @throw [[NSException alloc] initWithName:@"FirebaseDatabaseServerError" - reason:error - userInfo:nil]; - } else if (message[kFWPAsyncServerAction] != nil) { - // this is a server push of some sort - NSString *action = [message objectForKey:kFWPAsyncServerAction]; - NSDictionary *body = [message objectForKey:kFWPAsyncServerPayloadBody]; - [self onDataPushWithAction:action andBody:body]; - } -} - -- (void)onDisconnect:(FConnection *)fconnection - withReason:(FDisconnectReason)reason { - FFLog(@"I-RDB034004", @"Got on disconnect due to %s", - (reason == DISCONNECT_REASON_SERVER_RESET) ? "server_reset" - : "other"); - connectionState = ConnectionStateDisconnected; - // Drop the realtime connection - self.realtime = nil; - [self cancelSentTransactions]; - [self.requestCBHash removeAllObjects]; - self.unackedListensCount = 0; - if ([self shouldReconnect]) { - NSTimeInterval timeSinceLastConnectSucceeded = - [[NSDate date] timeIntervalSince1970] - - lastConnectionEstablishedTime; - BOOL lastConnectionWasSuccessful; - if (lastConnectionEstablishedTime > 0) { - lastConnectionWasSuccessful = - timeSinceLastConnectSucceeded > - kPersistentConnSuccessfulConnectionEstablishedDelay; - } else { - lastConnectionWasSuccessful = NO; - } - - if (reason == DISCONNECT_REASON_SERVER_RESET || - lastConnectionWasSuccessful) { - [self.retryHelper signalSuccess]; - } - [self tryScheduleReconnect]; - } - lastConnectionEstablishedTime = 0; - [self.delegate onDisconnect:self]; -} - -- (void)onKill:(FConnection *)fconnection withReason:(NSString *)reason { - FFWarn(@"I-RDB034005", - @"Firebase Database connection was forcefully killed by the server. " - @" Will not attempt reconnect. Reason: %@", - reason); - [self interruptForReason:kFInterruptReasonServerKill]; -} - -#pragma mark - -#pragma mark Connection handling methods - -- (void)interruptForReason:(NSString *)reason { - FFLog(@"I-RDB034006", @"Connection interrupted for: %@", reason); - - [self.interruptReasons addObject:reason]; - if (self.realtime) { - // Will call onDisconnect and set the connection state to Disconnected - [self.realtime close]; - self.realtime = nil; - } else { - [self.retryHelper cancel]; - self->connectionState = ConnectionStateDisconnected; - } - // Reset timeouts - [self.retryHelper signalSuccess]; -} - -- (void)resumeForReason:(NSString *)reason { - FFLog(@"I-RDB034007", @"Connection no longer interrupted for: %@", reason); - [self.interruptReasons removeObject:reason]; - - if ([self shouldReconnect] && - connectionState == ConnectionStateDisconnected) { - [self tryScheduleReconnect]; - } -} - -- (BOOL)shouldReconnect { - return self.interruptReasons.count == 0; -} - -- (BOOL)isInterruptedForReason:(NSString *)reason { - return [self.interruptReasons containsObject:reason]; -} - -#pragma mark - -#pragma mark Private methods - -- (void)tryScheduleReconnect { - if ([self shouldReconnect]) { - NSAssert(self->connectionState == ConnectionStateDisconnected, - @"Not in disconnected state: %d", self->connectionState); - BOOL forceRefresh = self.forceAuthTokenRefresh; - self.forceAuthTokenRefresh = NO; - FFLog(@"I-RDB034008", @"Scheduling connection attempt"); - [self.retryHelper retry:^{ - FFLog(@"I-RDB034009", @"Trying to fetch auth token"); - NSAssert(self->connectionState == ConnectionStateDisconnected, - @"Not in disconnected state: %d", self->connectionState); - self->connectionState = ConnectionStateGettingToken; - self.currentFetchTokenAttempt++; - NSUInteger thisFetchTokenAttempt = self.currentFetchTokenAttempt; - [self.authTokenProvider - fetchTokenForcingRefresh:forceRefresh - withCallback:^(NSString *token, NSError *error) { - if (thisFetchTokenAttempt == - self.currentFetchTokenAttempt) { - if (error != nil) { - self->connectionState = - ConnectionStateDisconnected; - FFLog(@"I-RDB034010", - @"Error fetching token: %@", error); - [self tryScheduleReconnect]; - } else { - // Someone could have interrupted us while - // fetching the token, marking the - // connection as Disconnected - if (self->connectionState == - ConnectionStateGettingToken) { - FFLog(@"I-RDB034011", - @"Successfully fetched token, " - @"opening connection"); - [self openNetworkConnectionWithToken: - token]; - } else { - NSAssert( - self->connectionState == - ConnectionStateDisconnected, - @"Expected connection state " - @"disconnected, but got %d", - self->connectionState); - FFLog(@"I-RDB034012", - @"Not opening connection after " - @"token refresh, because " - @"connection was set to " - @"disconnected."); - } - } - } else { - FFLog(@"I-RDB034013", - @"Ignoring fetch token result, because " - @"this was not the latest attempt."); - } - }]; - }]; - } -} - -- (void)openNetworkConnectionWithToken:(NSString *)token { - NSAssert(self->connectionState == ConnectionStateGettingToken, - @"Trying to open network connection while in wrong state: %d", - self->connectionState); - self.authToken = token; - self->connectionState = ConnectionStateConnecting; - self.realtime = [[FConnection alloc] initWith:self.repoInfo - andDispatchQueue:self.dispatchQueue - lastSessionID:self.lastSessionID]; - self.realtime.delegate = self; - [self.realtime open]; -} - -static void reachabilityCallback(SCNetworkReachabilityRef ref, - SCNetworkReachabilityFlags flags, void *info) { - if (flags & kSCNetworkReachabilityFlagsReachable) { - FFLog(@"I-RDB034014", - @"Network became reachable. Trigger a connection attempt"); - FPersistentConnection *self = (__bridge FPersistentConnection *)info; - // Reset reconnect delay - [self.retryHelper signalSuccess]; - if (self->connectionState == ConnectionStateDisconnected) { - [self tryScheduleReconnect]; - } - } else { - FFLog(@"I-RDB034015", @"Network is not reachable"); - } -} - -- (void)enteringForeground { - dispatch_async(self.dispatchQueue, ^{ - // Reset reconnect delay - [self.retryHelper signalSuccess]; - if (self->connectionState == ConnectionStateDisconnected) { - [self tryScheduleReconnect]; - } - }); -} - -- (void)setupNotifications { - - NSString *const *foregroundConstant = (NSString *const *)dlsym( - RTLD_DEFAULT, "UIApplicationWillEnterForegroundNotification"); - if (foregroundConstant) { - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(enteringForeground) - name:*foregroundConstant - object:nil]; - } - // An empty address is interpreted a generic internet access - struct sockaddr_in zeroAddress; - bzero(&zeroAddress, sizeof(zeroAddress)); - zeroAddress.sin_len = sizeof(zeroAddress); - zeroAddress.sin_family = AF_INET; - reachability = SCNetworkReachabilityCreateWithAddress( - kCFAllocatorDefault, (const struct sockaddr *)&zeroAddress); - SCNetworkReachabilityContext ctx = {0, (__bridge void *)(self), NULL, NULL, - NULL}; - if (SCNetworkReachabilitySetCallback(reachability, reachabilityCallback, - &ctx)) { - SCNetworkReachabilitySetDispatchQueue(reachability, self.dispatchQueue); - } else { - FFLog(@"I-RDB034016", - @"Failed to set up network reachability monitoring"); - CFRelease(reachability); - reachability = NULL; - } -} - -- (void)sendAuthAndRestoreStateAfterComplete:(BOOL)restoreStateAfterComplete { - NSAssert([self connected], @"Must be connected to send auth"); - NSAssert(self.authToken != nil, - @"Can't send auth if there is no credential"); - - NSDictionary *requestData = @{kFWPRequestCredential : self.authToken}; - [self sendAction:kFWPRequestActionAuth - body:requestData - sensitive:YES - callback:^(NSDictionary *data) { - self->connectionState = ConnectionStateConnected; - NSString *status = - [data objectForKey:kFWPResponseForActionStatus]; - id responseData = [data objectForKey:kFWPResponseForActionData]; - if (responseData == nil) { - responseData = @"error"; - } - - BOOL statusOk = - [status isEqualToString:kFWPResponseForActionStatusOk]; - if (statusOk) { - if (restoreStateAfterComplete) { - [self restoreState]; - } - } else { - self.authToken = nil; - self.forceAuthTokenRefresh = YES; - if ([status isEqualToString:@"expired_token"]) { - FFLog(@"I-RDB034017", @"Authentication failed: %@ (%@)", - status, responseData); - } else { - FFWarn(@"I-RDB034018", @"Authentication failed: %@ (%@)", - status, responseData); - } - [self.realtime close]; - } - }]; -} - -- (void)sendUnauth { - [self sendAction:kFWPRequestActionUnauth - body:@{} - sensitive:NO - callback:nil]; -} - -- (void)onAuthRevokedWithStatus:(NSString *)status - andReason:(NSString *)reason { - // This might be for an earlier token than we just recently sent. But since - // we need to close the connection anyways, we can set it to null here and - // we will refresh the token later on reconnect - if ([status isEqualToString:@"expired_token"]) { - FFLog(@"I-RDB034019", @"Auth token revoked: %@ (%@)", status, reason); - } else { - FFWarn(@"I-RDB034020", @"Auth token revoked: %@ (%@)", status, reason); - } - self.authToken = nil; - self.forceAuthTokenRefresh = YES; - // Try reconnecting on auth revocation - [self.realtime close]; -} - -- (void)onListenRevoked:(FPath *)path { - NSArray *queries = [self removeAllListensAtPath:path]; - for (FOutstandingQuery *query in queries) { - query.onComplete(@"permission_denied"); - } -} - -- (void)sendOnDisconnectAction:(NSString *)action - forPath:(NSString *)pathString - withData:(id)data - andCallback:(fbt_void_nsstring_nsstring)callback { - - NSDictionary *request = - @{kFWPRequestPath : pathString, kFWPRequestData : data}; - FFLog(@"I-RDB034021", @"onDisconnect %@: %@", action, request); - - [self sendAction:action - body:request - sensitive:NO - callback:^(NSDictionary *data) { - NSString *status = - [data objectForKey:kFWPResponseForActionStatus]; - NSString *errorReason = - [data objectForKey:kFWPResponseForActionData]; - callback(status, errorReason); - }]; -} - -- (void)sendPut:(NSNumber *)index { - NSAssert([self canSendWrites], - @"sendPut called when not able to send writes"); - FOutstandingPut *put = self.outstandingPuts[index]; - assert(put != nil); - fbt_void_nsstring_nsstring onComplete = put.onCompleteBlock; - - // Do not async this block; copying the block insinde sendAction: doesn't - // happen in time (or something) so coredumps - put.sent = YES; - [self sendAction:put.action - body:put.request - sensitive:NO - callback:^(NSDictionary *data) { - FOutstandingPut *currentPut = self.outstandingPuts[index]; - if (currentPut == put) { - [self.outstandingPuts removeObjectForKey:index]; - - if (onComplete != nil) { - NSString *status = - [data objectForKey:kFWPResponseForActionStatus]; - NSString *errorReason = - [data objectForKey:kFWPResponseForActionData]; - if (self.unackedListensCount == 0) { - onComplete(status, errorReason); - } else { - FTupleCallbackStatus *putToAck = - [[FTupleCallbackStatus alloc] init]; - putToAck.block = onComplete; - putToAck.status = status; - putToAck.errorReason = errorReason; - [self.putsToAck addObject:putToAck]; - } - } - } else { - FFLog(@"I-RDB034022", - @"Ignoring on complete for put %@ because it was " - @"already removed", - index); - } - }]; -} - -- (void)sendUnlisten:(FPath *)path - queryParams:(FQueryParams *)queryParams - tagId:(NSNumber *)tagId { - FFLog(@"I-RDB034023", @"Unlisten on %@ for %@", path, queryParams); - - NSMutableDictionary *request = [NSMutableDictionary - dictionaryWithObjectsAndKeys:[path toString], kFWPRequestPath, nil]; - if (tagId != nil) { - [request setObject:queryParams.wireProtocolParams - forKey:kFWPRequestQueries]; - [request setObject:tagId forKey:kFWPRequestTag]; - } - - [self sendAction:kFWPRequestActionTaggedUnlisten - body:request - sensitive:NO - callback:nil]; -} - -- (void)putInternal:(id)data - forAction:(NSString *)action - forPath:(NSString *)pathString - withHash:(NSString *)hash - withCallback:(fbt_void_nsstring_nsstring)onComplete { - - NSMutableDictionary *request = [NSMutableDictionary - dictionaryWithObjectsAndKeys:pathString, kFWPRequestPath, data, - kFWPRequestData, nil]; - if (hash) { - [request setObject:hash forKey:kFWPRequestHash]; - } - - FOutstandingPut *put = [[FOutstandingPut alloc] init]; - put.action = action; - put.request = request; - put.onCompleteBlock = onComplete; - put.sent = NO; - - NSNumber *index = [self.putCounter getAndIncrement]; - self.outstandingPuts[index] = put; - - if ([self canSendWrites]) { - FFLog(@"I-RDB034024", @"Was connected, and added as index: %@", index); - [self sendPut:index]; - } else { - FFLog(@"I-RDB034025", - @"Wasn't connected or writes paused, so added to outstanding " - @"puts only. Path: %@", - pathString); - } -} - -- (void)sendListen:(FOutstandingQuery *)listenSpec { - FQuerySpec *query = listenSpec.query; - FFLog(@"I-RDB034026", @"Listen for %@", query); - NSMutableDictionary *request = - [NSMutableDictionary dictionaryWithObject:[query.path toString] - forKey:kFWPRequestPath]; - - // Only bother to send query if it's non-default - if (listenSpec.tagId != nil) { - [request setObject:[query.params wireProtocolParams] - forKey:kFWPRequestQueries]; - [request setObject:listenSpec.tagId forKey:kFWPRequestTag]; - } - - [request setObject:[listenSpec.syncTreeHash simpleHash] - forKey:kFWPRequestHash]; - if ([listenSpec.syncTreeHash includeCompoundHash]) { - FCompoundHash *compoundHash = [listenSpec.syncTreeHash compoundHash]; - NSMutableArray *posts = [NSMutableArray array]; - for (FPath *path in compoundHash.posts) { - [posts addObject:path.wireFormat]; - } - request[kFWPRequestCompoundHash] = @{ - kFWPRequestCompoundHashHashes : compoundHash.hashes, - kFWPRequestCompoundHashPaths : posts - }; - } - - fbt_void_nsdictionary onResponse = ^(NSDictionary *response) { - FFLog(@"I-RDB034027", @"Listen response %@", response); - // warn in any case, even if the listener was removed - [self warnOnListenWarningsForQuery:query - payload:response[kFWPResponseForActionData]]; - - FOutstandingQuery *currentListenSpec = self.listens[query]; - - // only trigger actions if the listen hasn't been removed (and maybe - // readded) - if (currentListenSpec == listenSpec) { - NSString *status = [response objectForKey:kFWPRequestStatus]; - if (![status isEqualToString:@"ok"]) { - [self removeListen:query]; - } - - if (listenSpec.onComplete) { - listenSpec.onComplete(status); - } - } - - self.unackedListensCount--; - NSAssert(self.unackedListensCount >= 0, - @"unackedListensCount decremented to be negative."); - if (self.unackedListensCount == 0) { - [self ackPuts]; - } - }; - - [self sendAction:kFWPRequestActionTaggedListen - body:request - sensitive:NO - callback:onResponse]; - - self.unackedListensCount++; -} - -- (void)warnOnListenWarningsForQuery:(FQuerySpec *)query payload:(id)payload { - if (payload != nil && [payload isKindOfClass:[NSDictionary class]]) { - NSDictionary *payloadDict = payload; - id warnings = payloadDict[kFWPResponseDataWarnings]; - if (warnings != nil && [warnings isKindOfClass:[NSArray class]]) { - NSArray *warningsArr = warnings; - if ([warningsArr containsObject:@"no_index"]) { - NSString *indexSpec = [NSString - stringWithFormat:@"\".indexOn\": \"%@\"", - [query.params.index queryDefinition]]; - NSString *indexPath = [query.path description]; - FFWarn(@"I-RDB034028", - @"Using an unspecified index. Your data will be " - @"downloaded and filtered on the client. " - "Consider adding %@ at %@ to your security rules for " - "better performance", - indexSpec, indexPath); - } - } - } -} - -- (int)getNextRequestNumber { - return [[self.requestNumber getAndIncrement] intValue]; -} - -- (void)sendAction:(NSString *)action - body:(NSDictionary *)message - sensitive:(BOOL)sensitive - callback:(void (^)(NSDictionary *data))onMessage { - // Hold onto the onMessage callback for this request before firing it off - NSNumber *rn = [NSNumber numberWithInt:[self getNextRequestNumber]]; - NSDictionary *msg = [NSDictionary - dictionaryWithObjectsAndKeys:rn, kFWPRequestNumber, action, - kFWPRequestAction, message, - kFWPRequestPayloadBody, nil]; - - [self.realtime sendRequest:msg sensitive:sensitive]; - - if (onMessage) { - // Debug message without a callback; bump the rn, but don't hold onto - // the cb - [self.requestCBHash setObject:[onMessage copy] forKey:rn]; - } -} - -- (void)cancelSentTransactions { - NSMutableDictionary<NSNumber *, FOutstandingPut *> - *cancelledOutstandingPuts = [[NSMutableDictionary alloc] init]; - - for (NSNumber *index in self.outstandingPuts) { - FOutstandingPut *put = self.outstandingPuts[index]; - if (put.request[kFWPRequestHash] && put.sent) { - // This is a sent transaction put. - cancelledOutstandingPuts[index] = put; - } - } - - [cancelledOutstandingPuts - enumerateKeysAndObjectsUsingBlock:^( - NSNumber *index, FOutstandingPut *outstandingPut, BOOL *stop) { - // `onCompleteBlock:` may invoke `rerunTransactionsForPath:` and - // enqueue new writes. We defer calling it until we have finished - // enumerating all existing writes. - outstandingPut.onCompleteBlock( - kFTransactionDisconnect, - @"Client was disconnected while running a transaction"); - [self.outstandingPuts removeObjectForKey:index]; - }]; -} - -- (void)onDataPushWithAction:(NSString *)action andBody:(NSDictionary *)body { - FFLog(@"I-RDB034029", @"handleServerMessage: %@, %@", action, body); - id<FPersistentConnectionDelegate> delegate = self.delegate; - if ([action isEqualToString:kFWPAsyncServerDataUpdate] || - [action isEqualToString:kFWPAsyncServerDataMerge]) { - BOOL isMerge = [action isEqualToString:kFWPAsyncServerDataMerge]; - - if ([body objectForKey:kFWPAsyncServerDataUpdateBodyPath] && - [body objectForKey:kFWPAsyncServerDataUpdateBodyData]) { - NSString *path = - [body objectForKey:kFWPAsyncServerDataUpdateBodyPath]; - id payloadData = - [body objectForKey:kFWPAsyncServerDataUpdateBodyData]; - if (isMerge && [payloadData isKindOfClass:[NSDictionary class]] && - [payloadData count] == 0) { - // ignore empty merge - } else { - [delegate - onDataUpdate:self - forPath:path - message:payloadData - isMerge:isMerge - tagId:[body objectForKey: - kFWPAsyncServerDataUpdateBodyTag]]; - } - } else { - FFLog( - @"I-RDB034030", - @"Malformed data response from server missing path or data: %@", - body); - } - } else if ([action isEqualToString:kFWPAsyncServerDataRangeMerge]) { - NSString *path = body[kFWPAsyncServerDataUpdateBodyPath]; - NSArray *ranges = body[kFWPAsyncServerDataUpdateBodyData]; - NSNumber *tag = body[kFWPAsyncServerDataUpdateBodyTag]; - NSMutableArray *rangeMerges = [NSMutableArray array]; - for (NSDictionary *range in ranges) { - NSString *startString = range[kFWPAsyncServerDataUpdateStartPath]; - NSString *endString = range[kFWPAsyncServerDataUpdateEndPath]; - id updateData = range[kFWPAsyncServerDataUpdateRangeMerge]; - id<FNode> updates = [FSnapshotUtilities nodeFrom:updateData]; - FPath *start = (startString != nil) - ? [[FPath alloc] initWith:startString] - : nil; - FPath *end = - (endString != nil) ? [[FPath alloc] initWith:endString] : nil; - FRangeMerge *merge = [[FRangeMerge alloc] initWithStart:start - end:end - updates:updates]; - [rangeMerges addObject:merge]; - } - [delegate onRangeMerge:rangeMerges forPath:path tagId:tag]; - } else if ([action isEqualToString:kFWPAsyncServerAuthRevoked]) { - NSString *status = [body objectForKey:kFWPResponseForActionStatus]; - NSString *reason = [body objectForKey:kFWPResponseForActionData]; - [self onAuthRevokedWithStatus:status andReason:reason]; - } else if ([action isEqualToString:kFWPASyncServerListenCancelled]) { - NSString *pathString = - [body objectForKey:kFWPAsyncServerDataUpdateBodyPath]; - [self onListenRevoked:[[FPath alloc] initWith:pathString]]; - } else if ([action isEqualToString:kFWPAsyncServerSecurityDebug]) { - NSString *msg = [body objectForKey:@"msg"]; - if (msg != nil) { - NSArray *msgs = [msg componentsSeparatedByString:@"\n"]; - for (NSString *m in msgs) { - FFWarn(@"I-RDB034031", @"%@", m); - } - } - } else { - // TODO: revoke listens, auth, security debug - FFLog(@"I-RDB034032", @"Unsupported action from server: %@", action); - } -} - -- (void)restoreAuth { - FFLog(@"I-RDB034033", @"Calling restore state"); - - NSAssert(self->connectionState == ConnectionStateConnecting, - @"Wanted to restore auth, but was in wrong state: %d", - self->connectionState); - if (self.authToken == nil) { - FFLog(@"I-RDB034034", @"Not restoring auth because token is nil"); - self->connectionState = ConnectionStateConnected; - [self restoreState]; - } else { - FFLog(@"I-RDB034035", @"Restoring auth"); - self->connectionState = ConnectionStateAuthenticating; - [self sendAuthAndRestoreStateAfterComplete:YES]; - } -} - -- (void)restoreState { - NSAssert(self->connectionState == ConnectionStateConnected, - @"Should be connected if we're restoring state, but we are: %d", - self->connectionState); - - [self.listens enumerateKeysAndObjectsUsingBlock:^( - FQuerySpec *query, FOutstandingQuery *outstandingListen, - BOOL *stop) { - FFLog(@"I-RDB034036", @"Restoring listen for %@", query); - [self sendListen:outstandingListen]; - }]; - - NSArray *keys = [[self.outstandingPuts allKeys] - sortedArrayUsingSelector:@selector(compare:)]; - for (int i = 0; i < [keys count]; i++) { - if ([self.outstandingPuts objectForKey:[keys objectAtIndex:i]] != nil) { - FFLog(@"I-RDB034037", @"Restoring put: %d", i); - [self sendPut:[keys objectAtIndex:i]]; - } else { - FFLog(@"I-RDB034038", @"Restoring put: skipped nil: %d", i); - } - } - - for (FTupleOnDisconnect *tuple in self.onDisconnectQueue) { - [self sendOnDisconnectAction:tuple.action - forPath:tuple.pathString - withData:tuple.data - andCallback:tuple.onComplete]; - } - [self.onDisconnectQueue removeAllObjects]; -} - -- (NSArray *)removeListen:(FQuerySpec *)query { - NSAssert(query.isDefault || !query.loadsAllData, - @"removeListen called for non-default but complete query"); - - FOutstandingQuery *outstanding = self.listens[query]; - if (!outstanding) { - FFLog(@"I-RDB034039", - @"Trying to remove listener for query %@ but no listener exists", - query); - return @[]; - } else { - [self.listens removeObjectForKey:query]; - return @[ outstanding ]; - } -} - -- (NSArray *)removeAllListensAtPath:(FPath *)path { - FFLog(@"I-RDB034040", @"Removing all listens at path %@", path); - NSMutableArray *removed = [NSMutableArray array]; - NSMutableArray *toRemove = [NSMutableArray array]; - [self.listens - enumerateKeysAndObjectsUsingBlock:^( - FQuerySpec *spec, FOutstandingQuery *outstanding, BOOL *stop) { - if ([spec.path isEqual:path]) { - [removed addObject:outstanding]; - [toRemove addObject:spec]; - } - }]; - [self.listens removeObjectsForKeys:toRemove]; - return removed; -} - -- (void)purgeOutstandingWrites { - // We might have unacked puts in our queue that we need to ack now before we - // send out any cancels... - [self ackPuts]; - // Cancel in order - NSArray *keys = [[self.outstandingPuts allKeys] - sortedArrayUsingSelector:@selector(compare:)]; - for (NSNumber *key in keys) { - FOutstandingPut *put = self.outstandingPuts[key]; - if (put.onCompleteBlock != nil) { - put.onCompleteBlock(kFErrorWriteCanceled, nil); - } - } - for (FTupleOnDisconnect *onDisconnect in self.onDisconnectQueue) { - if (onDisconnect.onComplete != nil) { - onDisconnect.onComplete(kFErrorWriteCanceled, nil); - } - } - [self.outstandingPuts removeAllObjects]; - [self.onDisconnectQueue removeAllObjects]; -} - -- (void)ackPuts { - for (FTupleCallbackStatus *put in self.putsToAck) { - put.block(put.status, put.errorReason); - } - [self.putsToAck removeAllObjects]; -} - -- (void)handleTimestamp:(NSNumber *)timestamp { - FFLog(@"I-RDB034041", @"Handling timestamp: %@", timestamp); - double timestampDeltaMs = [timestamp doubleValue] - - ([[NSDate date] timeIntervalSince1970] * 1000); - [self.delegate onServerInfoUpdate:self - updates:@{ - kDotInfoServerTimeOffset : [NSNumber - numberWithDouble:timestampDeltaMs] - }]; -} - -- (void)sendStats:(NSDictionary *)stats { - if ([stats count] > 0) { - NSDictionary *request = @{kFWPRequestCounters : stats}; - [self sendAction:kFWPRequestActionStats - body:request - sensitive:NO - callback:^(NSDictionary *data) { - NSString *status = - [data objectForKey:kFWPResponseForActionStatus]; - NSString *errorReason = - [data objectForKey:kFWPResponseForActionData]; - BOOL statusOk = - [status isEqualToString:kFWPResponseForActionStatusOk]; - if (!statusOk) { - FFLog(@"I-RDB034042", @"Failed to send stats: %@", - errorReason); - } - }]; - } else { - FFLog(@"I-RDB034043", @"Not sending stats because stats are empty"); - } -} - -- (void)sendConnectStats { - NSMutableDictionary *stats = [NSMutableDictionary dictionary]; - -#if TARGET_OS_IOS || TARGET_OS_TV - if (self.config.persistenceEnabled) { - stats[@"persistence.ios.enabled"] = @1; - } -#elif TARGET_OS_OSX - if (self.config.persistenceEnabled) { - stats[@"persistence.osx.enabled"] = @1; - } -#endif - NSString *sdkVersion = - [[FIRDatabase sdkVersion] stringByReplacingOccurrencesOfString:@"." - withString:@"-"]; - NSString *sdkStatName = - [NSString stringWithFormat:@"sdk.objc.%@", sdkVersion]; - stats[sdkStatName] = @1; - FFLog(@"I-RDB034044", @"Sending first connection stats"); - [self sendStats:stats]; -} - -- (NSDictionary *)dumpListens { - return self.listens; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQueryParams.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQueryParams.h deleted file mode 100644 index 5d957c5..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQueryParams.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@protocol FIndex -, FNodeFilter, FNode; - -@interface FQueryParams : NSObject <NSCopying> - -@property(nonatomic, readonly) BOOL limitSet; -@property(nonatomic, readonly) NSInteger limit; - -@property(nonatomic, strong, readonly) NSString *viewFrom; -@property(nonatomic, strong, readonly) id<FNode> indexStartValue; -@property(nonatomic, strong, readonly) NSString *indexStartKey; -@property(nonatomic, strong, readonly) id<FNode> indexEndValue; -@property(nonatomic, strong, readonly) NSString *indexEndKey; - -@property(nonatomic, strong, readonly) id<FIndex> index; - -- (BOOL)loadsAllData; -- (BOOL)isDefault; -- (BOOL)isValid; -- (BOOL)hasAnchoredLimit; - -- (FQueryParams *)limitTo:(NSInteger)limit; -- (FQueryParams *)limitToFirst:(NSInteger)newLimit; -- (FQueryParams *)limitToLast:(NSInteger)newLimit; - -- (FQueryParams *)startAt:(id<FNode>)indexValue childKey:(NSString *)key; -- (FQueryParams *)startAt:(id<FNode>)indexValue; -- (FQueryParams *)endAt:(id<FNode>)indexValue childKey:(NSString *)key; -- (FQueryParams *)endAt:(id<FNode>)indexValue; - -- (FQueryParams *)orderBy:(id<FIndex>)index; - -+ (FQueryParams *)defaultInstance; -+ (FQueryParams *)fromQueryObject:(NSDictionary *)dict; - -- (BOOL)hasStart; -- (BOOL)hasEnd; - -- (NSDictionary *)wireProtocolParams; -- (BOOL)isViewFromLeft; -- (id<FNodeFilter>)nodeFilter; -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQueryParams.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQueryParams.m deleted file mode 100644 index c19cfba..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQueryParams.m +++ /dev/null @@ -1,393 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FQueryParams.h" -#import "FConstants.h" -#import "FIndex.h" -#import "FIndexedFilter.h" -#import "FLimitedFilter.h" -#import "FNode.h" -#import "FNodeFilter.h" -#import "FPriorityIndex.h" -#import "FRangedFilter.h" -#import "FSnapshotUtilities.h" -#import "FUtilities.h" -#import "FValidation.h" - -@interface FQueryParams () - -@property(nonatomic, readwrite) BOOL limitSet; -@property(nonatomic, readwrite) NSInteger limit; - -@property(nonatomic, strong, readwrite) NSString *viewFrom; -/** - * indexStartValue is anything you can store as a priority / value. - */ -@property(nonatomic, strong, readwrite) id<FNode> indexStartValue; -@property(nonatomic, strong, readwrite) NSString *indexStartKey; -/** - * indexStartValue is anything you can store as a priority / value. - */ -@property(nonatomic, strong, readwrite) id<FNode> indexEndValue; -@property(nonatomic, strong, readwrite) NSString *indexEndKey; - -@property(nonatomic, strong, readwrite) id<FIndex> index; - -@end - -@implementation FQueryParams - -+ (FQueryParams *)defaultInstance { - static FQueryParams *defaultParams = nil; - static dispatch_once_t defaultParamsToken; - dispatch_once(&defaultParamsToken, ^{ - defaultParams = [[FQueryParams alloc] init]; - }); - return defaultParams; -} - -- (id)init { - self = [super init]; - if (self) { - self->_limitSet = NO; - self->_limit = 0; - - self->_viewFrom = nil; - self->_indexStartValue = nil; - self->_indexStartKey = nil; - self->_indexEndValue = nil; - self->_indexEndKey = nil; - - self->_index = [FPriorityIndex priorityIndex]; - } - return self; -} - -/** - * Only valid if hasStart is true - */ -- (id)indexStartValue { - NSAssert([self hasStart], @"Only valid if start has been set"); - return _indexStartValue; -} - -/** - * Only valid if hasStart is true. - * @return The starting key name for the range defined by these query parameters - */ -- (NSString *)indexStartKey { - NSAssert([self hasStart], @"Only valid if start has been set"); - if (_indexStartKey == nil) { - return [FUtilities minName]; - } else { - return _indexStartKey; - } -} - -/** - * Only valid if hasEnd is true. - */ -- (id)indexEndValue { - NSAssert([self hasEnd], @"Only valid if end has been set"); - return _indexEndValue; -} - -/** - * Only valid if hasEnd is true. - * @return The end key name for the range defined by these query parameters - */ -- (NSString *)indexEndKey { - NSAssert([self hasEnd], @"Only valid if end has been set"); - if (_indexEndKey == nil) { - return [FUtilities maxName]; - } else { - return _indexEndKey; - } -} - -/** - * @return true if a limit has been set and has been explicitly anchored - */ -- (BOOL)hasAnchoredLimit { - return self.limitSet && self.viewFrom != nil; -} - -/** - * Only valid to call if limitSet returns true - */ -- (NSInteger)limit { - NSAssert(self.limitSet, @"Only valid if limit has been set"); - return _limit; -} - -- (BOOL)hasStart { - return self->_indexStartValue != nil; -} - -- (BOOL)hasEnd { - return self->_indexEndValue != nil; -} - -- (id)copyWithZone:(NSZone *)zone { - // Immutable - return self; -} - -- (id)mutableCopy { - FQueryParams *other = [[[self class] alloc] init]; - // Maybe need to do extra copying here - other->_limitSet = _limitSet; - other->_limit = _limit; - other->_indexStartValue = _indexStartValue; - other->_indexStartKey = _indexStartKey; - other->_indexEndValue = _indexEndValue; - other->_indexEndKey = _indexEndKey; - other->_viewFrom = _viewFrom; - other->_index = _index; - return other; -} - -- (FQueryParams *)limitTo:(NSInteger)newLimit { - FQueryParams *newParams = [self mutableCopy]; - newParams->_limitSet = YES; - newParams->_limit = newLimit; - newParams->_viewFrom = nil; - return newParams; -} - -- (FQueryParams *)limitToFirst:(NSInteger)newLimit { - FQueryParams *newParams = [self mutableCopy]; - newParams->_limitSet = YES; - newParams->_limit = newLimit; - newParams->_viewFrom = kFQPViewFromLeft; - return newParams; -} - -- (FQueryParams *)limitToLast:(NSInteger)newLimit { - FQueryParams *newParams = [self mutableCopy]; - newParams->_limitSet = YES; - newParams->_limit = newLimit; - newParams->_viewFrom = kFQPViewFromRight; - return newParams; -} - -- (FQueryParams *)startAt:(id<FNode>)indexValue childKey:(NSString *)key { - NSAssert([indexValue isLeafNode] || [indexValue isEmpty], nil); - FQueryParams *newParams = [self mutableCopy]; - newParams->_indexStartValue = indexValue; - newParams->_indexStartKey = key; - return newParams; -} - -- (FQueryParams *)startAt:(id<FNode>)indexValue { - return [self startAt:indexValue childKey:nil]; -} - -- (FQueryParams *)endAt:(id<FNode>)indexValue childKey:(NSString *)key { - NSAssert([indexValue isLeafNode] || [indexValue isEmpty], nil); - FQueryParams *newParams = [self mutableCopy]; - newParams->_indexEndValue = indexValue; - newParams->_indexEndKey = key; - return newParams; -} - -- (FQueryParams *)endAt:(id<FNode>)indexValue { - return [self endAt:indexValue childKey:nil]; -} - -- (FQueryParams *)orderBy:(id)newIndex { - FQueryParams *newParams = [self mutableCopy]; - newParams->_index = newIndex; - return newParams; -} - -- (NSDictionary *)wireProtocolParams { - NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; - if ([self hasStart]) { - [dict setObject:[self.indexStartValue valForExport:YES] - forKey:kFQPIndexStartValue]; - - // Don't use property as it will be [MIN-NAME] - if (self->_indexStartKey != nil) { - [dict setObject:self->_indexStartKey forKey:kFQPIndexStartName]; - } - } - - if ([self hasEnd]) { - [dict setObject:[self.indexEndValue valForExport:YES] - forKey:kFQPIndexEndValue]; - - // Don't use property as it will be [MAX-NAME] - if (self->_indexEndKey != nil) { - [dict setObject:self->_indexEndKey forKey:kFQPIndexEndName]; - } - } - - if (self.limitSet) { - [dict setObject:[NSNumber numberWithInteger:self.limit] - forKey:kFQPLimit]; - NSString *vf = self.viewFrom; - if (vf == nil) { - // limit() rather than limitToFirst or limitToLast was called. - // This means that only one of startSet or endSet is true. Use them - // to calculate which side of the view to anchor to. If neither is - // set, Anchor to end - if ([self hasStart]) { - vf = kFQPViewFromLeft; - } else { - vf = kFQPViewFromRight; - } - } - [dict setObject:vf forKey:kFQPViewFrom]; - } - - // For now, priority index is the default, so we only specify if it's some - // other index. - if (![self.index isEqual:[FPriorityIndex priorityIndex]]) { - [dict setObject:[self.index queryDefinition] forKey:kFQPIndex]; - } - - return dict; -} - -+ (FQueryParams *)fromQueryObject:(NSDictionary *)dict { - if (dict.count == 0) { - return [FQueryParams defaultInstance]; - } - - FQueryParams *params = [[FQueryParams alloc] init]; - if (dict[kFQPLimit] != nil) { - params->_limitSet = YES; - params->_limit = [dict[kFQPLimit] integerValue]; - } - - if (dict[kFQPIndexStartValue] != nil) { - params->_indexStartValue = - [FSnapshotUtilities nodeFrom:dict[kFQPIndexStartValue]]; - if (dict[kFQPIndexStartName] != nil) { - params->_indexStartKey = dict[kFQPIndexStartName]; - } - } - - if (dict[kFQPIndexEndValue] != nil) { - params->_indexEndValue = - [FSnapshotUtilities nodeFrom:dict[kFQPIndexEndValue]]; - if (dict[kFQPIndexEndName] != nil) { - params->_indexEndKey = dict[kFQPIndexEndName]; - } - } - - if (dict[kFQPViewFrom] != nil) { - NSString *viewFrom = dict[kFQPViewFrom]; - if (![viewFrom isEqualToString:kFQPViewFromLeft] && - ![viewFrom isEqualToString:kFQPViewFromRight]) { - [NSException raise:NSInvalidArgumentException - format:@"Unknown view from paramter: %@", viewFrom]; - } - params->_viewFrom = viewFrom; - } - - NSString *index = dict[kFQPIndex]; - if (index != nil) { - params->_index = [FIndex indexFromQueryDefinition:index]; - } - - return params; -} - -- (BOOL)isViewFromLeft { - if (self.viewFrom != nil) { - // Not null, we can just check - return [self.viewFrom isEqualToString:kFQPViewFromLeft]; - } else { - // If start is set, it's view from left. Otherwise not. - return self.hasStart; - } -} - -- (id<FNodeFilter>)nodeFilter { - if (self.loadsAllData) { - return [[FIndexedFilter alloc] initWithIndex:self.index]; - } else if (self.limitSet) { - return [[FLimitedFilter alloc] initWithQueryParams:self]; - } else { - return [[FRangedFilter alloc] initWithQueryParams:self]; - } -} - -- (BOOL)isValid { - return !(self.hasStart && self.hasEnd && self.limitSet && - !self.hasAnchoredLimit); -} - -- (BOOL)loadsAllData { - return !(self.hasStart || self.hasEnd || self.limitSet); -} - -- (BOOL)isDefault { - return [self loadsAllData] && - [self.index isEqual:[FPriorityIndex priorityIndex]]; -} - -- (NSString *)description { - return [[self wireProtocolParams] description]; -} - -- (BOOL)isEqual:(id)obj { - if (self == obj) { - return YES; - } - if (![obj isKindOfClass:[self class]]) { - return NO; - } - FQueryParams *other = (FQueryParams *)obj; - if (self->_limitSet != other->_limitSet) - return NO; - if (self->_limit != other->_limit) - return NO; - if ((self->_index != other->_index) && ! - [self->_index isEqual:other->_index]) - return NO; - if ((self->_indexStartKey != other->_indexStartKey) && - ![self->_indexStartKey isEqualToString:other->_indexStartKey]) - return NO; - if ((self->_indexStartValue != other->_indexStartValue) && - ![self->_indexStartValue isEqual:other->_indexStartValue]) - return NO; - if ((self->_indexEndKey != other->_indexEndKey) && - ![self->_indexEndKey isEqualToString:other->_indexEndKey]) - return NO; - if ((self->_indexEndValue != other->_indexEndValue) && - ![self->_indexEndValue isEqual:other->_indexEndValue]) - return NO; - if ([self isViewFromLeft] != [other isViewFromLeft]) - return NO; - - return YES; -} - -- (NSUInteger)hash { - NSUInteger result = _limitSet ? _limit : 0; - result = 31 * result + ([self isViewFromLeft] ? 1231 : 1237); - result = 31 * result + [_indexStartKey hash]; - result = 31 * result + [_indexStartValue hash]; - result = 31 * result + [_indexEndKey hash]; - result = 31 * result + [_indexEndValue hash]; - result = 31 * result + [_index hash]; - return result; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQuerySpec.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQuerySpec.h deleted file mode 100644 index 2eece87..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQuerySpec.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import "FIndex.h" -#import "FPath.h" -#import "FQueryParams.h" - -@interface FQuerySpec : NSObject <NSCopying> - -@property(nonatomic, strong, readonly) FPath *path; -@property(nonatomic, strong, readonly) FQueryParams *params; - -- (id)initWithPath:(FPath *)path params:(FQueryParams *)params; - -+ (FQuerySpec *)defaultQueryAtPath:(FPath *)path; - -- (id<FIndex>)index; -- (BOOL)isDefault; -- (BOOL)loadsAllData; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQuerySpec.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQuerySpec.m deleted file mode 100644 index c408bf8..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FQuerySpec.m +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FQuerySpec.h" - -@interface FQuerySpec () - -@property(nonatomic, strong, readwrite) FPath *path; -@property(nonatomic, strong, readwrite) FQueryParams *params; - -@end - -@implementation FQuerySpec - -- (id)initWithPath:(FPath *)path params:(FQueryParams *)params { - self = [super init]; - if (self != nil) { - self->_path = path; - self->_params = params; - } - return self; -} - -+ (FQuerySpec *)defaultQueryAtPath:(FPath *)path { - return [[FQuerySpec alloc] initWithPath:path - params:[FQueryParams defaultInstance]]; -} - -- (id)copyWithZone:(NSZone *)zone { - // Immutable - return self; -} - -- (id<FIndex>)index { - return self.params.index; -} - -- (BOOL)isDefault { - return self.params.isDefault; -} - -- (BOOL)loadsAllData { - return self.params.loadsAllData; -} - -- (BOOL)isEqual:(id)object { - if (self == object) { - return YES; - } - - if (![object isKindOfClass:[FQuerySpec class]]) { - return NO; - } - - FQuerySpec *other = (FQuerySpec *)object; - - if (![self.path isEqual:other.path]) { - return NO; - } - - return [self.params isEqual:other.params]; -} - -- (NSUInteger)hash { - return self.path.hash * 31 + self.params.hash; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"FQuerySpec (path: %@, params: %@)", - self.path, self.params]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRangeMerge.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRangeMerge.h deleted file mode 100644 index 5f7938a..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRangeMerge.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import "FNode.h" - -/** - * Applies a merge of a snap for a given interval of paths. - * Each leaf in the current node which the relative path lies *after* (the - * optional) start and lies *before or at* (the optional) end will be deleted. - * Each leaf in snap that lies in the interval will be added to the resulting - * node. Nodes outside of the range are ignored. nil for start and end are - * sentinel values that represent -infinity and +infinity respectively (aka - * includes any path). Priorities of children nodes are treated as leaf children - * of that node. - */ -@interface FRangeMerge : NSObject - -- (instancetype)initWithStart:(FPath *)start - end:(FPath *)end - updates:(id<FNode>)updates; - -- (id<FNode>)applyToNode:(id<FNode>)node; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRangeMerge.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRangeMerge.m deleted file mode 100644 index 3dc1576..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRangeMerge.m +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FRangeMerge.h" - -#import "FEmptyNode.h" - -@interface FRangeMerge () - -@property(nonatomic, strong) FPath *optExclusiveStart; -@property(nonatomic, strong) FPath *optInclusiveEnd; -@property(nonatomic, strong) id<FNode> updates; - -@end - -@implementation FRangeMerge - -- (instancetype)initWithStart:(FPath *)start - end:(FPath *)end - updates:(id<FNode>)updates { - self = [super init]; - if (self != nil) { - self->_optExclusiveStart = start; - self->_optInclusiveEnd = end; - self->_updates = updates; - } - return self; -} - -- (id<FNode>)applyToNode:(id<FNode>)node { - return [self updateRangeInNode:[FPath empty] - node:node - updates:self.updates]; -} - -- (id<FNode>)updateRangeInNode:(FPath *)currentPath - node:(id<FNode>)node - updates:(id<FNode>)updates { - NSComparisonResult startComparison = - (self.optExclusiveStart == nil) - ? NSOrderedDescending - : [currentPath compare:self.optExclusiveStart]; - NSComparisonResult endComparison = - (self.optInclusiveEnd == nil) - ? NSOrderedAscending - : [currentPath compare:self.optInclusiveEnd]; - BOOL startInNode = self.optExclusiveStart != nil && - [currentPath contains:self.optExclusiveStart]; - BOOL endInNode = self.optInclusiveEnd != nil && - [currentPath contains:self.optInclusiveEnd]; - if (startComparison == NSOrderedDescending && - endComparison == NSOrderedAscending && !endInNode) { - // child is completly contained - return updates; - } else if (startComparison == NSOrderedDescending && endInNode && - [updates isLeafNode]) { - return updates; - } else if (startComparison == NSOrderedDescending && - endComparison == NSOrderedSame) { - NSAssert(endInNode, @"End not in node"); - NSAssert(![updates isLeafNode], @"Found leaf node update, this case " - @"should have been handled above."); - if ([node isLeafNode]) { - // Update node was not a leaf node, so we can delete it - return [FEmptyNode emptyNode]; - } else { - // Unaffected by range, ignore - return node; - } - } else if (startInNode || endInNode) { - // There is a partial update we need to do, so collect all relevant - // children - NSMutableSet *allChildren = [NSMutableSet set]; - [node enumerateChildrenUsingBlock:^(NSString *key, id<FNode> node, - BOOL *stop) { - [allChildren addObject:key]; - }]; - [updates enumerateChildrenUsingBlock:^(NSString *key, id<FNode> node, - BOOL *stop) { - [allChildren addObject:key]; - }]; - - __block id<FNode> newNode = node; - void (^action)(id, BOOL *) = ^void(NSString *key, BOOL *stop) { - id<FNode> currentChild = [node getImmediateChild:key]; - id<FNode> updatedChild = - [self updateRangeInNode:[currentPath childFromString:key] - node:currentChild - updates:[updates getImmediateChild:key]]; - // Only need to update if the node changed - if (updatedChild != currentChild) { - newNode = [newNode updateImmediateChild:key - withNewChild:updatedChild]; - } - }; - - [allChildren enumerateObjectsUsingBlock:action]; - - // Add priority last, so the node is not empty when applying - if (!updates.getPriority.isEmpty || !node.getPriority.isEmpty) { - BOOL stop = NO; - action(@".priority", &stop); - } - return newNode; - } else { - // Unaffected by this range - NSAssert(endComparison == NSOrderedDescending || - startComparison <= NSOrderedSame, - @"Invalid range for update"); - return node; - } -} - -- (NSString *)description { - return [NSString stringWithFormat:@"RangeMerge (optExclusiveStart = %@, " - @"optExclusiveEng = %@, updates = %@)", - self.optExclusiveStart, - self.optInclusiveEnd, self.updates]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo.h deleted file mode 100644 index 4e3899a..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRDataEventType.h" -#import "FPersistentConnection.h" -#import "FRepoInfo.h" -#import "FTupleUserCallback.h" -#import <Foundation/Foundation.h> - -@class FQuerySpec; -@class FPersistence; -@class FAuthenticationManager; -@class FIRDatabaseConfig; -@protocol FEventRegistration; -@class FCompoundWrite; -@protocol FClock; -@class FIRDatabase; - -@interface FRepo : NSObject <FPersistentConnectionDelegate> - -@property(nonatomic, strong) FIRDatabaseConfig *config; - -- (id)initWithRepoInfo:(FRepoInfo *)info - config:(FIRDatabaseConfig *)config - database:(FIRDatabase *)database; - -- (void)set:(FPath *)path - withNode:(id)node - withCallback:(fbt_void_nserror_ref)onComplete; -- (void)update:(FPath *)path - withNodes:(FCompoundWrite *)compoundWrite - withCallback:(fbt_void_nserror_ref)callback; -- (void)purgeOutstandingWrites; - -- (void)addEventRegistration:(id<FEventRegistration>)eventRegistration - forQuery:(FQuerySpec *)query; -- (void)removeEventRegistration:(id<FEventRegistration>)eventRegistration - forQuery:(FQuerySpec *)query; -- (void)keepQuery:(FQuerySpec *)query synced:(BOOL)synced; - -- (NSString *)name; -- (NSTimeInterval)serverTime; - -- (void)onDataUpdate:(FPersistentConnection *)fpconnection - forPath:(NSString *)pathString - message:(id)message - isMerge:(BOOL)isMerge - tagId:(NSNumber *)tagId; -- (void)onConnect:(FPersistentConnection *)fpconnection; -- (void)onDisconnect:(FPersistentConnection *)fpconnection; - -// Disconnect methods -- (void)onDisconnectCancel:(FPath *)path - withCallback:(fbt_void_nserror_ref)callback; -- (void)onDisconnectSet:(FPath *)path - withNode:(id<FNode>)node - withCallback:(fbt_void_nserror_ref)callback; -- (void)onDisconnectUpdate:(FPath *)path - withNodes:(FCompoundWrite *)compoundWrite - withCallback:(fbt_void_nserror_ref)callback; - -// Connection Management. -- (void)interrupt; -- (void)resume; - -// Transactions -- (void)startTransactionOnPath:(FPath *)path - update:(fbt_transactionresult_mutabledata)update - onComplete:(fbt_void_nserror_bool_datasnapshot)onComplete - withLocalEvents:(BOOL)applyLocally; - -// Testing methods -- (NSDictionary *)dumpListens; -- (void)dispose; -- (void)setHijackHash:(BOOL)hijack; - -@property(nonatomic, strong, readonly) FAuthenticationManager *auth; -@property(nonatomic, strong, readonly) FIRDatabase *database; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo.m deleted file mode 100644 index 27332f3..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo.m +++ /dev/null @@ -1,1467 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import "FAtomicNumber.h" -#import "FCachePolicy.h" -#import "FClock.h" -#import "FConstants.h" -#import "FEmptyNode.h" -#import "FEventRaiser.h" -#import "FEventRegistration.h" -#import "FIRDataSnapshot.h" -#import "FIRDataSnapshot_Private.h" -#import "FIRDatabaseConfig_Private.h" -#import "FIRDatabaseQuery_Private.h" -#import "FIRDatabase_Private.h" -#import "FIRMutableData.h" -#import "FIRMutableData_Private.h" -#import "FIRTransactionResult.h" -#import "FIRTransactionResult_Private.h" -#import "FLevelDBStorageEngine.h" -#import "FListenProvider.h" -#import "FPersistenceManager.h" -#import "FQuerySpec.h" -#import "FRepo.h" -#import "FRepoManager.h" -#import "FRepo_Private.h" -#import "FServerValues.h" -#import "FSnapshotHolder.h" -#import "FSnapshotUtilities.h" -#import "FSyncTree.h" -#import "FTree.h" -#import "FTupleNodePath.h" -#import "FTupleSetIdPath.h" -#import "FTupleTransaction.h" -#import "FValueEventRegistration.h" -#import "FWriteRecord.h" -#import <FirebaseCore/FIRLogger.h> -#import <dlfcn.h> - -#if TARGET_OS_IOS || TARGET_OS_TV -#import <UIKit/UIKit.h> -#endif - -@interface FRepo () - -@property(nonatomic, strong) FOffsetClock *serverClock; -@property(nonatomic, strong) FPersistenceManager *persistenceManager; -@property(nonatomic, strong) FIRDatabase *database; -@property(nonatomic, strong, readwrite) FAuthenticationManager *auth; -@property(nonatomic, strong) FSyncTree *infoSyncTree; -@property(nonatomic) NSInteger writeIdCounter; -@property(nonatomic) BOOL hijackHash; -@property(nonatomic, strong) FTree *transactionQueueTree; -@property(nonatomic) BOOL loggedTransactionPersistenceWarning; - -/** - * Test only. For load testing the server. - */ -@property(nonatomic, strong) id (^interceptServerDataCallback) - (NSString *pathString, id data); -@end - -@implementation FRepo - -- (id)initWithRepoInfo:(FRepoInfo *)info - config:(FIRDatabaseConfig *)config - database:(FIRDatabase *)database { - self = [super init]; - if (self) { - self.repoInfo = info; - self.config = config; - self.database = database; - - // Access can occur outside of shared queue, so the clock needs to be - // initialized here - self.serverClock = - [[FOffsetClock alloc] initWithClock:[FSystemClock clock] offset:0]; - - self.connection = [[FPersistentConnection alloc] - initWithRepoInfo:self.repoInfo - dispatchQueue:[FIRDatabaseQuery sharedQueue] - config:self.config]; - - // Needs to be called before authentication manager is instantiated - self.eventRaiser = - [[FEventRaiser alloc] initWithQueue:self.config.callbackQueue]; - - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - [self deferredInit]; - }); - } - return self; -} - -- (void)deferredInit { - // TODO: cleanup on dealloc - __weak FRepo *weakSelf = self; - [self.config.authTokenProvider listenForTokenChanges:^(NSString *token) { - [weakSelf.connection refreshAuthToken:token]; - }]; - - // Open connection now so that by the time we are connected the deferred - // init has run This relies on the fact that all callbacks run on repos - // queue - self.connection.delegate = self; - [self.connection open]; - - self.dataUpdateCount = 0; - self.rangeMergeUpdateCount = 0; - self.interceptServerDataCallback = nil; - - if (self.config.persistenceEnabled) { - NSString *repoHashString = - [NSString stringWithFormat:@"%@_%@", self.repoInfo.host, - self.repoInfo.namespace]; - NSString *persistencePrefix = - [NSString stringWithFormat:@"%@/%@", self.config.sessionIdentifier, - repoHashString]; - - id<FCachePolicy> cachePolicy = [[FLRUCachePolicy alloc] - initWithMaxSize:self.config.persistenceCacheSizeBytes]; - - id<FStorageEngine> engine; - if (self.config.forceStorageEngine != nil) { - engine = self.config.forceStorageEngine; - } else { - FLevelDBStorageEngine *levelDBEngine = - [[FLevelDBStorageEngine alloc] initWithPath:persistencePrefix]; - // We need the repo info to run the legacy migration. Future - // migrations will be managed by the database itself Remove this - // once we are confident that no-one is using legacy migration - // anymore... - [levelDBEngine runLegacyMigration:self.repoInfo]; - engine = levelDBEngine; - } - - self.persistenceManager = - [[FPersistenceManager alloc] initWithStorageEngine:engine - cachePolicy:cachePolicy]; - } else { - self.persistenceManager = nil; - } - - [self initTransactions]; - - // A list of data pieces and paths to be set when this client disconnects - self.onDisconnect = [[FSparseSnapshotTree alloc] init]; - self.infoData = [[FSnapshotHolder alloc] init]; - - FListenProvider *infoListenProvider = [[FListenProvider alloc] init]; - infoListenProvider.startListening = - ^(FQuerySpec *query, NSNumber *tagId, id<FSyncTreeHash> hash, - fbt_nsarray_nsstring onComplete) { - NSArray *infoEvents = @[]; - FRepo *strongSelf = weakSelf; - id<FNode> node = [strongSelf.infoData getNode:query.path]; - // This is possibly a hack, but we have different semantics for .info - // endpoints. We don't raise null events on initial data... - if (![node isEmpty]) { - infoEvents = - [strongSelf.infoSyncTree applyServerOverwriteAtPath:query.path - newData:node]; - [strongSelf.eventRaiser raiseCallback:^{ - onComplete(kFWPResponseForActionStatusOk); - }]; - } - return infoEvents; - }; - infoListenProvider.stopListening = ^(FQuerySpec *query, NSNumber *tagId) { - }; - self.infoSyncTree = - [[FSyncTree alloc] initWithListenProvider:infoListenProvider]; - - FListenProvider *serverListenProvider = [[FListenProvider alloc] init]; - serverListenProvider.startListening = - ^(FQuerySpec *query, NSNumber *tagId, id<FSyncTreeHash> hash, - fbt_nsarray_nsstring onComplete) { - [weakSelf.connection listen:query - tagId:tagId - hash:hash - onComplete:^(NSString *status) { - NSArray *events = onComplete(status); - [weakSelf.eventRaiser raiseEvents:events]; - }]; - // No synchronous events for network-backed sync trees - return @[]; - }; - serverListenProvider.stopListening = ^(FQuerySpec *query, NSNumber *tag) { - [weakSelf.connection unlisten:query tagId:tag]; - }; - self.serverSyncTree = - [[FSyncTree alloc] initWithPersistenceManager:self.persistenceManager - listenProvider:serverListenProvider]; - - [self restoreWrites]; - - [self updateInfo:kDotInfoConnected withValue:@NO]; - - [self setupNotifications]; -} - -- (void)restoreWrites { - NSArray *writes = self.persistenceManager.userWrites; - - NSDictionary *serverValues = - [FServerValues generateServerValues:self.serverClock]; - __block NSInteger lastWriteId = NSIntegerMin; - [writes enumerateObjectsUsingBlock:^(FWriteRecord *write, NSUInteger idx, - BOOL *stop) { - NSInteger writeId = write.writeId; - fbt_void_nsstring_nsstring callback = - ^(NSString *status, NSString *errorReason) { - [self warnIfWriteFailedAtPath:write.path - status:status - message:@"Persisted write"]; - [self ackWrite:writeId - rerunTransactionsAtPath:write.path - status:status]; - }; - if (lastWriteId >= writeId) { - [NSException raise:NSInternalInconsistencyException - format:@"Restored writes were not in order!"]; - } - lastWriteId = writeId; - self.writeIdCounter = writeId + 1; - - if ([write isOverwrite]) { - FFLog(@"I-RDB038001", @"Restoring overwrite with id %ld", - (long)write.writeId); - [self.connection putData:[write.overwrite valForExport:YES] - forPath:[write.path toString] - withHash:nil - withCallback:callback]; - id<FNode> resolved = - [FServerValues resolveDeferredValueSnapshot:write.overwrite - withSyncTree:self.serverSyncTree - atPath:write.path - serverValues:serverValues]; - [self.serverSyncTree applyUserOverwriteAtPath:write.path - newData:resolved - writeId:writeId - isVisible:YES]; - } else { - FFLog(@"I-RDB038002", @"Restoring merge with id %ld", - (long)write.writeId); - [self.connection mergeData:[write.merge valForExport:YES] - forPath:[write.path toString] - withCallback:callback]; - FCompoundWrite *resolved = [FServerValues - resolveDeferredValueCompoundWrite:write.merge - withSyncTree:self.serverSyncTree - atPath:write.path - serverValues:serverValues]; - [self.serverSyncTree applyUserMergeAtPath:write.path - changedChildren:resolved - writeId:writeId]; - } - }]; -} - -- (NSString *)name { - return self.repoInfo.namespace; -} - -- (NSString *)description { - return [self.repoInfo description]; -} - -- (void)interrupt { - [self.connection interruptForReason:kFInterruptReasonRepoInterrupt]; -} - -- (void)resume { - [self.connection resumeForReason:kFInterruptReasonRepoInterrupt]; -} - -// NOTE: Typically if you're calling this, you should be in an @autoreleasepool -// block to make sure that ARC kicks in and cleans up things no longer -// referenced (i.e. pendingPutsDB). -- (void)dispose { - [self.connection interruptForReason:kFInterruptReasonRepoInterrupt]; - - // We need to nil out any references to LevelDB, to make sure the - // LevelDB exclusive locks are released. - [self.persistenceManager close]; -} - -- (NSInteger)nextWriteId { - return self->_writeIdCounter++; -} - -- (NSTimeInterval)serverTime { - return [self.serverClock currentTime]; -} - -- (void)set:(FPath *)path - withNode:(id<FNode>)node - withCallback:(fbt_void_nserror_ref)onComplete { - id value = [node valForExport:YES]; - FFLog(@"I-RDB038003", @"Setting: %@ with %@ pri: %@", [path toString], - [value description], [[node getPriority] val]); - - // TODO: Optimize this behavior to either (a) store flag to skip resolving - // where possible and / or (b) store unresolved paths on JSON parse - NSDictionary *serverValues = - [FServerValues generateServerValues:self.serverClock]; - id<FNode> existing = [self.serverSyncTree calcCompleteEventCacheAtPath:path - excludeWriteIds:@[]]; - id<FNode> newNode = - [FServerValues resolveDeferredValueSnapshot:node - withExisting:existing - serverValues:serverValues]; - - NSInteger writeId = [self nextWriteId]; - [self.persistenceManager saveUserOverwrite:node - atPath:path - writeId:writeId]; - NSArray *events = [self.serverSyncTree applyUserOverwriteAtPath:path - newData:newNode - writeId:writeId - isVisible:YES]; - [self.eventRaiser raiseEvents:events]; - - [self.connection putData:value - forPath:[path toString] - withHash:nil - withCallback:^(NSString *status, NSString *errorReason) { - [self warnIfWriteFailedAtPath:path - status:status - message:@"setValue: or removeValue:"]; - [self ackWrite:writeId - rerunTransactionsAtPath:path - status:status]; - [self callOnComplete:onComplete - withStatus:status - errorReason:errorReason - andPath:path]; - }]; - - FPath *affectedPath = [self abortTransactionsAtPath:path - error:kFTransactionSet]; - [self rerunTransactionsForPath:affectedPath]; -} - -- (void)update:(FPath *)path - withNodes:(FCompoundWrite *)nodes - withCallback:(fbt_void_nserror_ref)callback { - NSDictionary *values = [nodes valForExport:YES]; - - FFLog(@"I-RDB038004", @"Updating: %@ with %@", [path toString], - [values description]); - NSDictionary *serverValues = - [FServerValues generateServerValues:self.serverClock]; - FCompoundWrite *resolved = - [FServerValues resolveDeferredValueCompoundWrite:nodes - withSyncTree:self.serverSyncTree - atPath:path - serverValues:serverValues]; - - if (!resolved.isEmpty) { - NSInteger writeId = [self nextWriteId]; - [self.persistenceManager saveUserMerge:nodes - atPath:path - writeId:writeId]; - NSArray *events = [self.serverSyncTree applyUserMergeAtPath:path - changedChildren:resolved - writeId:writeId]; - [self.eventRaiser raiseEvents:events]; - - [self.connection mergeData:values - forPath:[path description] - withCallback:^(NSString *status, NSString *errorReason) { - [self warnIfWriteFailedAtPath:path - status:status - message:@"updateChildValues:"]; - [self ackWrite:writeId - rerunTransactionsAtPath:path - status:status]; - [self callOnComplete:callback - withStatus:status - errorReason:errorReason - andPath:path]; - }]; - - [nodes enumerateWrites:^(FPath *childPath, id<FNode> node, BOOL *stop) { - FPath *pathFromRoot = [path child:childPath]; - FFLog(@"I-RDB038005", @"Cancelling transactions at path: %@", - pathFromRoot); - FPath *affectedPath = [self abortTransactionsAtPath:pathFromRoot - error:kFTransactionSet]; - [self rerunTransactionsForPath:affectedPath]; - }]; - } else { - FFLog(@"I-RDB038006", @"update called with empty data. Doing nothing"); - // Do nothing, just call the callback - [self callOnComplete:callback - withStatus:@"ok" - errorReason:nil - andPath:path]; - } -} - -- (void)onDisconnectCancel:(FPath *)path - withCallback:(fbt_void_nserror_ref)callback { - [self.connection - onDisconnectCancelPath:path - withCallback:^(NSString *status, NSString *errorReason) { - BOOL success = - [status isEqualToString:kFWPResponseForActionStatusOk]; - if (success) { - [self.onDisconnect forgetPath:path]; - } else { - FFLog(@"I-RDB038007", - @"cancelDisconnectOperations: at %@ failed: %@", - path, status); - } - - [self callOnComplete:callback - withStatus:status - errorReason:errorReason - andPath:path]; - }]; -} - -- (void)onDisconnectSet:(FPath *)path - withNode:(id<FNode>)node - withCallback:(fbt_void_nserror_ref)callback { - [self.connection - onDisconnectPutData:[node valForExport:YES] - forPath:path - withCallback:^(NSString *status, NSString *errorReason) { - BOOL success = - [status isEqualToString:kFWPResponseForActionStatusOk]; - if (success) { - [self.onDisconnect rememberData:node onPath:path]; - } else { - FFWarn(@"I-RDB038008", - @"onDisconnectSetValue: or " - @"onDisconnectRemoveValue: at %@ failed: %@", - path, status); - } - - [self callOnComplete:callback - withStatus:status - errorReason:errorReason - andPath:path]; - }]; -} - -- (void)onDisconnectUpdate:(FPath *)path - withNodes:(FCompoundWrite *)nodes - withCallback:(fbt_void_nserror_ref)callback { - if (!nodes.isEmpty) { - NSDictionary *values = [nodes valForExport:YES]; - - [self.connection - onDisconnectMergeData:values - forPath:path - withCallback:^(NSString *status, NSString *errorReason) { - BOOL success = [status - isEqualToString:kFWPResponseForActionStatusOk]; - if (success) { - [nodes enumerateWrites:^(FPath *relativePath, - id<FNode> nodeUnresolved, - BOOL *stop) { - FPath *childPath = [path child:relativePath]; - [self.onDisconnect rememberData:nodeUnresolved - onPath:childPath]; - }]; - } else { - FFWarn(@"I-RDB038009", - @"onDisconnectUpdateChildValues: at %@ " - @"failed %@", - path, status); - } - - [self callOnComplete:callback - withStatus:status - errorReason:errorReason - andPath:path]; - }]; - } else { - // Do nothing, just call the callback - [self callOnComplete:callback - withStatus:@"ok" - errorReason:nil - andPath:path]; - } -} - -- (void)purgeOutstandingWrites { - FFLog(@"I-RDB038010", @"Purging outstanding writes"); - NSArray *events = [self.serverSyncTree removeAllWrites]; - [self.eventRaiser raiseEvents:events]; - // Abort any transactions - [self abortTransactionsAtPath:[FPath empty] error:kFErrorWriteCanceled]; - // Remove outstanding writes from connection - [self.connection purgeOutstandingWrites]; -} - -- (void)addEventRegistration:(id<FEventRegistration>)eventRegistration - forQuery:(FQuerySpec *)query { - NSArray *events = nil; - if ([[query.path getFront] isEqualToString:kDotInfoPrefix]) { - events = [self.infoSyncTree addEventRegistration:eventRegistration - forQuery:query]; - } else { - events = [self.serverSyncTree addEventRegistration:eventRegistration - forQuery:query]; - } - [self.eventRaiser raiseEvents:events]; -} - -- (void)removeEventRegistration:(id<FEventRegistration>)eventRegistration - forQuery:(FQuerySpec *)query { - // These are guaranteed not to raise events, since we're not passing in a - // cancelError. However we can future-proof a little bit by handling the - // return values anyways. - FFLog(@"I-RDB038011", @"Removing event registration with hande: %lu", - (unsigned long)eventRegistration.handle); - NSArray *events = nil; - if ([[query.path getFront] isEqualToString:kDotInfoPrefix]) { - events = [self.infoSyncTree removeEventRegistration:eventRegistration - forQuery:query - cancelError:nil]; - } else { - events = [self.serverSyncTree removeEventRegistration:eventRegistration - forQuery:query - cancelError:nil]; - } - [self.eventRaiser raiseEvents:events]; -} - -- (void)keepQuery:(FQuerySpec *)query synced:(BOOL)synced { - NSAssert(![[query.path getFront] isEqualToString:kDotInfoPrefix], - @"Can't keep .info tree synced!"); - [self.serverSyncTree keepQuery:query synced:synced]; -} - -- (void)updateInfo:(NSString *)pathString withValue:(id)value { - // hack to make serverTimeOffset available in a threadsafe way. Property is - // marked as atomic - if ([pathString isEqualToString:kDotInfoServerTimeOffset]) { - NSTimeInterval offset = [(NSNumber *)value doubleValue] / 1000.0; - self.serverClock = - [[FOffsetClock alloc] initWithClock:[FSystemClock clock] - offset:offset]; - } - - FPath *path = [[FPath alloc] - initWith:[NSString - stringWithFormat:@"%@/%@", kDotInfoPrefix, pathString]]; - id<FNode> newNode = [FSnapshotUtilities nodeFrom:value]; - [self.infoData updateSnapshot:path withNewSnapshot:newNode]; - NSArray *events = [self.infoSyncTree applyServerOverwriteAtPath:path - newData:newNode]; - [self.eventRaiser raiseEvents:events]; -} - -- (void)callOnComplete:(fbt_void_nserror_ref)onComplete - withStatus:(NSString *)status - errorReason:(NSString *)errorReason - andPath:(FPath *)path { - if (onComplete) { - FIRDatabaseReference *ref = - [[FIRDatabaseReference alloc] initWithRepo:self path:path]; - BOOL statusOk = [status isEqualToString:kFWPResponseForActionStatusOk]; - NSError *err = nil; - if (!statusOk) { - err = [FUtilities errorForStatus:status andReason:errorReason]; - } - [self.eventRaiser raiseCallback:^{ - onComplete(err, ref); - }]; - } -} - -- (void)ackWrite:(NSInteger)writeId - rerunTransactionsAtPath:(FPath *)path - status:(NSString *)status { - if ([status isEqualToString:kFErrorWriteCanceled]) { - // This write was already removed, we just need to ignore it... - } else { - BOOL success = [status isEqualToString:kFWPResponseForActionStatusOk]; - NSArray *clearEvents = - [self.serverSyncTree ackUserWriteWithWriteId:writeId - revert:!success - persist:YES - clock:self.serverClock]; - if ([clearEvents count] > 0) { - [self rerunTransactionsForPath:path]; - } - [self.eventRaiser raiseEvents:clearEvents]; - } -} - -- (void)warnIfWriteFailedAtPath:(FPath *)path - status:(NSString *)status - message:(NSString *)message { - if (!([status isEqualToString:kFWPResponseForActionStatusOk] || - [status isEqualToString:kFErrorWriteCanceled])) { - FFWarn(@"I-RDB038012", @"%@ at %@ failed: %@", message, path, status); - } -} - -#pragma mark - -#pragma mark FPersistentConnectionDelegate methods - -- (void)onDataUpdate:(FPersistentConnection *)fpconnection - forPath:(NSString *)pathString - message:(id)data - isMerge:(BOOL)isMerge - tagId:(NSNumber *)tagId { - FFLog(@"I-RDB038013", @"onDataUpdateForPath: %@ withMessage: %@", - pathString, data); - - // For testing. - self.dataUpdateCount++; - - FPath *path = [[FPath alloc] initWith:pathString]; - data = self.interceptServerDataCallback - ? self.interceptServerDataCallback(pathString, data) - : data; - NSArray *events = nil; - - if (tagId != nil) { - if (isMerge) { - NSDictionary *message = data; - FCompoundWrite *taggedChildren = - [FCompoundWrite compoundWriteWithValueDictionary:message]; - events = - [self.serverSyncTree applyTaggedQueryMergeAtPath:path - changedChildren:taggedChildren - tagId:tagId]; - } else { - id<FNode> taggedSnap = [FSnapshotUtilities nodeFrom:data]; - events = - [self.serverSyncTree applyTaggedQueryOverwriteAtPath:path - newData:taggedSnap - tagId:tagId]; - } - } else if (isMerge) { - NSDictionary *message = data; - FCompoundWrite *changedChildren = - [FCompoundWrite compoundWriteWithValueDictionary:message]; - events = [self.serverSyncTree applyServerMergeAtPath:path - changedChildren:changedChildren]; - } else { - id<FNode> snap = [FSnapshotUtilities nodeFrom:data]; - events = [self.serverSyncTree applyServerOverwriteAtPath:path - newData:snap]; - } - - if ([events count] > 0) { - // Since we have a listener outstanding for each transaction, receiving - // any events is a proxy for some change having occurred. - [self rerunTransactionsForPath:path]; - } - - [self.eventRaiser raiseEvents:events]; -} - -- (void)onRangeMerge:(NSArray *)ranges - forPath:(NSString *)pathString - tagId:(NSNumber *)tag { - FFLog(@"I-RDB038014", @"onRangeMerge: %@ => %@", pathString, ranges); - - // For testing - self.rangeMergeUpdateCount++; - - FPath *path = [[FPath alloc] initWith:pathString]; - NSArray *events; - if (tag != nil) { - events = [self.serverSyncTree applyTaggedServerRangeMergeAtPath:path - updates:ranges - tagId:tag]; - } else { - events = [self.serverSyncTree applyServerRangeMergeAtPath:path - updates:ranges]; - } - if (events.count > 0) { - // Since we have a listener outstanding for each transaction, receiving - // any events is a proxy for some change having occurred. - [self rerunTransactionsForPath:path]; - } - - [self.eventRaiser raiseEvents:events]; -} - -- (void)onConnect:(FPersistentConnection *)fpconnection { - [self updateInfo:kDotInfoConnected withValue:@YES]; -} - -- (void)onDisconnect:(FPersistentConnection *)fpconnection { - [self updateInfo:kDotInfoConnected withValue:@NO]; - [self runOnDisconnectEvents]; -} - -- (void)onServerInfoUpdate:(FPersistentConnection *)fpconnection - updates:(NSDictionary *)updates { - for (NSString *key in updates) { - id val = [updates objectForKey:key]; - [self updateInfo:key withValue:val]; - } -} - -- (void)setupNotifications { - NSString *const *backgroundConstant = (NSString *const *)dlsym( - RTLD_DEFAULT, "UIApplicationDidEnterBackgroundNotification"); - if (backgroundConstant) { - FFLog(@"I-RDB038015", @"Registering for background notification."); - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(didEnterBackground) - name:*backgroundConstant - object:nil]; - } else { - FFLog(@"I-RDB038016", - @"Skipped registering for background notification."); - } -} - -- (void)didEnterBackground { - if (!self.config.persistenceEnabled) - return; - -// Targetted compilation is ONLY for testing. UIKit is weak-linked in actual -// release build. -#if TARGET_OS_IOS || TARGET_OS_TV - // The idea is to wait until any outstanding sets get written to disk. Since - // the sets might still be in our dispatch queue, we wait for the dispatch - // queue to catch up and for persistence to catch up. This may be - // undesirable though. The dispatch queue might just be processing a bunch - // of incoming data or something. We might want to keep track of whether - // there are any unpersisted sets or something. - FFLog(@"I-RDB038017", - @"Entering background. Starting background task to finish work."); - Class uiApplicationClass = NSClassFromString(@"UIApplication"); - assert(uiApplicationClass); // If we are here, we should be on iOS and - // UIApplication should be available. - - UIApplication *application = [uiApplicationClass sharedApplication]; - __block UIBackgroundTaskIdentifier bgTask = - [application beginBackgroundTaskWithExpirationHandler:^{ - [application endBackgroundTask:bgTask]; - }]; - - NSDate *start = [NSDate date]; - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - NSTimeInterval finishTime = [start timeIntervalSinceNow] * -1; - FFLog(@"I-RDB038018", @"Background task completed. Queue time: %f", - finishTime); - [application endBackgroundTask:bgTask]; - }); -#endif -} - -#pragma mark - -#pragma mark Internal methods - -/** - * Applies all the changes stored up in the onDisconnect tree - */ -- (void)runOnDisconnectEvents { - FFLog(@"I-RDB038019", @"Running onDisconnectEvents"); - NSDictionary *serverValues = - [FServerValues generateServerValues:self.serverClock]; - NSMutableArray *events = [[NSMutableArray alloc] init]; - - [self.onDisconnect - forEachTreeAtPath:[FPath empty] - do:^(FPath *path, id<FNode> node) { - id<FNode> existing = [self.serverSyncTree - calcCompleteEventCacheAtPath:path - excludeWriteIds:@[]]; - id<FNode> resolved = [FServerValues - resolveDeferredValueSnapshot:node - withExisting:existing - serverValues:serverValues]; - [events addObjectsFromArray: - [self.serverSyncTree - applyServerOverwriteAtPath:path - newData:resolved]]; - FPath *affectedPath = - [self abortTransactionsAtPath:path - error:kFTransactionSet]; - [self rerunTransactionsForPath:affectedPath]; - }]; - - self.onDisconnect = [[FSparseSnapshotTree alloc] init]; - [self.eventRaiser raiseEvents:events]; -} - -- (NSDictionary *)dumpListens { - return [self.connection dumpListens]; -} - -#pragma mark - -#pragma mark Transactions - -/** - * Setup the transaction data structures - */ -- (void)initTransactions { - self.transactionQueueTree = [[FTree alloc] init]; - self.hijackHash = NO; - self.loggedTransactionPersistenceWarning = NO; -} - -/** - * Creates a new transaction, add its to the transactions we're tracking, and - * sends it to the server if possible - */ -- (void)startTransactionOnPath:(FPath *)path - update:(fbt_transactionresult_mutabledata)update - onComplete:(fbt_void_nserror_bool_datasnapshot)onComplete - withLocalEvents:(BOOL)applyLocally { - if (self.config.persistenceEnabled && - !self.loggedTransactionPersistenceWarning) { - self.loggedTransactionPersistenceWarning = YES; - FFInfo(@"I-RDB038020", - @"runTransactionBlock: usage detected while persistence is " - @"enabled. Please be aware that transactions " - @"*will not* be persisted across app restarts. " - @"See " - @"https://www.firebase.com/docs/ios/guide/" - @"offline-capabilities.html#section-handling-transactions-" - @"offline for more details."); - } - - FIRDatabaseReference *watchRef = - [[FIRDatabaseReference alloc] initWithRepo:self path:path]; - // make sure we're listening on this node - // Note: we can't do this asynchronously. To preserve event ordering, it has - // to be done in this block. This is ok, this block is guaranteed to be our - // own event loop - NSUInteger handle = [[FUtilities LUIDGenerator] integerValue]; - fbt_void_datasnapshot cb = ^(FIRDataSnapshot *snapshot) { - }; - FValueEventRegistration *registration = - [[FValueEventRegistration alloc] initWithRepo:self - handle:handle - callback:cb - cancelCallback:nil]; - [watchRef.repo addEventRegistration:registration - forQuery:watchRef.querySpec]; - fbt_void_void unwatcher = ^{ - [watchRef removeObserverWithHandle:handle]; - }; - - // Save all the data that represents this transaction - FTupleTransaction *transaction = [[FTupleTransaction alloc] init]; - transaction.path = path; - transaction.update = update; - transaction.onComplete = onComplete; - transaction.status = FTransactionInitializing; - transaction.order = [FUtilities LUIDGenerator]; - transaction.applyLocally = applyLocally; - transaction.retryCount = 0; - transaction.unwatcher = unwatcher; - transaction.currentWriteId = nil; - transaction.currentInputSnapshot = nil; - transaction.currentOutputSnapshotRaw = nil; - transaction.currentOutputSnapshotResolved = nil; - - // Run transaction initially - id<FNode> currentState = [self latestStateAtPath:path excludeWriteIds:nil]; - transaction.currentInputSnapshot = currentState; - FIRMutableData *mutableCurrent = - [[FIRMutableData alloc] initWithNode:currentState]; - FIRTransactionResult *result = transaction.update(mutableCurrent); - - if (!result.isSuccess) { - // Abort the transaction - transaction.unwatcher(); - transaction.currentOutputSnapshotRaw = nil; - transaction.currentOutputSnapshotResolved = nil; - if (transaction.onComplete) { - FIRDatabaseReference *ref = - [[FIRDatabaseReference alloc] initWithRepo:self - path:transaction.path]; - FIndexedNode *indexedNode = [FIndexedNode - indexedNodeWithNode:transaction.currentInputSnapshot]; - FIRDataSnapshot *snap = - [[FIRDataSnapshot alloc] initWithRef:ref - indexedNode:indexedNode]; - [self.eventRaiser raiseCallback:^{ - transaction.onComplete(nil, NO, snap); - }]; - } - } else { - // Note: different from js. We don't need to validate, FIRMutableData - // does validation. We also don't have to worry about priorities. Just - // mark as run and add to queue. - transaction.status = FTransactionRun; - FTree *queueNode = [self.transactionQueueTree subTree:transaction.path]; - NSMutableArray *nodeQueue = [queueNode getValue]; - if (nodeQueue == nil) { - nodeQueue = [[NSMutableArray alloc] init]; - } - [nodeQueue addObject:transaction]; - [queueNode setValue:nodeQueue]; - - // Update visibleData and raise events - // Note: We intentionally raise events after updating all of our - // transaction state, since the user could start new transactions from - // the event callbacks - NSDictionary *serverValues = - [FServerValues generateServerValues:self.serverClock]; - id<FNode> newValUnresolved = [result.update nodeValue]; - id<FNode> newVal = - [FServerValues resolveDeferredValueSnapshot:newValUnresolved - withExisting:currentState - serverValues:serverValues]; - transaction.currentOutputSnapshotRaw = newValUnresolved; - transaction.currentOutputSnapshotResolved = newVal; - transaction.currentWriteId = - [NSNumber numberWithInteger:[self nextWriteId]]; - - NSArray *events = [self.serverSyncTree - applyUserOverwriteAtPath:path - newData:newVal - writeId:[transaction.currentWriteId integerValue] - isVisible:transaction.applyLocally]; - [self.eventRaiser raiseEvents:events]; - - [self sendAllReadyTransactions]; - } -} - -/** - * @param writeIdsToExclude A specific set to exclude - */ -- (id<FNode>)latestStateAtPath:(FPath *)path - excludeWriteIds:(NSArray *)writeIdsToExclude { - id<FNode> latestState = - [self.serverSyncTree calcCompleteEventCacheAtPath:path - excludeWriteIds:writeIdsToExclude]; - return latestState ? latestState : [FEmptyNode emptyNode]; -} - -/** - * Sends any already-run transactions that aren't waiting for outstanding - * transactions to complete. - * - * Externally, call the version with no arguments. - * Internally, calls itself recursively with a particular transactionQueueTree - * node to recurse through the tree - */ -- (void)sendAllReadyTransactions { - FTree *node = self.transactionQueueTree; - - [self pruneCompletedTransactionsBelowNode:node]; - [self sendReadyTransactionsForTree:node]; -} - -- (void)sendReadyTransactionsForTree:(FTree *)node { - NSMutableArray *queue = [node getValue]; - if (queue != nil) { - queue = [self buildTransactionQueueAtNode:node]; - NSAssert([queue count] > 0, @"Sending zero length transaction queue"); - - NSUInteger notRunIndex = [queue - indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { - return ((FTupleTransaction *)obj).status != FTransactionRun; - }]; - - // If they're all run (and not sent), we can send them. Else, we must - // wait. - if (notRunIndex == NSNotFound) { - [self sendTransactionQueue:queue atPath:node.path]; - } - } else if ([node hasChildren]) { - [node forEachChild:^(FTree *child) { - [self sendReadyTransactionsForTree:child]; - }]; - } -} - -/** - * Given a list of run transactions, send them to the server and then handle the - * result (success or failure). - */ -- (void)sendTransactionQueue:(NSMutableArray *)queue atPath:(FPath *)path { - // Mark transactions as sent and bump the retry count - NSMutableArray *writeIdsToExclude = [[NSMutableArray alloc] init]; - for (FTupleTransaction *transaction in queue) { - [writeIdsToExclude addObject:transaction.currentWriteId]; - } - id<FNode> latestState = [self latestStateAtPath:path - excludeWriteIds:writeIdsToExclude]; - id<FNode> snapToSend = latestState; - NSString *latestHash = [latestState dataHash]; - for (FTupleTransaction *transaction in queue) { - NSAssert( - transaction.status == FTransactionRun, - @"[FRepo sendTransactionQueue:] items in queue should all be run."); - FFLog(@"I-RDB038021", @"Transaction at %@ set to SENT", - transaction.path); - transaction.status = FTransactionSent; - transaction.retryCount++; - FPath *relativePath = [FPath relativePathFrom:path to:transaction.path]; - // If we've gotten to this point, the output snapshot must be defined. - snapToSend = - [snapToSend updateChild:relativePath - withNewChild:transaction.currentOutputSnapshotRaw]; - } - - id dataToSend = [snapToSend valForExport:YES]; - NSString *pathToSend = [path description]; - latestHash = self.hijackHash ? @"badhash" : latestHash; - - // Send the put - [self.connection - putData:dataToSend - forPath:pathToSend - withHash:latestHash - withCallback:^(NSString *status, NSString *errorReason) { - FFLog(@"I-RDB038022", @"Transaction put response: %@ : %@", - pathToSend, status); - - NSMutableArray *events = [[NSMutableArray alloc] init]; - if ([status isEqualToString:kFWPResponseForActionStatusOk]) { - // Queue up the callbacks and fire them after cleaning up all of - // our transaction state, since the callback could trigger more - // transactions or sets. - NSMutableArray *callbacks = [[NSMutableArray alloc] init]; - for (FTupleTransaction *transaction in queue) { - transaction.status = FTransactionCompleted; - [events addObjectsFromArray: - [self.serverSyncTree - ackUserWriteWithWriteId: - [transaction.currentWriteId integerValue] - revert:NO - persist:NO - clock:self.serverClock]]; - if (transaction.onComplete) { - // We never unset the output snapshot, and given that this - // transaction is complete, it should be set - id<FNode> node = - transaction.currentOutputSnapshotResolved; - FIndexedNode *indexedNode = - [FIndexedNode indexedNodeWithNode:node]; - FIRDatabaseReference *ref = [[FIRDatabaseReference alloc] - initWithRepo:self - path:transaction.path]; - FIRDataSnapshot *snapshot = - [[FIRDataSnapshot alloc] initWithRef:ref - indexedNode:indexedNode]; - fbt_void_void cb = ^{ - transaction.onComplete(nil, YES, snapshot); - }; - [callbacks addObject:[cb copy]]; - } - transaction.unwatcher(); - } - - // Now remove the completed transactions. - [self - pruneCompletedTransactionsBelowNode:[self.transactionQueueTree - subTree:path]]; - // There may be pending transactions that we can now send. - [self sendAllReadyTransactions]; - - // Finally, trigger onComplete callbacks - [self.eventRaiser raiseCallbacks:callbacks]; - } else { - // transactions are no longer sent. Update their status - // appropriately. - if ([status - isEqualToString:kFWPResponseForActionStatusDataStale]) { - for (FTupleTransaction *transaction in queue) { - if (transaction.status == FTransactionSentNeedsAbort) { - transaction.status = FTransactionNeedsAbort; - } else { - transaction.status = FTransactionRun; - } - } - } else { - FFWarn(@"I-RDB038023", - @"runTransactionBlock: at %@ failed: %@", path, - status); - for (FTupleTransaction *transaction in queue) { - transaction.status = FTransactionNeedsAbort; - [transaction setAbortStatus:status reason:errorReason]; - } - } - } - - [self rerunTransactionsForPath:path]; - [self.eventRaiser raiseEvents:events]; - }]; -} - -/** - * Finds all transactions dependent on the data at changed Path and reruns them. - * - * Should be called any time cached data changes. - * - * Return the highest path that was affected by rerunning transactions. This is - * the path at which events need to be raised for. - */ -- (FPath *)rerunTransactionsForPath:(FPath *)changedPath { - // For the common case that there are no transactions going on, skip all - // this! - if ([self.transactionQueueTree isEmpty]) { - return changedPath; - } else { - FTree *rootMostTransactionNode = - [self getAncestorTransactionNodeForPath:changedPath]; - FPath *path = rootMostTransactionNode.path; - - NSArray *queue = - [self buildTransactionQueueAtNode:rootMostTransactionNode]; - [self rerunTransactionQueue:queue atPath:path]; - - return path; - } -} - -/** - * Does all the work of rerunning transactions (as well as cleans up aborted - * transactions and whatnot). - */ -- (void)rerunTransactionQueue:(NSArray *)queue atPath:(FPath *)path { - if (queue.count == 0) { - return; // nothing to do - } - - // Queue up the callbacks and fire them after cleaning up all of our - // transaction state, since the callback could trigger more transactions or - // sets. - NSMutableArray *events = [[NSMutableArray alloc] init]; - NSMutableArray *callbacks = [[NSMutableArray alloc] init]; - - // Ignore, by default, all of the sets in this queue, since we're re-running - // all of them. However, we want to include the results of new sets - // triggered as part of this re-run, so we don't want to ignore a range, - // just these specific sets. - NSMutableArray *writeIdsToExclude = [[NSMutableArray alloc] init]; - for (FTupleTransaction *transaction in queue) { - [writeIdsToExclude addObject:transaction.currentWriteId]; - } - - for (FTupleTransaction *transaction in queue) { - FPath *relativePath __unused = - [FPath relativePathFrom:path to:transaction.path]; - BOOL abortTransaction = NO; - NSAssert(relativePath != nil, @"[FRepo rerunTransactionsQueue:] " - @"relativePath should not be null."); - - if (transaction.status == FTransactionNeedsAbort) { - abortTransaction = YES; - if (![transaction.abortStatus - isEqualToString:kFErrorWriteCanceled]) { - NSArray *ackEvents = [self.serverSyncTree - ackUserWriteWithWriteId:[transaction.currentWriteId - integerValue] - revert:YES - persist:NO - clock:self.serverClock]; - [events addObjectsFromArray:ackEvents]; - } - } else if (transaction.status == FTransactionRun) { - if (transaction.retryCount >= kFTransactionMaxRetries) { - abortTransaction = YES; - [transaction setAbortStatus:kFTransactionTooManyRetries - reason:nil]; - [events - addObjectsFromArray: - [self.serverSyncTree - ackUserWriteWithWriteId:[transaction.currentWriteId - integerValue] - revert:YES - persist:NO - clock:self.serverClock]]; - } else { - // This code reruns a transaction - id<FNode> currentNode = - [self latestStateAtPath:transaction.path - excludeWriteIds:writeIdsToExclude]; - transaction.currentInputSnapshot = currentNode; - FIRMutableData *mutableCurrent = - [[FIRMutableData alloc] initWithNode:currentNode]; - FIRTransactionResult *result = - transaction.update(mutableCurrent); - if (result.isSuccess) { - NSNumber *oldWriteId = transaction.currentWriteId; - NSDictionary *serverValues = - [FServerValues generateServerValues:self.serverClock]; - - id<FNode> newVal = [result.update nodeValue]; - id<FNode> newValResolved = [FServerValues - resolveDeferredValueSnapshot:newVal - withExisting:transaction - .currentInputSnapshot - serverValues:serverValues]; - - transaction.currentOutputSnapshotRaw = newVal; - transaction.currentOutputSnapshotResolved = newValResolved; - - transaction.currentWriteId = - [NSNumber numberWithInteger:[self nextWriteId]]; - // Mutates writeIdsToExclude in place - [writeIdsToExclude removeObject:oldWriteId]; - [events - addObjectsFromArray: - [self.serverSyncTree - applyUserOverwriteAtPath:transaction.path - newData: - transaction - .currentOutputSnapshotResolved - writeId: - [transaction.currentWriteId - integerValue] - isVisible:transaction - .applyLocally]]; - [events addObjectsFromArray: - [self.serverSyncTree - ackUserWriteWithWriteId:[oldWriteId - integerValue] - revert:YES - persist:NO - clock:self.serverClock]]; - } else { - abortTransaction = YES; - // The user aborted the transaction. JS treats ths as a - // "nodata" abort, but it's not an error, so we don't send - // them an error. - [transaction setAbortStatus:nil reason:nil]; - [events - addObjectsFromArray: - [self.serverSyncTree - ackUserWriteWithWriteId: - [transaction.currentWriteId integerValue] - revert:YES - persist:NO - clock:self.serverClock]]; - } - } - } - - [self.eventRaiser raiseEvents:events]; - events = nil; - - if (abortTransaction) { - // Abort - transaction.status = FTransactionCompleted; - transaction.unwatcher(); - if (transaction.onComplete) { - FIRDatabaseReference *ref = [[FIRDatabaseReference alloc] - initWithRepo:self - path:transaction.path]; - FIndexedNode *lastInput = [FIndexedNode - indexedNodeWithNode:transaction.currentInputSnapshot]; - FIRDataSnapshot *snap = - [[FIRDataSnapshot alloc] initWithRef:ref - indexedNode:lastInput]; - fbt_void_void cb = ^{ - // Unlike JS, no need to check for "nodata" because ObjC has - // abortError = nil - transaction.onComplete(transaction.abortError, NO, snap); - }; - [callbacks addObject:[cb copy]]; - } - } - } - - // Note: unlike current js client, we don't need to preserve priority. Users - // can set priority via FIRMutableData - - // Clean up completed transactions. - [self pruneCompletedTransactionsBelowNode:self.transactionQueueTree]; - - // Now fire callbacks, now that we're in a good, known state. - [self.eventRaiser raiseCallbacks:callbacks]; - - // Try to send the transaction result to the server - [self sendAllReadyTransactions]; -} - -- (FTree *)getAncestorTransactionNodeForPath:(FPath *)path { - FTree *transactionNode = self.transactionQueueTree; - - while (![path isEmpty] && [transactionNode getValue] == nil) { - NSString *front = [path getFront]; - transactionNode = - [transactionNode subTree:[[FPath alloc] initWith:front]]; - path = [path popFront]; - } - - return transactionNode; -} - -- (NSMutableArray *)buildTransactionQueueAtNode:(FTree *)node { - NSMutableArray *queue = [[NSMutableArray alloc] init]; - [self aggregateTransactionQueuesForNode:node andQueue:queue]; - - [queue sortUsingComparator:^NSComparisonResult(FTupleTransaction *obj1, - FTupleTransaction *obj2) { - return [obj1.order compare:obj2.order]; - }]; - - return queue; -} - -- (void)aggregateTransactionQueuesForNode:(FTree *)node - andQueue:(NSMutableArray *)queue { - NSArray *nodeQueue = [node getValue]; - [queue addObjectsFromArray:nodeQueue]; - - [node forEachChild:^(FTree *child) { - [self aggregateTransactionQueuesForNode:child andQueue:queue]; - }]; -} - -/** - * Remove COMPLETED transactions at or below this node in the - * transactionQueueTree - */ -- (void)pruneCompletedTransactionsBelowNode:(FTree *)node { - NSMutableArray *queue = [node getValue]; - if (queue != nil) { - int i = 0; - // remove all of the completed transactions from the queue - while (i < queue.count) { - FTupleTransaction *transaction = [queue objectAtIndex:i]; - if (transaction.status == FTransactionCompleted) { - [queue removeObjectAtIndex:i]; - } else { - i++; - } - } - if (queue.count > 0) { - [node setValue:queue]; - } else { - [node setValue:nil]; - } - } - - [node forEachChildMutationSafe:^(FTree *child) { - [self pruneCompletedTransactionsBelowNode:child]; - }]; -} - -/** - * Aborts all transactions on ancestors or descendants of the specified path. - * Called when doing a setValue: or updateChildValues: since we consider them - * incompatible with transactions - * - * @param path path for which we want to abort related transactions. - */ -- (FPath *)abortTransactionsAtPath:(FPath *)path error:(NSString *)error { - // For the common case that there are no transactions going on, skip all - // this! - if ([self.transactionQueueTree isEmpty]) { - return path; - } else { - FPath *affectedPath = - [self getAncestorTransactionNodeForPath:path].path; - - FTree *transactionNode = [self.transactionQueueTree subTree:path]; - [transactionNode forEachAncestor:^BOOL(FTree *ancestor) { - [self abortTransactionsAtNode:ancestor error:error]; - return NO; - }]; - - [self abortTransactionsAtNode:transactionNode error:error]; - - [transactionNode forEachDescendant:^(FTree *child) { - [self abortTransactionsAtNode:child error:error]; - }]; - - return affectedPath; - } -} - -/** - * Abort transactions stored in this transactions queue node. - * - * @param node Node to abort transactions for. - */ -- (void)abortTransactionsAtNode:(FTree *)node error:(NSString *)error { - NSMutableArray *queue = [node getValue]; - if (queue != nil) { - - // Queue up the callbacks and fire them after cleaning up all of our - // transaction state, since can be immediately aborted and removed. - NSMutableArray *callbacks = [[NSMutableArray alloc] init]; - - // Go through queue. Any already-sent transactions must be marked for - // abort, while the unsent ones can be immediately aborted and removed - NSMutableArray *events = [[NSMutableArray alloc] init]; - int lastSent = -1; - // Note: all of the sent transactions will be at the front of the queue, - // so safe to increment lastSent - for (FTupleTransaction *transaction in queue) { - if (transaction.status == FTransactionSentNeedsAbort) { - // No-op. already marked. - } else if (transaction.status == FTransactionSent) { - // Mark this transaction for abort when it returns - lastSent++; - transaction.status = FTransactionSentNeedsAbort; - [transaction setAbortStatus:error reason:nil]; - } else { - // we can abort this immediately - transaction.unwatcher(); - if ([error isEqualToString:kFTransactionSet]) { - [events - addObjectsFromArray: - [self.serverSyncTree - ackUserWriteWithWriteId: - [transaction.currentWriteId integerValue] - revert:YES - persist:NO - clock:self.serverClock]]; - } else { - // If it was cancelled it was already removed from the sync - // tree, no need to ack - NSAssert([error isEqualToString:kFErrorWriteCanceled], nil); - } - - if (transaction.onComplete) { - NSError *abortReason = [FUtilities errorForStatus:error - andReason:nil]; - FIRDataSnapshot *snapshot = nil; - fbt_void_void cb = ^{ - transaction.onComplete(abortReason, NO, snapshot); - }; - [callbacks addObject:[cb copy]]; - } - } - } - if (lastSent == -1) { - // We're not waiting for any sent transactions. We can clear the - // queue. - [node setValue:nil]; - } else { - // Remove the transactions we aborted - NSRange theRange; - theRange.location = lastSent + 1; - theRange.length = queue.count - theRange.location; - [queue removeObjectsInRange:theRange]; - } - - // Now fire the callbacks - [self.eventRaiser raiseEvents:events]; - [self.eventRaiser raiseCallbacks:callbacks]; - } -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoInfo.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoInfo.h deleted file mode 100644 index 46e9b8b..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoInfo.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@interface FRepoInfo : NSObject <NSCopying> - -@property(nonatomic, readonly, strong) NSString *host; -@property(nonatomic, readonly, strong) NSString *namespace; -@property(nonatomic, strong) NSString *internalHost; -@property(nonatomic, readonly) bool secure; - -- (id)initWithHost:(NSString *)host - isSecure:(bool)secure - withNamespace:(NSString *)namespace; - -- (NSString *)connectionURLWithLastSessionID:(NSString *)lastSessionID; -- (NSString *)connectionURL; -- (void)clearInternalHostCache; -- (BOOL)isDemoHost; -- (BOOL)isCustomHost; - -- (id)copyWithZone:(NSZone *)zone; -- (NSUInteger)hash; -- (BOOL)isEqual:(id)anObject; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoInfo.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoInfo.m deleted file mode 100644 index b2dd2e2..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoInfo.m +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FRepoInfo.h" -#import "FConstants.h" - -@interface FRepoInfo () - -@property(nonatomic, strong) NSString *domain; - -@end - -@implementation FRepoInfo - -@synthesize namespace; -@synthesize host; -@synthesize internalHost; -@synthesize secure; -@synthesize domain; - -- (id)initWithHost:(NSString *)aHost - isSecure:(bool)isSecure - withNamespace:(NSString *)aNamespace { - self = [super init]; - if (self) { - host = aHost; - domain = - [host containsString:@"."] - ? [host - substringFromIndex:[host rangeOfString:@"."].location + 1] - : host; - secure = isSecure; - namespace = aNamespace; - - // Get cached internal host if it exists - NSString *internalHostKey = - [NSString stringWithFormat:@"firebase:host:%@", self.host]; - NSString *cachedInternalHost = [[NSUserDefaults standardUserDefaults] - stringForKey:internalHostKey]; - if (cachedInternalHost != nil) { - internalHost = cachedInternalHost; - } else { - internalHost = self.host; - } - } - return self; -} - -- (NSString *)description { - // The namespace is encoded in the hostname, so we can just return this. - return [NSString - stringWithFormat:@"http%@://%@", (self.secure ? @"s" : @""), self.host]; -} - -- (void)setInternalHost:(NSString *)newHost { - if (![internalHost isEqualToString:newHost]) { - internalHost = newHost; - - // Cache the internal host so we don't need to redirect later on - NSString *internalHostKey = - [NSString stringWithFormat:@"firebase:host:%@", self.host]; - NSUserDefaults *cache = [NSUserDefaults standardUserDefaults]; - [cache setObject:internalHost forKey:internalHostKey]; - [cache synchronize]; - } -} - -- (void)clearInternalHostCache { - internalHost = self.host; - - // Remove the cached entry - NSString *internalHostKey = - [NSString stringWithFormat:@"firebase:host:%@", self.host]; - NSUserDefaults *cache = [NSUserDefaults standardUserDefaults]; - [cache removeObjectForKey:internalHostKey]; - [cache synchronize]; -} - -- (BOOL)isDemoHost { - return [self.domain isEqualToString:@"firebaseio-demo.com"]; -} - -- (BOOL)isCustomHost { - return ![self.domain isEqualToString:@"firebaseio-demo.com"] && - ![self.domain isEqualToString:@"firebaseio.com"]; -} - -- (NSString *)connectionURL { - return [self connectionURLWithLastSessionID:nil]; -} - -- (NSString *)connectionURLWithLastSessionID:(NSString *)lastSessionID { - NSString *scheme; - if (self.secure) { - scheme = @"wss"; - } else { - scheme = @"ws"; - } - NSString *url = - [NSString stringWithFormat:@"%@://%@/.ws?%@=%@&ns=%@", scheme, - self.internalHost, kWireProtocolVersionParam, - kWebsocketProtocolVersion, self.namespace]; - - if (lastSessionID != nil) { - url = [NSString stringWithFormat:@"%@&ls=%@", url, lastSessionID]; - } - return url; -} - -- (id)copyWithZone:(NSZone *)zone; -{ - return self; // Immutable -} - -- (NSUInteger)hash { - NSUInteger result = host.hash; - result = 31 * result + (secure ? 1 : 0); - result = 31 * result + namespace.hash; - result = 31 * result + host.hash; - return result; -} - -- (BOOL)isEqual:(id)anObject { - if (![anObject isKindOfClass:[FRepoInfo class]]) - return NO; - FRepoInfo *other = (FRepoInfo *)anObject; - return secure == other.secure && [host isEqualToString:other.host] && - [namespace isEqualToString:other.namespace]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoManager.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoManager.h deleted file mode 100644 index ba8d1fc..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoManager.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRDatabaseConfig.h" -#import "FRepo.h" -#import "FRepoInfo.h" -#import <Foundation/Foundation.h> - -@interface FRepoManager : NSObject - -+ (FRepo *)getRepo:(FRepoInfo *)repoInfo config:(FIRDatabaseConfig *)config; -+ (FRepo *)createRepo:(FRepoInfo *)repoInfo - config:(FIRDatabaseConfig *)config - database:(FIRDatabase *)database; -+ (void)interruptAll; -+ (void)interrupt:(FIRDatabaseConfig *)config; -+ (void)resumeAll; -+ (void)resume:(FIRDatabaseConfig *)config; -+ (void)disposeRepos:(FIRDatabaseConfig *)config; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoManager.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoManager.m deleted file mode 100644 index 54ad196..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepoManager.m +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FRepoManager.h" -#import "FAtomicNumber.h" -#import "FIRDatabaseConfig_Private.h" -#import "FIRDatabaseQuery_Private.h" -#import "FIRDatabase_Private.h" -#import "FRepo.h" -#import <FirebaseCore/FIRLogger.h> - -@implementation FRepoManager - -typedef NSMutableDictionary<NSString *, - NSMutableDictionary<FRepoInfo *, FRepo *> *> - FRepoDictionary; - -+ (FRepoDictionary *)configs { - static dispatch_once_t pred = 0; - static FRepoDictionary *configs; - dispatch_once(&pred, ^{ - configs = [NSMutableDictionary dictionary]; - }); - return configs; -} - -/** - * Used for legacy unit tests. The public API should go through - * FirebaseDatabase which calls createRepo. - */ -+ (FRepo *)getRepo:(FRepoInfo *)repoInfo config:(FIRDatabaseConfig *)config { - [config freeze]; - FRepoDictionary *configs = [FRepoManager configs]; - @synchronized(configs) { - NSMutableDictionary<FRepoInfo *, FRepo *> *repos = - configs[config.sessionIdentifier]; - if (!repos || repos[repoInfo] == nil) { - // Calling this should create the repo. - [FIRDatabase createDatabaseForTests:repoInfo config:config]; - } - - return configs[config.sessionIdentifier][repoInfo]; - } -} - -+ (FRepo *)createRepo:(FRepoInfo *)repoInfo - config:(FIRDatabaseConfig *)config - database:(FIRDatabase *)database { - [config freeze]; - FRepoDictionary *configs = [FRepoManager configs]; - @synchronized(configs) { - NSMutableDictionary<FRepoInfo *, FRepo *> *repos = - configs[config.sessionIdentifier]; - if (!repos) { - repos = [NSMutableDictionary dictionary]; - configs[config.sessionIdentifier] = repos; - } - FRepo *repo = repos[repoInfo]; - if (repo == nil) { - repo = [[FRepo alloc] initWithRepoInfo:repoInfo - config:config - database:database]; - repos[repoInfo] = repo; - return repo; - } else { - [NSException - raise:@"RepoExists" - format:@"createRepo called for Repo that already exists."]; - return nil; - } - } -} - -+ (void)interrupt:(FIRDatabaseConfig *)config { - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - FRepoDictionary *configs = [FRepoManager configs]; - NSMutableDictionary<FRepoInfo *, FRepo *> *repos = - configs[config.sessionIdentifier]; - for (FRepo *repo in [repos allValues]) { - [repo interrupt]; - } - }); -} - -+ (void)interruptAll { - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - FRepoDictionary *configs = [FRepoManager configs]; - for (NSMutableDictionary<FRepoInfo *, FRepo *> *repos in - [configs allValues]) { - for (FRepo *repo in [repos allValues]) { - [repo interrupt]; - } - } - }); -} - -+ (void)resume:(FIRDatabaseConfig *)config { - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - FRepoDictionary *configs = [FRepoManager configs]; - NSMutableDictionary<FRepoInfo *, FRepo *> *repos = - configs[config.sessionIdentifier]; - for (FRepo *repo in [repos allValues]) { - [repo resume]; - } - }); -} - -+ (void)resumeAll { - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - FRepoDictionary *configs = [FRepoManager configs]; - for (NSMutableDictionary<FRepoInfo *, FRepo *> *repos in - [configs allValues]) { - for (FRepo *repo in [repos allValues]) { - [repo resume]; - } - } - }); -} - -+ (void)disposeRepos:(FIRDatabaseConfig *)config { - // Do this synchronously to make sure we release our references to LevelDB - // before returning, allowing LevelDB to close and release its exclusive - // locks. - dispatch_sync([FIRDatabaseQuery sharedQueue], ^{ - FFLog(@"I-RDB040001", @"Disposing all repos for Config with name %@", - config.sessionIdentifier); - NSMutableDictionary *configs = [FRepoManager configs]; - for (FRepo *repo in [configs[config.sessionIdentifier] allValues]) { - [repo dispose]; - } - [configs removeObjectForKey:config.sessionIdentifier]; - }); -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo_Private.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo_Private.h deleted file mode 100644 index 8dc1350..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FRepo_Private.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FRepo.h" -#import "FSparseSnapshotTree.h" - -@class FSyncTree; -@class FAtomicNumber; -@class FEventRaiser; -@class FSnapshotHolder; - -@interface FRepo () - -- (void)runOnDisconnectEvents; - -@property(nonatomic, strong) FRepoInfo *repoInfo; -@property(nonatomic, strong) FPersistentConnection *connection; -@property(nonatomic, strong) FSnapshotHolder *infoData; -@property(nonatomic, strong) FSparseSnapshotTree *onDisconnect; -@property(nonatomic, strong) FEventRaiser *eventRaiser; -@property(nonatomic, strong) FSyncTree *serverSyncTree; - -// For testing. -@property(nonatomic) long dataUpdateCount; -@property(nonatomic) long rangeMergeUpdateCount; - -- (NSInteger)nextWriteId; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FServerValues.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FServerValues.h deleted file mode 100644 index c4dc7c5..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FServerValues.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FClock.h" -#import "FCompoundWrite.h" -#import "FNode.h" -#import "FSparseSnapshotTree.h" -#import "FSyncTree.h" -#import <Foundation/Foundation.h> - -@interface FServerValues : NSObject - -+ (NSDictionary *)generateServerValues:(id<FClock>)clock; - -+ (FCompoundWrite *)resolveDeferredValueCompoundWrite:(FCompoundWrite *)write - withSyncTree:(FSyncTree *)tree - atPath:(FPath *)path - serverValues: - (NSDictionary *)serverValues; -+ (id<FNode>)resolveDeferredValueSnapshot:(id<FNode>)node - withSyncTree:(FSyncTree *)existing - atPath:(FPath *)path - serverValues:(NSDictionary *)serverValues; -+ (id<FNode>)resolveDeferredValueSnapshot:(id<FNode>)node - withExisting:(id<FNode>)existing - serverValues:(NSDictionary *)serverValues; -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FServerValues.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FServerValues.m deleted file mode 100644 index dfda2d6..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FServerValues.m +++ /dev/null @@ -1,269 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FServerValues.h" -#import "FChildrenNode.h" -#import "FConstants.h" -#import "FLeafNode.h" -#import "FSnapshotUtilities.h" - -const NSString *kTimestamp = @"timestamp"; -const NSString *kIncrement = @"increment"; - -BOOL canBeRepresentedAsLong(NSNumber *num) { - switch (num.objCType[0]) { - case 'f': // float; fallthrough - case 'd': // double - return NO; - case 'L': // unsigned long; fallthrough - case 'Q': // unsigned long long; fallthrough - // Only use ulong(long) if there isn't an overflow. - if (num.unsignedLongLongValue > LONG_MAX) { - return NO; - } - } - return YES; -} - -// Running through CompoundWrites for all update paths has been shown to -// be a 20% pessimization in microbenchmarks. This is because it slows -// down by O(N) of the write queue length. To eliminate the performance -// hit, we wrap around existing data of either snapshot or CompoundWrite -// (allowing us to share code) and read from the CompoundWrite only when/where -// we need to calculate an incremented value's prior state. -@protocol ValueProvider <NSObject> -- (id<ValueProvider>)getChild:(NSString *)pathSegment; -- (id<FNode>)value; -@end - -@interface DeferredValueProvider : NSObject <ValueProvider> -- (instancetype)initWithSyncTree:(FSyncTree *)tree atPath:(FPath *)path; -- (id<ValueProvider>)getChild:(NSString *)pathSegment; -- (id<FNode>)value; -@property FPath *path; -@property FSyncTree *tree; -@end - -@interface ExistingValueProvider : NSObject <ValueProvider> -- (instancetype)initWithSnapshot:(id<FNode>)snapshot; -- (id<ValueProvider>)getChild:(NSString *)pathSegment; -- (id<FNode>)value; -@property id<FNode> snapshot; -@end - -@implementation DeferredValueProvider -- (instancetype)initWithSyncTree:(FSyncTree *)tree atPath:(FPath *)path { - self.tree = tree; - self.path = path; - return self; -} - -- (id<ValueProvider>)getChild:(NSString *)pathSegment { - FPath *child = [self.path childFromString:pathSegment]; - return [[DeferredValueProvider alloc] initWithSyncTree:self.tree - atPath:child]; -} - -- (id<FNode>)value { - return [self.tree calcCompleteEventCacheAtPath:self.path - excludeWriteIds:@[]]; -} -@end - -@implementation ExistingValueProvider -- (instancetype)initWithSnapshot:(id<FNode>)snapshot { - self.snapshot = snapshot; - return self; -} - -- (id<ValueProvider>)getChild:(NSString *)pathSegment { - return [[ExistingValueProvider alloc] - initWithSnapshot:[self.snapshot getImmediateChild:pathSegment]]; -} - -- (id<FNode>)value { - return self.snapshot; -} -@end - -@interface FServerValues () -+ (id)resolveScalarServerOp:(NSString *)op - withServerValues:(NSDictionary *)serverValues; -+ (id)resolveComplexServerOp:(NSDictionary *)op - withValueProvider:(id<ValueProvider>)existing - serverValues:(NSDictionary *)serverValues; -+ (id<FNode>)resolveDeferredValueSnapshot:(id<FNode>)node - withValueProvider:(id<ValueProvider>)existing - serverValues:(NSDictionary *)serverValues; - -@end - -@implementation FServerValues - -+ (NSDictionary *)generateServerValues:(id<FClock>)clock { - long long millis = (long long)([clock currentTime] * 1000); - return @{kTimestamp : [NSNumber numberWithLongLong:millis]}; -} - -+ (id)resolveDeferredValue:(id)val - withExisting:(id<ValueProvider>)existing - serverValues:(NSDictionary *)serverValues { - if (![val isKindOfClass:[NSDictionary class]]) { - return val; - } - NSDictionary *dict = val; - id op = dict[kServerValueSubKey]; - - if (op == nil) { - return val; - } else if ([op isKindOfClass:NSString.class]) { - return [FServerValues resolveScalarServerOp:op - withServerValues:serverValues]; - } else if ([op isKindOfClass:NSDictionary.class]) { - return [FServerValues resolveComplexServerOp:op - withValueProvider:existing - serverValues:serverValues]; - } - return val; -} - -+ (id)resolveScalarServerOp:(NSString *)op - withServerValues:(NSDictionary *)serverValues { - return serverValues[op]; -} - -+ (id)resolveComplexServerOp:(NSDictionary *)op - withValueProvider:(id<ValueProvider>)jitExisting - serverValues:(NSDictionary *)serverValues { - // Only increment is supported as of now - if (op[kIncrement] == nil) { - return nil; - } - - // Incrementing a non-number sets the value to the incremented amount - NSNumber *delta = op[kIncrement]; - id<FNode> existing = jitExisting.value; - if (![existing isLeafNode]) { - return delta; - } - FLeafNode *existingLeaf = existing; - if (![existingLeaf.value isKindOfClass:NSNumber.class]) { - return delta; - } - - NSNumber *existingNum = existingLeaf.value; - BOOL incrLong = canBeRepresentedAsLong(delta); - BOOL baseLong = canBeRepresentedAsLong(existingNum); - - if (incrLong && baseLong) { - long x = delta.longValue; - long y = existingNum.longValue; - long r = x + y; - - // See "Hacker's Delight" 2-12: Overflow if both arguments have the - // opposite sign of the result - if (((x ^ r) & (y ^ r)) >= 0) { - return @(r); - } - } - return @(delta.doubleValue + existingNum.doubleValue); -} - -+ (FCompoundWrite *)resolveDeferredValueCompoundWrite:(FCompoundWrite *)write - withSyncTree:(FSyncTree *)tree - atPath:(FPath *)path - serverValues: - (NSDictionary *)serverValues { - __block FCompoundWrite *resolved = write; - [write enumerateWrites:^(FPath *subPath, id<FNode> node, BOOL *stop) { - id<ValueProvider> existing = - [[DeferredValueProvider alloc] initWithSyncTree:tree - atPath:[path child:subPath]]; - id<FNode> resolvedNode = - [FServerValues resolveDeferredValueSnapshot:node - withValueProvider:existing - serverValues:serverValues]; - // Node actually changed, use pointer inequality here - if (resolvedNode != node) { - resolved = [resolved addWrite:resolvedNode atPath:subPath]; - } - }]; - return resolved; -} - -+ (id<FNode>)resolveDeferredValueSnapshot:(id<FNode>)node - withSyncTree:(FSyncTree *)tree - atPath:(FPath *)path - serverValues:(NSDictionary *)serverValues { - id<ValueProvider> jitExisting = - [[DeferredValueProvider alloc] initWithSyncTree:tree atPath:path]; - return [FServerValues resolveDeferredValueSnapshot:node - withValueProvider:jitExisting - serverValues:serverValues]; -} - -+ (id<FNode>)resolveDeferredValueSnapshot:(id<FNode>)node - withExisting:(id<FNode>)existing - serverValues:(NSDictionary *)serverValues { - id<ValueProvider> jitExisting = - [[ExistingValueProvider alloc] initWithSnapshot:existing]; - return [FServerValues resolveDeferredValueSnapshot:node - withValueProvider:jitExisting - serverValues:serverValues]; -} - -+ (id<FNode>)resolveDeferredValueSnapshot:(id<FNode>)node - withValueProvider:(id<ValueProvider>)existing - serverValues:(NSDictionary *)serverValues { - id priorityVal = - [FServerValues resolveDeferredValue:[[node getPriority] val] - withExisting:[existing getChild:@".priority"] - serverValues:serverValues]; - id<FNode> priority = [FSnapshotUtilities nodeFrom:priorityVal]; - - if ([node isLeafNode]) { - id value = [self resolveDeferredValue:[node val] - withExisting:existing - serverValues:serverValues]; - if (![value isEqual:[node val]] || - ![priority isEqual:[node getPriority]]) { - return [[FLeafNode alloc] initWithValue:value - withPriority:priority]; - } else { - return node; - } - } else { - __block FChildrenNode *newNode = node; - if (![priority isEqual:[node getPriority]]) { - newNode = [newNode updatePriority:priority]; - } - - [node enumerateChildrenUsingBlock:^(NSString *childKey, - id<FNode> childNode, BOOL *stop) { - id newChildNode = [FServerValues - resolveDeferredValueSnapshot:childNode - withValueProvider:[existing getChild:childKey] - serverValues:serverValues]; - if (![newChildNode isEqual:childNode]) { - newNode = [newNode updateImmediateChild:childKey - withNewChild:newChildNode]; - } - }]; - return newNode; - } -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSnapshotHolder.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSnapshotHolder.h deleted file mode 100644 index d682a8e..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSnapshotHolder.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FNode.h" -#import <Foundation/Foundation.h> - -@interface FSnapshotHolder : NSObject - -- (id<FNode>)getNode:(FPath *)path; -- (void)updateSnapshot:(FPath *)path withNewSnapshot:(id<FNode>)newSnapshotNode; - -@property(nonatomic, strong) id<FNode> rootNode; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSnapshotHolder.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSnapshotHolder.m deleted file mode 100644 index 59a7b52..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSnapshotHolder.m +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FSnapshotHolder.h" -#import "FEmptyNode.h" - -@interface FSnapshotHolder () - -@end - -@implementation FSnapshotHolder - -@synthesize rootNode; - -- (id)init { - self = [super init]; - if (self) { - self.rootNode = [FEmptyNode emptyNode]; - } - return self; -} - -- (id<FNode>)getNode:(FPath *)path { - return [self.rootNode getChild:path]; -} - -- (void)updateSnapshot:(FPath *)path - withNewSnapshot:(id<FNode>)newSnapshotNode { - self.rootNode = [self.rootNode updateChild:path - withNewChild:newSnapshotNode]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSparseSnapshotTree.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSparseSnapshotTree.h deleted file mode 100644 index dab5406..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSparseSnapshotTree.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FNode.h" -#import "FPath.h" -#import "FTypedefs_Private.h" -#import <Foundation/Foundation.h> - -@class FSparseSnapshotTree; - -typedef void (^fbt_void_nsstring_sstree)(NSString *, FSparseSnapshotTree *); - -@interface FSparseSnapshotTree : NSObject - -- (id<FNode>)findPath:(FPath *)path; -- (void)rememberData:(id<FNode>)data onPath:(FPath *)path; -- (BOOL)forgetPath:(FPath *)path; -- (void)forEachTreeAtPath:(FPath *)prefixPath do:(fbt_void_path_node)func; -- (void)forEachChild:(fbt_void_nsstring_sstree)func; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSparseSnapshotTree.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSparseSnapshotTree.m deleted file mode 100644 index 6219309..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSparseSnapshotTree.m +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FSparseSnapshotTree.h" -#import "FChildrenNode.h" - -@interface FSparseSnapshotTree () { - id<FNode> value; - NSMutableDictionary *children; -} - -@end - -@implementation FSparseSnapshotTree - -- (id)init { - self = [super init]; - if (self) { - value = nil; - children = nil; - } - return self; -} - -- (id<FNode>)findPath:(FPath *)path { - if (value != nil) { - return [value getChild:path]; - } else if (![path isEmpty] && children != nil) { - NSString *childKey = [path getFront]; - path = [path popFront]; - FSparseSnapshotTree *childTree = children[childKey]; - if (childTree != nil) { - return [childTree findPath:path]; - } else { - return nil; - } - } else { - return nil; - } -} - -- (void)rememberData:(id<FNode>)data onPath:(FPath *)path { - if ([path isEmpty]) { - value = data; - children = nil; - } else if (value != nil) { - value = [value updateChild:path withNewChild:data]; - } else { - if (children == nil) { - children = [[NSMutableDictionary alloc] init]; - } - - NSString *childKey = [path getFront]; - if (children[childKey] == nil) { - children[childKey] = [[FSparseSnapshotTree alloc] init]; - } - - FSparseSnapshotTree *child = children[childKey]; - path = [path popFront]; - [child rememberData:data onPath:path]; - } -} - -- (BOOL)forgetPath:(FPath *)path { - if ([path isEmpty]) { - value = nil; - children = nil; - return YES; - } else { - if (value != nil) { - if ([value isLeafNode]) { - // non-empty path at leaf. the path leads to nowhere - return NO; - } else { - id<FNode> tmp = value; - value = nil; - - [tmp enumerateChildrenUsingBlock:^(NSString *key, - id<FNode> node, BOOL *stop) { - [self rememberData:node onPath:[[FPath alloc] initWith:key]]; - }]; - - // we've cleared out the value and set children. Call ourself - // again to hit the next case - return [self forgetPath:path]; - } - } else if (children != nil) { - NSString *childKey = [path getFront]; - path = [path popFront]; - - if (children[childKey] != nil) { - FSparseSnapshotTree *child = children[childKey]; - BOOL safeToRemove = [child forgetPath:path]; - if (safeToRemove) { - [children removeObjectForKey:childKey]; - } - } - - if ([children count] == 0) { - children = nil; - return YES; - } else { - return NO; - } - } else { - return YES; - } - } -} - -- (void)forEachTreeAtPath:(FPath *)prefixPath do:(fbt_void_path_node)func { - if (value != nil) { - func(prefixPath, value); - } else { - [self forEachChild:^(NSString *key, FSparseSnapshotTree *tree) { - FPath *path = [prefixPath childFromString:key]; - [tree forEachTreeAtPath:path do:func]; - }]; - } -} - -- (void)forEachChild:(fbt_void_nsstring_sstree)func { - if (children != nil) { - for (NSString *key in children) { - FSparseSnapshotTree *tree = [children objectForKey:key]; - func(key, tree); - } - } -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncPoint.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncPoint.h deleted file mode 100644 index a9bd4d9..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncPoint.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@protocol FOperation; -@class FWriteTreeRef; -@protocol FNode; -@protocol FEventRegistration; -@class FQuerySpec; -@class FChildrenNode; -@class FTupleRemovedQueriesEvents; -@class FView; -@class FPath; -@class FCacheNode; -@class FPersistenceManager; - -@interface FSyncPoint : NSObject - -- (id)initWithPersistenceManager:(FPersistenceManager *)persistence; - -- (BOOL)isEmpty; - -/** - * Returns array of FEvent - */ -- (NSArray *)applyOperation:(id<FOperation>)operation - writesCache:(FWriteTreeRef *)writesCache - serverCache:(id<FNode>)optCompleteServerCache; - -/** - * Returns array of FEvent - */ -- (NSArray *)addEventRegistration:(id<FEventRegistration>)eventRegistration - forNonExistingViewForQuery:(FQuerySpec *)query - writesCache:(FWriteTreeRef *)writesCache - serverCache:(FCacheNode *)serverCache; - -- (NSArray *)addEventRegistration:(id<FEventRegistration>)eventRegistration - forExistingViewForQuery:(FQuerySpec *)query; - -- (FTupleRemovedQueriesEvents *)removeEventRegistration: - (id<FEventRegistration>)eventRegistration - forQuery:(FQuerySpec *)query - cancelError:(NSError *)cancelError; -/** - * Returns array of FViews - */ -- (NSArray *)queryViews; -- (id<FNode>)completeServerCacheAtPath:(FPath *)path; -- (FView *)viewForQuery:(FQuerySpec *)query; -- (BOOL)viewExistsForQuery:(FQuerySpec *)query; -- (BOOL)hasCompleteView; -- (FView *)completeView; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncPoint.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncPoint.m deleted file mode 100644 index 6496ae8..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncPoint.m +++ /dev/null @@ -1,302 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FSyncPoint.h" -#import "FCacheNode.h" -#import "FChildrenNode.h" -#import "FDataEvent.h" -#import "FEmptyNode.h" -#import "FEventRegistration.h" -#import "FIRDatabaseQuery.h" -#import "FNode.h" -#import "FOperation.h" -#import "FOperationSource.h" -#import "FPath.h" -#import "FPersistenceManager.h" -#import "FQueryParams.h" -#import "FQuerySpec.h" -#import "FTupleRemovedQueriesEvents.h" -#import "FView.h" -#import "FViewCache.h" -#import "FWriteTreeRef.h" - -/** - * SyncPoint represents a single location in a SyncTree with 1 or more event - * registrations, meaning we need to maintain 1 or more Views at this location - * to cache server data and raise appropriate events for server changes and user - * writes (set, transaction, update). - * - * It's responsible for: - * - Maintaining the set of 1 or more views necessary at this location (a - * SyncPoint with 0 views should be removed). - * - Proxying user / server operations to the views as appropriate (i.e. - * applyServerOverwrite, applyUserOverwrite, etc.) - */ -@interface FSyncPoint () -/** - * The Views being tracked at this location in the tree, stored as a map where - * the key is a queryParams and the value is the View for that query. - * - * NOTE: This list will be quite small (usually 1, but perhaps 2 or 3; any more - * is an odd use case). - * - * Maps NSString -> FView - */ -@property(nonatomic, strong) NSMutableDictionary *views; - -@property(nonatomic, strong) FPersistenceManager *persistenceManager; -@end - -@implementation FSyncPoint - -- (id)initWithPersistenceManager:(FPersistenceManager *)persistence { - self = [super init]; - if (self) { - self.persistenceManager = persistence; - self.views = [[NSMutableDictionary alloc] init]; - } - return self; -} - -- (BOOL)isEmpty { - return [self.views count] == 0; -} - -- (NSArray *)applyOperation:(id<FOperation>)operation - toView:(FView *)view - writesCache:(FWriteTreeRef *)writesCache - serverCache:(id<FNode>)optCompleteServerCache { - FViewOperationResult *result = [view applyOperation:operation - writesCache:writesCache - serverCache:optCompleteServerCache]; - if (!view.query.loadsAllData) { - NSMutableSet *removed = [NSMutableSet set]; - NSMutableSet *added = [NSMutableSet set]; - [result.changes enumerateObjectsUsingBlock:^( - FChange *change, NSUInteger idx, BOOL *stop) { - if (change.type == FIRDataEventTypeChildAdded) { - [added addObject:change.childKey]; - } else if (change.type == FIRDataEventTypeChildRemoved) { - [removed addObject:change.childKey]; - } - }]; - if ([removed count] > 0 || [added count] > 0) { - [self.persistenceManager - updateTrackedQueryKeysWithAddedKeys:added - removedKeys:removed - forQuery:view.query]; - } - } - return result.events; -} - -- (NSArray *)applyOperation:(id<FOperation>)operation - writesCache:(FWriteTreeRef *)writesCache - serverCache:(id<FNode>)optCompleteServerCache { - FQueryParams *queryParams = operation.source.queryParams; - if (queryParams != nil) { - FView *view = [self.views objectForKey:queryParams]; - NSAssert(view != nil, @"SyncTree gave us an op for an invalid query."); - return [self applyOperation:operation - toView:view - writesCache:writesCache - serverCache:optCompleteServerCache]; - } else { - NSMutableArray *events = [[NSMutableArray alloc] init]; - [self.views enumerateKeysAndObjectsUsingBlock:^( - FQueryParams *key, FView *view, BOOL *stop) { - NSArray *eventsForView = [self applyOperation:operation - toView:view - writesCache:writesCache - serverCache:optCompleteServerCache]; - [events addObjectsFromArray:eventsForView]; - }]; - return events; - } -} - -/** - * Add an event callback for the specified query - * Returns Array of FEvent events to raise. - */ -- (NSArray *)addEventRegistration:(id<FEventRegistration>)eventRegistration - forNonExistingViewForQuery:(FQuerySpec *)query - writesCache:(FWriteTreeRef *)writesCache - serverCache:(FCacheNode *)serverCache { - NSAssert(self.views[query.params] == nil, @"Found view for query: %@", - query.params); - // TODO: make writesCache take flag for complete server node - id<FNode> eventCache = [writesCache - calculateCompleteEventCacheWithCompleteServerCache: - serverCache.isFullyInitialized ? serverCache.node : nil]; - BOOL eventCacheComplete; - if (eventCache != nil) { - eventCacheComplete = YES; - } else { - eventCache = [writesCache - calculateCompleteEventChildrenWithCompleteServerChildren:serverCache - .node]; - eventCacheComplete = NO; - } - - FIndexedNode *indexed = [FIndexedNode indexedNodeWithNode:eventCache - index:query.index]; - FCacheNode *eventCacheNode = - [[FCacheNode alloc] initWithIndexedNode:indexed - isFullyInitialized:eventCacheComplete - isFiltered:NO]; - FViewCache *viewCache = - [[FViewCache alloc] initWithEventCache:eventCacheNode - serverCache:serverCache]; - FView *view = [[FView alloc] initWithQuery:query - initialViewCache:viewCache]; - // If this is a non-default query we need to tell persistence our current - // view of the data - if (!query.loadsAllData) { - NSMutableSet *allKeys = [NSMutableSet set]; - [view.eventCache enumerateChildrenUsingBlock:^( - NSString *key, id<FNode> node, BOOL *stop) { - [allKeys addObject:key]; - }]; - [self.persistenceManager setTrackedQueryKeys:allKeys forQuery:query]; - } - self.views[query.params] = view; - return [self addEventRegistration:eventRegistration - forExistingViewForQuery:query]; -} - -- (NSArray *)addEventRegistration:(id<FEventRegistration>)eventRegistration - forExistingViewForQuery:(FQuerySpec *)query { - FView *view = self.views[query.params]; - NSAssert(view != nil, @"No view for query: %@", query); - [view addEventRegistration:eventRegistration]; - return [view initialEvents:eventRegistration]; -} - -/** - * Remove event callback(s). Return cancelEvents if a cancelError is specified. - * - * If query is the default query, we'll check all views for the specified - * eventRegistration. If eventRegistration is nil, we'll remove all callbacks - * for the specified view(s). - * - * @return FTupleRemovedQueriesEvents removed queries and any cancel events - */ -- (FTupleRemovedQueriesEvents *)removeEventRegistration: - (id<FEventRegistration>)eventRegistration - forQuery:(FQuerySpec *)query - cancelError:(NSError *)cancelError { - NSMutableArray *removedQueries = [[NSMutableArray alloc] init]; - __block NSMutableArray *cancelEvents = [[NSMutableArray alloc] init]; - BOOL hadCompleteView = [self hasCompleteView]; - if ([query isDefault]) { - // When you do [ref removeObserverWithHandle:], we search all views for - // the registration to remove. - [self.views enumerateKeysAndObjectsUsingBlock:^( - FQueryParams *viewQueryParams, FView *view, - BOOL *stop) { - [cancelEvents - addObjectsFromArray:[view - removeEventRegistration:eventRegistration - cancelError:cancelError]]; - if ([view isEmpty]) { - [self.views removeObjectForKey:viewQueryParams]; - - // We'll deal with complete views later - if (![view.query loadsAllData]) { - [removedQueries addObject:view.query]; - } - } - }]; - } else { - // remove the callback from the specific view - FView *view = [self.views objectForKey:query.params]; - if (view != nil) { - [cancelEvents addObjectsFromArray: - [view removeEventRegistration:eventRegistration - cancelError:cancelError]]; - - if ([view isEmpty]) { - [self.views removeObjectForKey:query.params]; - - // We'll deal with complete views later - if (![view.query loadsAllData]) { - [removedQueries addObject:view.query]; - } - } - } - } - - if (hadCompleteView && ![self hasCompleteView]) { - // We removed our last complete view - [removedQueries addObject:[FQuerySpec defaultQueryAtPath:query.path]]; - } - - return [[FTupleRemovedQueriesEvents alloc] - initWithRemovedQueries:removedQueries - cancelEvents:cancelEvents]; -} - -- (NSArray *)queryViews { - __block NSMutableArray *filteredViews = [[NSMutableArray alloc] init]; - - [self.views enumerateKeysAndObjectsUsingBlock:^(FQueryParams *key, - FView *view, BOOL *stop) { - if (![view.query loadsAllData]) { - [filteredViews addObject:view]; - } - }]; - - return filteredViews; -} - -- (id<FNode>)completeServerCacheAtPath:(FPath *)path { - __block id<FNode> serverCache = nil; - [self.views enumerateKeysAndObjectsUsingBlock:^(FQueryParams *key, - FView *view, BOOL *stop) { - serverCache = [view completeServerCacheFor:path]; - *stop = (serverCache != nil); - }]; - return serverCache; -} - -- (FView *)viewForQuery:(FQuerySpec *)query { - return [self.views objectForKey:query.params]; -} - -- (BOOL)viewExistsForQuery:(FQuerySpec *)query { - return [self viewForQuery:query] != nil; -} - -- (BOOL)hasCompleteView { - return [self completeView] != nil; -} - -- (FView *)completeView { - __block FView *completeView = nil; - - [self.views enumerateKeysAndObjectsUsingBlock:^(FQueryParams *key, - FView *view, BOOL *stop) { - if ([view.query loadsAllData]) { - completeView = view; - *stop = YES; - } - }]; - - return completeView; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncTree.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncTree.h deleted file mode 100644 index ef89774..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncTree.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@class FListenProvider; -@protocol FNode; -@class FPath; -@protocol FEventRegistration; -@protocol FPersistedServerCache; -@class FQuerySpec; -@class FCompoundWrite; -@class FPersistenceManager; -@class FCompoundHash; -@protocol FClock; - -@protocol FSyncTreeHash <NSObject> - -- (NSString *)simpleHash; -- (FCompoundHash *)compoundHash; -- (BOOL)includeCompoundHash; - -@end - -@interface FSyncTree : NSObject - -- (id)initWithListenProvider:(FListenProvider *)provider; -- (id)initWithPersistenceManager:(FPersistenceManager *)persistenceManager - listenProvider:(FListenProvider *)provider; - -// These methods all return NSArray of FEvent -- (NSArray *)applyUserOverwriteAtPath:(FPath *)path - newData:(id<FNode>)newData - writeId:(NSInteger)writeId - isVisible:(BOOL)visible; -- (NSArray *)applyUserMergeAtPath:(FPath *)path - changedChildren:(FCompoundWrite *)changedChildren - writeId:(NSInteger)writeId; -- (NSArray *)ackUserWriteWithWriteId:(NSInteger)writeId - revert:(BOOL)revert - persist:(BOOL)persist - clock:(id<FClock>)clock; -- (NSArray *)applyServerOverwriteAtPath:(FPath *)path - newData:(id<FNode>)newData; -- (NSArray *)applyServerMergeAtPath:(FPath *)path - changedChildren:(FCompoundWrite *)changedChildren; -- (NSArray *)applyServerRangeMergeAtPath:(FPath *)path - updates:(NSArray *)ranges; -- (NSArray *)applyTaggedQueryOverwriteAtPath:(FPath *)path - newData:(id<FNode>)newData - tagId:(NSNumber *)tagId; -- (NSArray *)applyTaggedQueryMergeAtPath:(FPath *)path - changedChildren:(FCompoundWrite *)changedChildren - tagId:(NSNumber *)tagId; -- (NSArray *)applyTaggedServerRangeMergeAtPath:(FPath *)path - updates:(NSArray *)ranges - tagId:(NSNumber *)tagId; -- (NSArray *)addEventRegistration:(id<FEventRegistration>)eventRegistration - forQuery:(FQuerySpec *)query; -- (NSArray *)removeEventRegistration:(id<FEventRegistration>)eventRegistration - forQuery:(FQuerySpec *)query - cancelError:(NSError *)cancelError; -- (void)keepQuery:(FQuerySpec *)query synced:(BOOL)keepSynced; -- (NSArray *)removeAllWrites; - -- (id<FNode>)calcCompleteEventCacheAtPath:(FPath *)path - excludeWriteIds:(NSArray *)writeIdsToExclude; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncTree.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncTree.m deleted file mode 100644 index 6905302..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FSyncTree.m +++ /dev/null @@ -1,1042 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FSyncTree.h" -#import "FAckUserWrite.h" -#import "FAtomicNumber.h" -#import "FCacheNode.h" -#import "FChildrenNode.h" -#import "FCompoundHash.h" -#import "FCompoundWrite.h" -#import "FEmptyNode.h" -#import "FEventRaiser.h" -#import "FEventRegistration.h" -#import "FImmutableTree.h" -#import "FKeepSyncedEventRegistration.h" -#import "FListenComplete.h" -#import "FListenProvider.h" -#import "FMerge.h" -#import "FNode.h" -#import "FOperation.h" -#import "FOperationSource.h" -#import "FOverwrite.h" -#import "FPath.h" -#import "FPersistenceManager.h" -#import "FQueryParams.h" -#import "FQuerySpec.h" -#import "FRangeMerge.h" -#import "FServerValues.h" -#import "FSnapshotHolder.h" -#import "FSnapshotUtilities.h" -#import "FSyncPoint.h" -#import "FTupleRemovedQueriesEvents.h" -#import "FUtilities.h" -#import "FView.h" -#import "FWriteRecord.h" -#import "FWriteTree.h" -#import "FWriteTreeRef.h" -#import <FirebaseCore/FIRLogger.h> - -// Size after which we start including the compound hash -static const NSUInteger kFSizeThresholdForCompoundHash = 1024; - -@interface FListenContainer : NSObject <FSyncTreeHash> - -@property(nonatomic, strong) FView *view; -@property(nonatomic, copy) fbt_nsarray_nsstring onComplete; - -@end - -@implementation FListenContainer - -- (instancetype)initWithView:(FView *)view - onComplete:(fbt_nsarray_nsstring)onComplete { - self = [super init]; - if (self != nil) { - self->_view = view; - self->_onComplete = onComplete; - } - return self; -} - -- (id<FNode>)serverCache { - return self.view.serverCache; -} - -- (FCompoundHash *)compoundHash { - return [FCompoundHash fromNode:[self serverCache]]; -} - -- (NSString *)simpleHash { - return [[self serverCache] dataHash]; -} - -- (BOOL)includeCompoundHash { - return [FSnapshotUtilities estimateSerializedNodeSize:[self serverCache]] > - kFSizeThresholdForCompoundHash; -} - -@end - -@interface FSyncTree () - -/** - * Tree of SyncPoints. There's a SyncPoint at any location that has 1 or more - * views. - */ -@property(nonatomic, strong) FImmutableTree *syncPointTree; - -/** - * A tree of all pending user writes (user-initiated set, transactions, updates, - * etc) - */ -@property(nonatomic, strong) FWriteTree *pendingWriteTree; - -/** - * Maps tagId -> FTuplePathQueryParams - */ -@property(nonatomic, strong) NSMutableDictionary *tagToQueryMap; -@property(nonatomic, strong) NSMutableDictionary *queryToTagMap; -@property(nonatomic, strong) FListenProvider *listenProvider; -@property(nonatomic, strong) FPersistenceManager *persistenceManager; -@property(nonatomic, strong) FAtomicNumber *queryTagCounter; -@property(nonatomic, strong) NSMutableSet *keepSyncedQueries; - -@end - -/** - * SyncTree is the central class for managing event callback registration, data - * caching, views (query processing), and event generation. There are typically - * two SyncTree instances for each Repo, one for the normal Firebase data, and - * one for the .info data. - * - * It has a number of responsibilities, including: - * - Tracking all user event callbacks (registered via addEventRegistration: - * and removeEventRegistration:). - * - Applying and caching data changes for user setValue:, - * runTransactionBlock:, and updateChildValues: calls - * (applyUserOverwriteAtPath:, applyUserMergeAtPath:). - * - Applying and caching data changes for server data changes - * (applyServerOverwriteAtPath:, applyServerMergeAtPath:). - * - Generating user-facing events for server and user changes (all of the - * apply* methods return the set of events that need to be raised as a result). - * - Maintaining the appropriate set of server listens to ensure we are always - * subscribed to the correct set of paths and queries to satisfy the current set - * of user event callbacks (listens are started/stopped using the provided - * listenProvider). - * - * NOTE: Although SyncTree tracks event callbacks and calculates events to - * raise, the actual events are returned to the caller rather than raised - * synchronously. - */ -@implementation FSyncTree - -- (id)initWithListenProvider:(FListenProvider *)provider { - return [self initWithPersistenceManager:nil listenProvider:provider]; -} - -- (id)initWithPersistenceManager:(FPersistenceManager *)persistenceManager - listenProvider:(FListenProvider *)provider { - self = [super init]; - if (self) { - self.syncPointTree = [FImmutableTree empty]; - self.pendingWriteTree = [[FWriteTree alloc] init]; - self.tagToQueryMap = [[NSMutableDictionary alloc] init]; - self.queryToTagMap = [[NSMutableDictionary alloc] init]; - self.listenProvider = provider; - self.persistenceManager = persistenceManager; - self.queryTagCounter = [[FAtomicNumber alloc] init]; - self.keepSyncedQueries = [NSMutableSet set]; - } - return self; -} - -#pragma mark - -#pragma mark Apply Operations - -/** - * Apply data changes for a user-generated setValue: runTransactionBlock: - * updateChildValues:, etc. - * @return NSArray of FEvent to raise. - */ -- (NSArray *)applyUserOverwriteAtPath:(FPath *)path - newData:(id<FNode>)newData - writeId:(NSInteger)writeId - isVisible:(BOOL)visible { - // Record pending write - [self.pendingWriteTree addOverwriteAtPath:path - newData:newData - writeId:writeId - isVisible:visible]; - if (!visible) { - return @[]; - } else { - FOverwrite *operation = - [[FOverwrite alloc] initWithSource:[FOperationSource userInstance] - path:path - snap:newData]; - return [self applyOperationToSyncPoints:operation]; - } -} - -/** - * Apply the data from a user-generated updateChildValues: call - * @return NSArray of FEvent to raise. - */ -- (NSArray *)applyUserMergeAtPath:(FPath *)path - changedChildren:(FCompoundWrite *)changedChildren - writeId:(NSInteger)writeId { - // Record pending merge - [self.pendingWriteTree addMergeAtPath:path - changedChildren:changedChildren - writeId:writeId]; - - FMerge *operation = - [[FMerge alloc] initWithSource:[FOperationSource userInstance] - path:path - children:changedChildren]; - return [self applyOperationToSyncPoints:operation]; -} - -/** - * Acknowledge a pending user write that was previously registered with - * applyUserOverwriteAtPath: or applyUserMergeAtPath: - * TODO[offline]: Taking a serverClock here is awkward, but server values are - * awkward. :-( - * @return NSArray of FEvent to raise. - */ -- (NSArray *)ackUserWriteWithWriteId:(NSInteger)writeId - revert:(BOOL)revert - persist:(BOOL)persist - clock:(id<FClock>)clock { - FWriteRecord *write = [self.pendingWriteTree writeForId:writeId]; - BOOL needToReevaluate = [self.pendingWriteTree removeWriteId:writeId]; - if (write.visible) { - if (persist) { - [self.persistenceManager removeUserWrite:writeId]; - } - if (!revert) { - NSDictionary *serverValues = - [FServerValues generateServerValues:clock]; - if ([write isOverwrite]) { - id<FNode> resolvedNode = - [FServerValues resolveDeferredValueSnapshot:write.overwrite - withSyncTree:self - atPath:write.path - serverValues:serverValues]; - [self.persistenceManager applyUserWrite:resolvedNode - toServerCacheAtPath:write.path]; - } else { - FCompoundWrite *resolvedMerge = [FServerValues - resolveDeferredValueCompoundWrite:write.merge - withSyncTree:self - atPath:write.path - serverValues:serverValues]; - [self.persistenceManager applyUserMerge:resolvedMerge - toServerCacheAtPath:write.path]; - } - } - } - if (!needToReevaluate) { - return @[]; - } else { - __block FImmutableTree *affectedTree = [FImmutableTree empty]; - if (write.isOverwrite) { - affectedTree = [affectedTree setValue:@YES atPath:[FPath empty]]; - } else { - [write.merge - enumerateWrites:^(FPath *path, id<FNode> node, BOOL *stop) { - affectedTree = [affectedTree setValue:@YES atPath:path]; - }]; - } - FAckUserWrite *operation = - [[FAckUserWrite alloc] initWithPath:write.path - affectedTree:affectedTree - revert:revert]; - return [self applyOperationToSyncPoints:operation]; - } -} - -/** - * Apply new server data for the specified path - * @return NSArray of FEvent to raise. - */ -- (NSArray *)applyServerOverwriteAtPath:(FPath *)path - newData:(id<FNode>)newData { - [self.persistenceManager - updateServerCacheWithNode:newData - forQuery:[FQuerySpec defaultQueryAtPath:path]]; - FOverwrite *operation = - [[FOverwrite alloc] initWithSource:[FOperationSource serverInstance] - path:path - snap:newData]; - return [self applyOperationToSyncPoints:operation]; -} - -/** - * Applied new server data to be merged in at the specified path - * @return NSArray of FEvent to raise. - */ -- (NSArray *)applyServerMergeAtPath:(FPath *)path - changedChildren:(FCompoundWrite *)changedChildren { - [self.persistenceManager updateServerCacheWithMerge:changedChildren - atPath:path]; - FMerge *operation = - [[FMerge alloc] initWithSource:[FOperationSource serverInstance] - path:path - children:changedChildren]; - return [self applyOperationToSyncPoints:operation]; -} - -- (NSArray *)applyServerRangeMergeAtPath:(FPath *)path - updates:(NSArray *)ranges { - FSyncPoint *syncPoint = [self.syncPointTree valueAtPath:path]; - if (syncPoint == nil) { - // Removed view, so it's safe to just ignore this update - return @[]; - } else { - // This could be for any "complete" (unfiltered) view, and if there is - // more than one complete view, they should each have the same cache so - // it doesn't matter which one we use. - FView *view = [syncPoint completeView]; - if (view != nil) { - id<FNode> serverNode = [view serverCache]; - for (FRangeMerge *merge in ranges) { - serverNode = [merge applyToNode:serverNode]; - } - return [self applyServerOverwriteAtPath:path newData:serverNode]; - } else { - // There doesn't exist a view for this update, so it was removed and - // it's safe to just ignore this range merge - return @[]; - } - } -} - -/** - * Apply a listen complete to a path - * @return NSArray of FEvent to raise. - */ -- (NSArray *)applyListenCompleteAtPath:(FPath *)path { - [self.persistenceManager - setQueryComplete:[FQuerySpec defaultQueryAtPath:path]]; - id<FOperation> operation = [[FListenComplete alloc] - initWithSource:[FOperationSource serverInstance] - path:path]; - return [self applyOperationToSyncPoints:operation]; -} - -/** - * Apply a listen complete to a path - * @return NSArray of FEvent to raise. - */ -- (NSArray *)applyTaggedListenCompleteAtPath:(FPath *)path - tagId:(NSNumber *)tagId { - FQuerySpec *query = [self queryForTag:tagId]; - if (query != nil) { - [self.persistenceManager setQueryComplete:query]; - FPath *relativePath = [FPath relativePathFrom:query.path to:path]; - id<FOperation> op = [[FListenComplete alloc] - initWithSource:[FOperationSource forServerTaggedQuery:query.params] - path:relativePath]; - return [self applyTaggedOperation:op atPath:query.path]; - } else { - // We've already removed the query. No big deal, ignore the update. - return @[]; - } -} - -/** - * Internal helper method to apply tagged operation - */ -- (NSArray *)applyTaggedOperation:(id<FOperation>)operation - atPath:(FPath *)path { - FSyncPoint *syncPoint = [self.syncPointTree valueAtPath:path]; - NSAssert(syncPoint != nil, - @"Missing sync point for query tag that we're tracking."); - FWriteTreeRef *writesCache = - [self.pendingWriteTree childWritesForPath:path]; - return [syncPoint applyOperation:operation - writesCache:writesCache - serverCache:nil]; -} - -/** - * Apply new server data for the specified tagged query - * @return NSArray of FEvent to raise. - */ -- (NSArray *)applyTaggedQueryOverwriteAtPath:(FPath *)path - newData:(id<FNode>)newData - tagId:(NSNumber *)tagId { - FQuerySpec *query = [self queryForTag:tagId]; - if (query != nil) { - FPath *relativePath = [FPath relativePathFrom:query.path to:path]; - FQuerySpec *queryToOverwrite = - relativePath.isEmpty ? query : [FQuerySpec defaultQueryAtPath:path]; - [self.persistenceManager updateServerCacheWithNode:newData - forQuery:queryToOverwrite]; - FOverwrite *operation = [[FOverwrite alloc] - initWithSource:[FOperationSource forServerTaggedQuery:query.params] - path:relativePath - snap:newData]; - return [self applyTaggedOperation:operation atPath:query.path]; - } else { - // Query must have been removed already - return @[]; - } -} - -/** - * Apply server data to be merged in for the specified tagged query - * @return NSArray of FEvent to raise. - */ -- (NSArray *)applyTaggedQueryMergeAtPath:(FPath *)path - changedChildren:(FCompoundWrite *)changedChildren - tagId:(NSNumber *)tagId { - FQuerySpec *query = [self queryForTag:tagId]; - if (query != nil) { - FPath *relativePath = [FPath relativePathFrom:query.path to:path]; - [self.persistenceManager updateServerCacheWithMerge:changedChildren - atPath:path]; - FMerge *operation = [[FMerge alloc] - initWithSource:[FOperationSource forServerTaggedQuery:query.params] - path:relativePath - children:changedChildren]; - return [self applyTaggedOperation:operation atPath:query.path]; - } else { - // We've already removed the query. No big deal, ignore the update. - return @[]; - } -} - -- (NSArray *)applyTaggedServerRangeMergeAtPath:(FPath *)path - updates:(NSArray *)ranges - tagId:(NSNumber *)tagId { - FQuerySpec *query = [self queryForTag:tagId]; - if (query != nil) { - NSAssert([path isEqual:query.path], - @"Tagged update path and query path must match"); - FSyncPoint *syncPoint = [self.syncPointTree valueAtPath:path]; - NSAssert(syncPoint != nil, - @"Missing sync point for query tag that we're tracking."); - FView *view = [syncPoint viewForQuery:query]; - NSAssert(view != nil, - @"Missing view for query tag that we're tracking"); - id<FNode> serverNode = [view serverCache]; - for (FRangeMerge *merge in ranges) { - serverNode = [merge applyToNode:serverNode]; - } - return [self applyTaggedQueryOverwriteAtPath:path - newData:serverNode - tagId:tagId]; - } else { - // We've already removed the query. No big deal, ignore the update. - return @[]; - } -} - -/** - * Add an event callback for the specified query - * @return NSArray of FEvent to raise. - */ -- (NSArray *)addEventRegistration:(id<FEventRegistration>)eventRegistration - forQuery:(FQuerySpec *)query { - FPath *path = query.path; - - __block BOOL foundAncestorDefaultView = NO; - [self.syncPointTree - forEachOnPath:query.path - whileBlock:^BOOL(FPath *pathToSyncPoint, FSyncPoint *syncPoint) { - foundAncestorDefaultView = - foundAncestorDefaultView || [syncPoint hasCompleteView]; - return !foundAncestorDefaultView; - }]; - - [self.persistenceManager setQueryActive:query]; - - FSyncPoint *syncPoint = [self.syncPointTree valueAtPath:path]; - if (syncPoint == nil) { - syncPoint = [[FSyncPoint alloc] - initWithPersistenceManager:self.persistenceManager]; - self.syncPointTree = [self.syncPointTree setValue:syncPoint - atPath:path]; - } - - BOOL viewAlreadyExists = [syncPoint viewExistsForQuery:query]; - NSArray *events; - if (viewAlreadyExists) { - events = [syncPoint addEventRegistration:eventRegistration - forExistingViewForQuery:query]; - } else { - if (![query loadsAllData]) { - // We need to track a tag for this query - NSAssert(self.queryToTagMap[query] == nil, - @"View does not exist, but we have a tag"); - NSNumber *tagId = [self.queryTagCounter getAndIncrement]; - self.queryToTagMap[query] = tagId; - self.tagToQueryMap[tagId] = query; - } - - FWriteTreeRef *writesCache = - [self.pendingWriteTree childWritesForPath:path]; - FCacheNode *serverCache = [self serverCacheForQuery:query]; - events = [syncPoint addEventRegistration:eventRegistration - forNonExistingViewForQuery:query - writesCache:writesCache - serverCache:serverCache]; - - // There was no view and no default listen - if (!foundAncestorDefaultView) { - FView *view = [syncPoint viewForQuery:query]; - NSMutableArray *mutableEvents = [events mutableCopy]; - [mutableEvents - addObjectsFromArray:[self setupListenerOnQuery:query - view:view]]; - events = mutableEvents; - } - } - - return events; -} - -- (FCacheNode *)serverCacheForQuery:(FQuerySpec *)query { - __block id<FNode> serverCacheNode = nil; - - [self.syncPointTree - forEachOnPath:query.path - whileBlock:^BOOL(FPath *pathToSyncPoint, FSyncPoint *syncPoint) { - FPath *relativePath = [FPath relativePathFrom:pathToSyncPoint - to:query.path]; - serverCacheNode = - [syncPoint completeServerCacheAtPath:relativePath]; - return serverCacheNode == nil; - }]; - - FCacheNode *serverCache; - if (serverCacheNode != nil) { - FIndexedNode *indexed = - [FIndexedNode indexedNodeWithNode:serverCacheNode - index:query.index]; - serverCache = [[FCacheNode alloc] initWithIndexedNode:indexed - isFullyInitialized:YES - isFiltered:NO]; - } else { - FCacheNode *persistenceServerCache = - [self.persistenceManager serverCacheForQuery:query]; - if (persistenceServerCache.isFullyInitialized) { - serverCache = persistenceServerCache; - } else { - serverCacheNode = [FEmptyNode emptyNode]; - - FImmutableTree *subtree = - [self.syncPointTree subtreeAtPath:query.path]; - [subtree - forEachChild:^(NSString *childKey, FSyncPoint *childSyncPoint) { - id<FNode> completeCache = - [childSyncPoint completeServerCacheAtPath:[FPath empty]]; - if (completeCache) { - serverCacheNode = - [serverCacheNode updateImmediateChild:childKey - withNewChild:completeCache]; - } - }]; - // Fill the node with any available children we have - [persistenceServerCache.node - enumerateChildrenUsingBlock:^(NSString *key, id<FNode> node, - BOOL *stop) { - if (![serverCacheNode hasChild:key]) { - serverCacheNode = - [serverCacheNode updateImmediateChild:key - withNewChild:node]; - } - }]; - FIndexedNode *indexed = - [FIndexedNode indexedNodeWithNode:serverCacheNode - index:query.index]; - serverCache = [[FCacheNode alloc] initWithIndexedNode:indexed - isFullyInitialized:NO - isFiltered:NO]; - } - } - - return serverCache; -} - -/** - * Remove event callback(s). - * - * If query is the default query, we'll check all queries for the specified - * eventRegistration. If eventRegistration is null, we'll remove all callbacks - * for the specified query/queries. - * - * @param eventRegistration if nil, all callbacks are removed - * @param cancelError If provided, appropriate cancel events will be returned - * @return NSArray of FEvent to raise. - */ -- (NSArray *)removeEventRegistration:(id<FEventRegistration>)eventRegistration - forQuery:(FQuerySpec *)query - cancelError:(NSError *)cancelError { - // Find the syncPoint first. Then deal with whether or not it has matching - // listeners - FPath *path = query.path; - FSyncPoint *maybeSyncPoint = [self.syncPointTree valueAtPath:path]; - NSArray *cancelEvents = @[]; - - // A removal on a default query affects all queries at that location. A - // removal on an indexed query, even one without other query constraints, - // does *not* affect all queries at that location. So this check must be for - // 'default', and not loadsAllData: - if (maybeSyncPoint && - ([query isDefault] || [maybeSyncPoint viewExistsForQuery:query])) { - FTupleRemovedQueriesEvents *removedAndEvents = - [maybeSyncPoint removeEventRegistration:eventRegistration - forQuery:query - cancelError:cancelError]; - if ([maybeSyncPoint isEmpty]) { - self.syncPointTree = [self.syncPointTree removeValueAtPath:path]; - } - NSArray *removed = removedAndEvents.removedQueries; - cancelEvents = removedAndEvents.cancelEvents; - - // We may have just removed one of many listeners and can short-circuit - // this whole process We may also not have removed a default listener, - // in which case all of the descendant listeners should already be - // properly set up. - // - // Since indexed queries can shadow if they don't have other query - // constraints, check for loadsAllData: instead of isDefault: - NSUInteger defaultQueryIndex = [removed - indexOfObjectPassingTest:^BOOL(FQuerySpec *q, NSUInteger idx, - BOOL *stop) { - return [q loadsAllData]; - }]; - BOOL removingDefault = defaultQueryIndex != NSNotFound; - [removed enumerateObjectsUsingBlock:^(FQuerySpec *query, NSUInteger idx, - BOOL *stop) { - [self.persistenceManager setQueryInactive:query]; - }]; - NSNumber *covered = [self.syncPointTree - findOnPath:path - andApplyBlock:^id(FPath *relativePath, - FSyncPoint *parentSyncPoint) { - return - [NSNumber numberWithBool:[parentSyncPoint hasCompleteView]]; - }]; - - if (removingDefault && ![covered boolValue]) { - FImmutableTree *subtree = [self.syncPointTree subtreeAtPath:path]; - // There are potentially child listeners. Determine what if any - // listens we need to send before executing the removal - if (![subtree isEmpty]) { - // We need to fold over our subtree and collect the listeners to - // send - NSArray *newViews = - [self collectDistinctViewsForSubTree:subtree]; - - // Ok, we've collected all the listens we need. Set them up. - [newViews enumerateObjectsUsingBlock:^( - FView *view, NSUInteger idx, BOOL *stop) { - FQuerySpec *newQuery = view.query; - FListenContainer *listenContainer = - [self createListenerForView:view]; - self.listenProvider.startListening( - [self queryForListening:newQuery], - [self tagForQuery:newQuery], listenContainer, - listenContainer.onComplete); - }]; - } else { - // There's nothing below us, so nothing we need to start - // listening on - } - } - - // If we removed anything and we're not covered by a higher up listen, - // we need to stop listening on this query. The above block has us - // covered in terms of making sure we're set up on listens lower in the - // tree. Also, note that if we have a cancelError, it's already been - // removed at the provider level. - if (![covered boolValue] && [removed count] > 0 && cancelError == nil) { - // If we removed a default, then we weren't listening on any of the - // other queries here. Just cancel the one default. Otherwise, we - // need to iterate through and cancel each individual query - if (removingDefault) { - // We don't tag default listeners - self.listenProvider.stopListening( - [self queryForListening:query], nil); - } else { - [removed - enumerateObjectsUsingBlock:^(FQuerySpec *queryToRemove, - NSUInteger idx, BOOL *stop) { - NSNumber *tagToRemove = - [self.queryToTagMap objectForKey:queryToRemove]; - self.listenProvider.stopListening( - [self queryForListening:queryToRemove], tagToRemove); - }]; - } - } - // Now, clear all the tags we're tracking for the removed listens. - [self removeTags:removed]; - } else { - // No-op, this listener must've been already removed - } - return cancelEvents; -} - -- (void)keepQuery:(FQuerySpec *)query synced:(BOOL)keepSynced { - // Only do something if we actually need to add/remove an event registration - if (keepSynced && ![self.keepSyncedQueries containsObject:query]) { - [self addEventRegistration:[FKeepSyncedEventRegistration instance] - forQuery:query]; - [self.keepSyncedQueries addObject:query]; - } else if (!keepSynced && [self.keepSyncedQueries containsObject:query]) { - [self removeEventRegistration:[FKeepSyncedEventRegistration instance] - forQuery:query - cancelError:nil]; - [self.keepSyncedQueries removeObject:query]; - } -} - -- (NSArray *)removeAllWrites { - [self.persistenceManager removeAllUserWrites]; - NSArray *removedWrites = [self.pendingWriteTree removeAllWrites]; - if (removedWrites.count > 0) { - FImmutableTree *affectedTree = - [[FImmutableTree empty] setValue:@YES atPath:[FPath empty]]; - return [self applyOperationToSyncPoints:[[FAckUserWrite alloc] - initWithPath:[FPath empty] - affectedTree:affectedTree - revert:YES]]; - } else { - return @[]; - } -} - -/** - * Returns a complete cache, if we have one, of the data at a particular path. - * The location must have a listener above it, but as this is only used by - * transaction code, that should always be the case anyways. - * - * Note: this method will *include* hidden writes from transaction with - * applyLocally set to false. - * @param path The path to the data we want - * @param writeIdsToExclude A specific set to be excluded - */ -- (id<FNode>)calcCompleteEventCacheAtPath:(FPath *)path - excludeWriteIds:(NSArray *)writeIdsToExclude { - BOOL includeHiddenSets = YES; - FWriteTree *writeTree = self.pendingWriteTree; - id<FNode> serverCache = [self.syncPointTree - findOnPath:path - andApplyBlock:^id<FNode>(FPath *pathSoFar, FSyncPoint *syncPoint) { - FPath *relativePath = [FPath relativePathFrom:pathSoFar to:path]; - id<FNode> serverCache = - [syncPoint completeServerCacheAtPath:relativePath]; - if (serverCache) { - return serverCache; - } else { - return nil; - } - }]; - return [writeTree calculateCompleteEventCacheAtPath:path - completeServerCache:serverCache - excludeWriteIds:writeIdsToExclude - includeHiddenWrites:includeHiddenSets]; -} - -#pragma mark - -#pragma mark Private Methods -/** - * This collapses multiple unfiltered views into a single view, since we only - * need a single listener for them. - * @return NSArray of FView - */ -- (NSArray *)collectDistinctViewsForSubTree:(FImmutableTree *)subtree { - return [subtree foldWithBlock:^NSArray *(FPath *relativePath, - FSyncPoint *maybeChildSyncPoint, - NSDictionary *childMap) { - if (maybeChildSyncPoint && [maybeChildSyncPoint hasCompleteView]) { - FView *completeView = [maybeChildSyncPoint completeView]; - return @[ completeView ]; - } else { - // No complete view here, flatten any deeper listens into an array - NSMutableArray *views = [[NSMutableArray alloc] init]; - if (maybeChildSyncPoint) { - views = [[maybeChildSyncPoint queryViews] mutableCopy]; - } - [childMap enumerateKeysAndObjectsUsingBlock:^( - NSString *childKey, NSArray *childViews, BOOL *stop) { - [views addObjectsFromArray:childViews]; - }]; - return views; - } - }]; -} - -/** - * @param queries NSArray of FQuerySpec - */ -- (void)removeTags:(NSArray *)queries { - [queries enumerateObjectsUsingBlock:^(FQuerySpec *removedQuery, - NSUInteger idx, BOOL *stop) { - if (![removedQuery loadsAllData]) { - // We should have a tag for this - NSNumber *removedQueryTag = self.queryToTagMap[removedQuery]; - [self.queryToTagMap removeObjectForKey:removedQuery]; - [self.tagToQueryMap removeObjectForKey:removedQueryTag]; - } - }]; -} - -- (FQuerySpec *)queryForListening:(FQuerySpec *)query { - if (query.loadsAllData && !query.isDefault) { - // We treat queries that load all data as default queries - return [FQuerySpec defaultQueryAtPath:query.path]; - } else { - return query; - } -} - -/** - * For a given new listen, manage the de-duplication of outstanding - * subscriptions. - * @return NSArray of FEvent events to support synchronous data sources - */ -- (NSArray *)setupListenerOnQuery:(FQuerySpec *)query view:(FView *)view { - FPath *path = query.path; - NSNumber *tagId = [self tagForQuery:query]; - FListenContainer *listenContainer = [self createListenerForView:view]; - - NSArray *events = self.listenProvider.startListening( - [self queryForListening:query], tagId, listenContainer, - listenContainer.onComplete); - - FImmutableTree *subtree = [self.syncPointTree subtreeAtPath:path]; - // The root of this subtree has our query. We're here because we definitely - // need to send a listen for that, but we may need to shadow other listens - // as well. - if (tagId != nil) { - NSAssert(![subtree.value hasCompleteView], - @"If we're adding a query, it shouldn't be shadowed"); - } else { - // Shadow everything at or below this location, this is a default - // listener. - NSArray *queriesToStop = - [subtree foldWithBlock:^id(FPath *relativePath, - FSyncPoint *maybeChildSyncPoint, - NSDictionary *childMap) { - if (![relativePath isEmpty] && maybeChildSyncPoint != nil && - [maybeChildSyncPoint hasCompleteView]) { - return @[ [maybeChildSyncPoint completeView].query ]; - } else { - // No default listener here, flatten any deeper queries into - // an array - NSMutableArray *queries = [[NSMutableArray alloc] init]; - if (maybeChildSyncPoint != nil) { - for (FView *view in [maybeChildSyncPoint queryViews]) { - [queries addObject:view.query]; - } - } - [childMap - enumerateKeysAndObjectsUsingBlock:^( - NSString *key, NSArray *childQueries, BOOL *stop) { - [queries addObjectsFromArray:childQueries]; - }]; - return queries; - } - }]; - for (FQuerySpec *queryToStop in queriesToStop) { - self.listenProvider.stopListening( - [self queryForListening:queryToStop], - [self tagForQuery:queryToStop]); - } - } - return events; -} - -- (FListenContainer *)createListenerForView:(FView *)view { - FQuerySpec *query = view.query; - NSNumber *tagId = [self tagForQuery:query]; - - FListenContainer *listenContainer = [[FListenContainer alloc] - initWithView:view - onComplete:^(NSString *status) { - if ([status isEqualToString:@"ok"]) { - if (tagId != nil) { - return [self applyTaggedListenCompleteAtPath:query.path - tagId:tagId]; - } else { - return [self applyListenCompleteAtPath:query.path]; - } - } else { - // If a listen failed, kill all of the listeners here, not just - // the one that triggered the error. Note that this may need to - // be scoped to just this listener if we change permissions on - // filtered children - NSError *error = [FUtilities errorForStatus:status - andReason:nil]; - FFWarn(@"I-RDB038012", @"Listener at %@ failed: %@", query.path, - status); - return [self removeEventRegistration:nil - forQuery:query - cancelError:error]; - } - }]; - - return listenContainer; -} - -/** - * @return The query associated with the given tag, if we have one - */ -- (FQuerySpec *)queryForTag:(NSNumber *)tagId { - return self.tagToQueryMap[tagId]; -} - -/** - * @return The tag associated with the given query - */ -- (NSNumber *)tagForQuery:(FQuerySpec *)query { - return self.queryToTagMap[query]; -} - -#pragma mark - -#pragma mark applyOperation Helpers - -/** -* A helper method that visits all descendant and ancestor SyncPoints, applying -the operation. -* -* NOTES: -* - Descendant SyncPoints will be visited first (since we raise events -depth-first). - -* - We call applyOperation: on each SyncPoint passing three things: -* 1. A version of the Operation that has been made relative to the SyncPoint -location. -* 2. A WriteTreeRef of any writes we have cached at the SyncPoint location. -* 3. A snapshot Node with cached server data, if we have it. - -* - We concatenate all of the events returned by each SyncPoint and return the -result. -* -* @return Array of FEvent -*/ -- (NSArray *)applyOperationToSyncPoints:(id<FOperation>)operation { - return [self applyOperationHelper:operation - syncPointTree:self.syncPointTree - serverCache:nil - writesCache:[self.pendingWriteTree - childWritesForPath:[FPath empty]]]; -} - -/** - * Recursive helper for applyOperationToSyncPoints_ - */ -- (NSArray *)applyOperationHelper:(id<FOperation>)operation - syncPointTree:(FImmutableTree *)syncPointTree - serverCache:(id<FNode>)serverCache - writesCache:(FWriteTreeRef *)writesCache { - if ([operation.path isEmpty]) { - return [self applyOperationDescendantsHelper:operation - syncPointTree:syncPointTree - serverCache:serverCache - writesCache:writesCache]; - } else { - FSyncPoint *syncPoint = syncPointTree.value; - - // If we don't have cached server data, see if we can get it from this - // SyncPoint - if (serverCache == nil && syncPoint != nil) { - serverCache = [syncPoint completeServerCacheAtPath:[FPath empty]]; - } - - NSMutableArray *events = [[NSMutableArray alloc] init]; - NSString *childKey = [operation.path getFront]; - id<FOperation> childOperation = [operation operationForChild:childKey]; - FImmutableTree *childTree = [syncPointTree.children get:childKey]; - if (childTree != nil && childOperation != nil) { - id<FNode> childServerCache = - serverCache ? [serverCache getImmediateChild:childKey] : nil; - FWriteTreeRef *childWritesCache = - [writesCache childWriteTreeRef:childKey]; - [events - addObjectsFromArray:[self - applyOperationHelper:childOperation - syncPointTree:childTree - serverCache:childServerCache - writesCache:childWritesCache]]; - } - - if (syncPoint) { - [events addObjectsFromArray:[syncPoint applyOperation:operation - writesCache:writesCache - serverCache:serverCache]]; - } - - return events; - } -} - -/** - * Recursive helper for applyOperationToSyncPoints: - */ -- (NSArray *)applyOperationDescendantsHelper:(id<FOperation>)operation - syncPointTree:(FImmutableTree *)syncPointTree - serverCache:(id<FNode>)serverCache - writesCache:(FWriteTreeRef *)writesCache { - FSyncPoint *syncPoint = syncPointTree.value; - - // If we don't have cached server data, see if we can get it from this - // SyncPoint - id<FNode> resolvedServerCache; - if (serverCache == nil & syncPoint != nil) { - resolvedServerCache = - [syncPoint completeServerCacheAtPath:[FPath empty]]; - } else { - resolvedServerCache = serverCache; - } - - NSMutableArray *events = [[NSMutableArray alloc] init]; - [syncPointTree.children enumerateKeysAndObjectsUsingBlock:^( - NSString *childKey, FImmutableTree *childTree, - BOOL *stop) { - id<FNode> childServerCache = nil; - if (resolvedServerCache != nil) { - childServerCache = [resolvedServerCache getImmediateChild:childKey]; - } - FWriteTreeRef *childWritesCache = - [writesCache childWriteTreeRef:childKey]; - id<FOperation> childOperation = [operation operationForChild:childKey]; - if (childOperation != nil) { - [events addObjectsFromArray: - [self applyOperationDescendantsHelper:childOperation - syncPointTree:childTree - serverCache:childServerCache - writesCache:childWritesCache]]; - } - }]; - - if (syncPoint) { - [events - addObjectsFromArray:[syncPoint applyOperation:operation - writesCache:writesCache - serverCache:resolvedServerCache]]; - } - - return events; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteRecord.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteRecord.h deleted file mode 100644 index 435fb6a..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteRecord.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@class FPath; -@class FCompoundWrite; -@protocol FNode; - -@interface FWriteRecord : NSObject - -- initWithPath:(FPath *)path - overwrite:(id<FNode>)overwrite - writeId:(NSInteger)writeId - visible:(BOOL)isVisible; -- initWithPath:(FPath *)path - merge:(FCompoundWrite *)merge - writeId:(NSInteger)writeId; - -@property(nonatomic, readonly) NSInteger writeId; -@property(nonatomic, strong, readonly) FPath *path; -@property(nonatomic, strong, readonly) id<FNode> overwrite; -/** - * Maps NSString -> id<FNode> - */ -@property(nonatomic, strong, readonly) FCompoundWrite *merge; -@property(nonatomic, readonly) BOOL visible; - -- (BOOL)isMerge; -- (BOOL)isOverwrite; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteRecord.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteRecord.m deleted file mode 100644 index be1816e..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteRecord.m +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FWriteRecord.h" -#import "FCompoundWrite.h" -#import "FNode.h" -#import "FPath.h" - -@interface FWriteRecord () -@property(nonatomic, readwrite) NSInteger writeId; -@property(nonatomic, strong, readwrite) FPath *path; -@property(nonatomic, strong, readwrite) id<FNode> overwrite; -@property(nonatomic, strong, readwrite) FCompoundWrite *merge; -@property(nonatomic, readwrite) BOOL visible; -@end - -@implementation FWriteRecord - -- (id)initWithPath:(FPath *)path - overwrite:(id<FNode>)overwrite - writeId:(NSInteger)writeId - visible:(BOOL)isVisible { - self = [super init]; - if (self) { - self.path = path; - if (overwrite == nil) { - [NSException raise:NSInvalidArgumentException - format:@"Can't pass nil as overwrite parameter to an " - @"overwrite write record"]; - } - self.overwrite = overwrite; - self.merge = nil; - self.writeId = writeId; - self.visible = isVisible; - } - return self; -} - -- (id)initWithPath:(FPath *)path - merge:(FCompoundWrite *)merge - writeId:(NSInteger)writeId { - self = [super init]; - if (self) { - self.path = path; - if (merge == nil) { - [NSException raise:NSInvalidArgumentException - format:@"Can't pass nil as merge parameter to an merge " - @"write record"]; - } - self.overwrite = nil; - self.merge = merge; - self.writeId = writeId; - self.visible = YES; - } - return self; -} - -- (id<FNode>)overwrite { - if (self->_overwrite == nil) { - [NSException raise:NSInvalidArgumentException - format:@"Can't get overwrite for merge write record!"]; - } - return self->_overwrite; -} - -- (FCompoundWrite *)compoundWrite { - if (self->_merge == nil) { - [NSException raise:NSInvalidArgumentException - format:@"Can't get merge for overwrite write record!"]; - } - return self->_merge; -} - -- (BOOL)isMerge { - return self->_merge != nil; -} - -- (BOOL)isOverwrite { - return self->_overwrite != nil; -} - -- (NSString *)description { - if (self.isOverwrite) { - return - [NSString stringWithFormat:@"FWriteRecord { writeId = %lu, path = " - @"%@, overwrite = %@, visible = %d }", - (unsigned long)self.writeId, self.path, - self.overwrite, self.visible]; - } else { - return [NSString - stringWithFormat: - @"FWriteRecord { writeId = %lu, path = %@, merge = %@ }", - (unsigned long)self.writeId, self.path, self.merge]; - } -} - -- (BOOL)isEqual:(id)object { - if (![object isKindOfClass:[self class]]) { - return NO; - } - FWriteRecord *other = (FWriteRecord *)object; - if (self->_writeId != other->_writeId) - return NO; - if (self->_path != other->_path && ![self->_path isEqual:other->_path]) - return NO; - if (self->_overwrite != other->_overwrite && - ![self->_overwrite isEqual:other->_overwrite]) - return NO; - if (self->_merge != other->_merge && ![self->_merge isEqual:other->_merge]) - return NO; - if (self->_visible != other->_visible) - return NO; - - return YES; -} - -- (NSUInteger)hash { - NSUInteger hash = self->_writeId * 17; - hash = hash * 31 + self->_path.hash; - hash = hash * 31 + self->_overwrite.hash; - hash = hash * 31 + self->_merge.hash; - hash = hash * 31 + ((self->_visible) ? 1 : 0); - return hash; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTree.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTree.h deleted file mode 100644 index 178946b..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTree.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@class FPath; -@protocol FNode; -@class FCompoundWrite; -@class FWriteTreeRef; -@class FChildrenNode; -@class FNamedNode; -@class FWriteRecord; -@protocol FIndex; -@class FCacheNode; - -@interface FWriteTree : NSObject - -- (FWriteTreeRef *)childWritesForPath:(FPath *)path; -- (void)addOverwriteAtPath:(FPath *)path - newData:(id<FNode>)newData - writeId:(NSInteger)writeId - isVisible:(BOOL)visible; -- (void)addMergeAtPath:(FPath *)path - changedChildren:(FCompoundWrite *)changedChildren - writeId:(NSInteger)writeId; -- (BOOL)removeWriteId:(NSInteger)writeId; -- (NSArray *)removeAllWrites; -- (FWriteRecord *)writeForId:(NSInteger)writeId; - -- (id<FNode>)calculateCompleteEventCacheAtPath:(FPath *)treePath - completeServerCache:(id<FNode>)completeServerCache - excludeWriteIds:(NSArray *)writeIdsToExclude - includeHiddenWrites:(BOOL)includeHiddenWrites; - -- (id<FNode>)calculateCompleteEventChildrenAtPath:(FPath *)treePath - completeServerChildren: - (id<FNode>)completeServerChildren; - -- (id<FNode>) - calculateEventCacheAfterServerOverwriteAtPath:(FPath *)treePath - childPath:(FPath *)childPath - existingEventSnap:(id<FNode>)existingEventSnap - existingServerSnap:(id<FNode>)existingServerSnap; - -- (id<FNode>)calculateCompleteChildAtPath:(FPath *)treePath - childKey:(NSString *)childKey - cache:(FCacheNode *)existingServerCache; - -- (id<FNode>)shadowingWriteAtPath:(FPath *)path; - -- (FNamedNode *)calculateNextNodeAfterPost:(FNamedNode *)post - atPath:(FPath *)path - completeServerData:(id<FNode>)completeServerData - reverse:(BOOL)reverse - index:(id<FIndex>)index; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTree.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTree.m deleted file mode 100644 index d8592c0..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTree.m +++ /dev/null @@ -1,577 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FWriteTree.h" -#import "FCacheNode.h" -#import "FChildrenNode.h" -#import "FCompoundWrite.h" -#import "FEmptyNode.h" -#import "FImmutableTree.h" -#import "FIndex.h" -#import "FNamedNode.h" -#import "FNode.h" -#import "FPath.h" -#import "FWriteRecord.h" -#import "FWriteTreeRef.h" - -@interface FWriteTree () -/** - * A tree tracking the results of applying all visible writes. This does not - * include transactions with applyLocally=false or writes that are completely - * shadowed by other writes. Contains id<FNode> as values. - */ -@property(nonatomic, strong) FCompoundWrite *visibleWrites; -/** - * A list of pending writes, regardless of visibility and shadowed-ness. Used to - * calcuate arbitrary sets of the changed data, such as hidden writes (from - * transactions) or changes with certain writes excluded (also used by - * transactions). Contains FWriteRecords. - */ -@property(nonatomic, strong) NSMutableArray *allWrites; -@property(nonatomic) NSInteger lastWriteId; -@end - -/** - * FWriteTree tracks all pending user-initiated writes and has methods to - * calcuate the result of merging them with underlying server data (to create - * "event cache" data). Pending writes are added with addOverwriteAtPath: and - * addMergeAtPath: and removed with removeWriteId:. - */ -@implementation FWriteTree - -@synthesize allWrites; -@synthesize lastWriteId; - -- (id)init { - self = [super init]; - if (self) { - self.visibleWrites = [FCompoundWrite emptyWrite]; - self.allWrites = [[NSMutableArray alloc] init]; - self.lastWriteId = -1; - } - return self; -} - -/** - * Create a new WriteTreeRef for the given path. For use with a new sync point - * at the given path. - */ -- (FWriteTreeRef *)childWritesForPath:(FPath *)path { - return [[FWriteTreeRef alloc] initWithPath:path writeTree:self]; -} - -/** - * Record a new overwrite from user code. - * @param visible Is set to false by some transactions. It should be excluded - * from event caches. - */ -- (void)addOverwriteAtPath:(FPath *)path - newData:(id<FNode>)newData - writeId:(NSInteger)writeId - isVisible:(BOOL)visible { - NSAssert(writeId > self.lastWriteId, - @"Stacking an older write on top of a newer one"); - FWriteRecord *record = [[FWriteRecord alloc] initWithPath:path - overwrite:newData - writeId:writeId - visible:visible]; - [self.allWrites addObject:record]; - - if (visible) { - self.visibleWrites = [self.visibleWrites addWrite:newData atPath:path]; - } - - self.lastWriteId = writeId; -} - -/** - * Record a new merge from user code. - * @param changedChildren maps NSString -> id<FNode> - */ -- (void)addMergeAtPath:(FPath *)path - changedChildren:(FCompoundWrite *)changedChildren - writeId:(NSInteger)writeId { - NSAssert(writeId > self.lastWriteId, - @"Stacking an older merge on top of newer one"); - FWriteRecord *record = [[FWriteRecord alloc] initWithPath:path - merge:changedChildren - writeId:writeId]; - [self.allWrites addObject:record]; - - self.visibleWrites = [self.visibleWrites addCompoundWrite:changedChildren - atPath:path]; - self.lastWriteId = writeId; -} - -- (FWriteRecord *)writeForId:(NSInteger)writeId { - NSUInteger index = [self.allWrites - indexOfObjectPassingTest:^BOOL(FWriteRecord *write, NSUInteger idx, - BOOL *stop) { - return write.writeId == writeId; - }]; - return (index == NSNotFound) ? nil : self.allWrites[index]; -} - -/** - * Remove a write (either an overwrite or merge) that has been successfully - * acknowledged by the server. Recalculates the tree if necessary. We return the - * path of the write and whether it may have been visible, meaning views need to - * reevaluate. - * - * @return YES if the write may have been visible (meaning we'll need to - * reevaluate / raise events as a result). - */ -- (BOOL)removeWriteId:(NSInteger)writeId { - NSUInteger index = [self.allWrites - indexOfObjectPassingTest:^BOOL(FWriteRecord *record, NSUInteger idx, - BOOL *stop) { - if (record.writeId == writeId) { - return YES; - } else { - return NO; - } - }]; - NSAssert(index != NSNotFound, - @"[FWriteTree removeWriteId:] called with nonexistent writeId."); - FWriteRecord *writeToRemove = self.allWrites[index]; - [self.allWrites removeObjectAtIndex:index]; - - BOOL removedWriteWasVisible = writeToRemove.visible; - BOOL removedWriteOverlapsWithOtherWrites = NO; - NSInteger i = [self.allWrites count] - 1; - - while (removedWriteWasVisible && i >= 0) { - FWriteRecord *currentWrite = [self.allWrites objectAtIndex:i]; - if (currentWrite.visible) { - if (i >= index && [self record:currentWrite - containsPath:writeToRemove.path]) { - // The removed write was completely shadowed by a subsequent - // write. - removedWriteWasVisible = NO; - } else if ([writeToRemove.path contains:currentWrite.path]) { - // Either we're covering some writes or they're covering part of - // us (depending on which came first). - removedWriteOverlapsWithOtherWrites = YES; - } - } - i--; - } - - if (!removedWriteWasVisible) { - return NO; - } else if (removedWriteOverlapsWithOtherWrites) { - // There's some shadowing going on. Just rebuild the visible writes from - // scratch. - [self resetTree]; - return YES; - } else { - // There's no shadowing. We can safely just remove the write(s) from - // visibleWrites. - if ([writeToRemove isOverwrite]) { - self.visibleWrites = - [self.visibleWrites removeWriteAtPath:writeToRemove.path]; - } else { - FCompoundWrite *merge = writeToRemove.merge; - [merge enumerateWrites:^(FPath *path, id<FNode> node, BOOL *stop) { - self.visibleWrites = [self.visibleWrites - removeWriteAtPath:[writeToRemove.path child:path]]; - }]; - } - return YES; - } -} - -- (NSArray *)removeAllWrites { - NSArray *writes = self.allWrites; - self.visibleWrites = [FCompoundWrite emptyWrite]; - self.allWrites = [NSMutableArray array]; - return writes; -} - -/** - * @return A complete snapshot for the given path if there's visible write data - * at that path, else nil. No server data is considered. - */ -- (id<FNode>)completeWriteDataAtPath:(FPath *)path { - return [self.visibleWrites completeNodeAtPath:path]; -} - -/** - * Given optional, underlying server data, and an optional set of constraints - * (exclude some sets, include hidden writes), attempt to calculate a complete - * snapshot for the given path - * @param includeHiddenWrites Defaults to false, whether or not to layer on - * writes with visible set to false - */ -- (id<FNode>)calculateCompleteEventCacheAtPath:(FPath *)treePath - completeServerCache:(id<FNode>)completeServerCache - excludeWriteIds:(NSArray *)writeIdsToExclude - includeHiddenWrites:(BOOL)includeHiddenWrites { - if (writeIdsToExclude == nil && !includeHiddenWrites) { - id<FNode> shadowingNode = - [self.visibleWrites completeNodeAtPath:treePath]; - if (shadowingNode != nil) { - return shadowingNode; - } else { - // No cache here. Can't claim complete knowledge. - FCompoundWrite *subMerge = - [self.visibleWrites childCompoundWriteAtPath:treePath]; - if (subMerge.isEmpty) { - return completeServerCache; - } else if (completeServerCache == nil && - ![subMerge hasCompleteWriteAtPath:[FPath empty]]) { - // We wouldn't have a complete snapshot since there's no - // underlying data and no complete shadow - return nil; - } else { - id<FNode> layeredCache = completeServerCache != nil - ? completeServerCache - : [FEmptyNode emptyNode]; - return [subMerge applyToNode:layeredCache]; - } - } - } else { - FCompoundWrite *merge = - [self.visibleWrites childCompoundWriteAtPath:treePath]; - if (!includeHiddenWrites && merge.isEmpty) { - return completeServerCache; - } else { - // If the server cache is null and we don't have a complete cache, - // we need to return nil - if (!includeHiddenWrites && completeServerCache == nil && - ![merge hasCompleteWriteAtPath:[FPath empty]]) { - return nil; - } else { - BOOL (^filter)(FWriteRecord *) = ^(FWriteRecord *record) { - return (BOOL)( - (record.visible || includeHiddenWrites) && - (writeIdsToExclude == nil || - ![writeIdsToExclude - containsObject: - [NSNumber numberWithInteger:record.writeId]]) && - ([record.path contains:treePath] || - [treePath contains:record.path])); - }; - FCompoundWrite *mergeAtPath = - [FWriteTree layerTreeFromWrites:self.allWrites - filter:filter - treeRoot:treePath]; - id<FNode> layeredCache = completeServerCache - ? completeServerCache - : [FEmptyNode emptyNode]; - return [mergeAtPath applyToNode:layeredCache]; - } - } - } -} - -/** - * With optional, underlying server data, attempt to return a children node of - * children that we have complete data for. Used when creating new views, to - * pre-fill their complete event children snapshot. - */ -- (FChildrenNode *)calculateCompleteEventChildrenAtPath:(FPath *)treePath - completeServerChildren: - (id<FNode>)completeServerChildren { - __block id<FNode> completeChildren = [FEmptyNode emptyNode]; - id<FNode> topLevelSet = [self.visibleWrites completeNodeAtPath:treePath]; - if (topLevelSet != nil) { - if (![topLevelSet isLeafNode]) { - // We're shadowing everything. Return the children. - FChildrenNode *topChildrenNode = topLevelSet; - [topChildrenNode enumerateChildrenUsingBlock:^( - NSString *key, id<FNode> node, BOOL *stop) { - completeChildren = [completeChildren updateImmediateChild:key - withNewChild:node]; - }]; - } - return completeChildren; - } else { - // Layer any children we have on top of this - // We know we don't have a top-level set, so just enumerate existing - // children, and apply any updates - FCompoundWrite *merge = - [self.visibleWrites childCompoundWriteAtPath:treePath]; - [completeServerChildren enumerateChildrenUsingBlock:^( - NSString *key, id<FNode> node, BOOL *stop) { - FCompoundWrite *childMerge = - [merge childCompoundWriteAtPath:[[FPath alloc] initWith:key]]; - id<FNode> newChildNode = [childMerge applyToNode:node]; - completeChildren = - [completeChildren updateImmediateChild:key - withNewChild:newChildNode]; - }]; - // Add any complete children we have from the set. - for (FNamedNode *node in merge.completeChildren) { - completeChildren = - [completeChildren updateImmediateChild:node.name - withNewChild:node.node]; - } - return completeChildren; - } -} - -/** - * Given that the underlying server data has updated, determine what, if - * anything, needs to be applied to the event cache. - * - * Possibilities - * - * 1. No write are shadowing. Events should be raised, the snap to be applied - * comes from the server data. - * - * 2. Some write is completely shadowing. No events to be raised. - * - * 3. Is partially shadowed. Events .. - * - * Either existingEventSnap or existingServerSnap must exist. - */ -- (id<FNode>)calculateEventCacheAfterServerOverwriteAtPath:(FPath *)treePath - childPath:(FPath *)childPath - existingEventSnap: - (id<FNode>)existingEventSnap - existingServerSnap: - (id<FNode>)existingServerSnap { - NSAssert(existingEventSnap != nil || existingServerSnap != nil, - @"Either existingEventSnap or existingServerSanp must exist."); - - FPath *path = [treePath child:childPath]; - if ([self.visibleWrites hasCompleteWriteAtPath:path]) { - // At this point we can probably guarantee that we're in case 2, meaning - // no events May need to check visibility while doing the - // findRootMostValueAndPath call - return nil; - } else { - // This could be more efficient if the serverNode + updates doesn't - // change the eventSnap However this is tricky to find out, since user - // updates don't necessary change the server snap, e.g. priority updates - // on empty nodes, or deep deletes. Another special case is if the - // server adds nodes, but doesn't change any existing writes. It is - // therefore not enough to only check if the updates change the - // serverNode. Maybe check if the merge tree contains these special - // cases and only do a full overwrite in that case? - FCompoundWrite *childMerge = - [self.visibleWrites childCompoundWriteAtPath:path]; - if (childMerge.isEmpty) { - // We're not shadowing at all. Case 1 - return [existingServerSnap getChild:childPath]; - } else { - return [childMerge - applyToNode:[existingServerSnap getChild:childPath]]; - } - } -} - -/** - * Returns a complete child for a given server snap after applying all user - * writes or nil if there is no complete child for this child key. - */ -- (id<FNode>)calculateCompleteChildAtPath:(FPath *)treePath - childKey:(NSString *)childKey - cache:(FCacheNode *)existingServerCache { - FPath *path = [treePath childFromString:childKey]; - id<FNode> shadowingNode = [self.visibleWrites completeNodeAtPath:path]; - if (shadowingNode != nil) { - return shadowingNode; - } else { - if ([existingServerCache isCompleteForChild:childKey]) { - FCompoundWrite *childMerge = - [self.visibleWrites childCompoundWriteAtPath:path]; - return [childMerge applyToNode:[existingServerCache.node - getImmediateChild:childKey]]; - } else { - return nil; - } - } -} - -/** - * Returns a node if there is a complete overwrite for this path. More - * specifically, if there is a write at a higher path, this will return the - * child of that write relative to the write and this path. Returns null if - * there is no write at this path. - */ -- (id<FNode>)shadowingWriteAtPath:(FPath *)path { - return [self.visibleWrites completeNodeAtPath:path]; -} - -/** - * This method is used when processing child remove events on a query. If we - * can, we pull in children that were outside the window, but may now be in the - * window. - */ -- (FNamedNode *)calculateNextNodeAfterPost:(FNamedNode *)post - atPath:(FPath *)treePath - completeServerData:(id<FNode>)completeServerData - reverse:(BOOL)reverse - index:(id<FIndex>)index { - __block id<FNode> toIterate; - FCompoundWrite *merge = - [self.visibleWrites childCompoundWriteAtPath:treePath]; - id<FNode> shadowingNode = [merge completeNodeAtPath:[FPath empty]]; - if (shadowingNode != nil) { - toIterate = shadowingNode; - } else if (completeServerData != nil) { - toIterate = [merge applyToNode:completeServerData]; - } else { - return nil; - } - - __block NSString *currentNextKey = nil; - __block id<FNode> currentNextNode = nil; - [toIterate enumerateChildrenUsingBlock:^(NSString *key, id<FNode> node, - BOOL *stop) { - if ([index compareKey:key - andNode:node - toOtherKey:post.name - andNode:post.node - reverse:reverse] > NSOrderedSame && - (!currentNextKey || [index compareKey:key - andNode:node - toOtherKey:currentNextKey - andNode:currentNextNode - reverse:reverse] < NSOrderedSame)) { - currentNextKey = key; - currentNextNode = node; - } - }]; - - if (currentNextKey != nil) { - return [FNamedNode nodeWithName:currentNextKey node:currentNextNode]; - } else { - return nil; - } -} - -#pragma mark - -#pragma mark Private Methods - -- (BOOL)record:(FWriteRecord *)record containsPath:(FPath *)path { - if ([record isOverwrite]) { - return [record.path contains:path]; - } else { - __block BOOL contains = NO; - [record.merge - enumerateWrites:^(FPath *childPath, id<FNode> node, BOOL *stop) { - contains = [[record.path child:childPath] contains:path]; - *stop = contains; - }]; - return contains; - } -} - -/** - * Re-layer the writes and merges into a tree so we can efficiently calculate - * event snapshots - */ -- (void)resetTree { - self.visibleWrites = - [FWriteTree layerTreeFromWrites:self.allWrites - filter:[FWriteTree defaultFilter] - treeRoot:[FPath empty]]; - if ([self.allWrites count] > 0) { - FWriteRecord *lastRecord = self.allWrites[[self.allWrites count] - 1]; - self.lastWriteId = lastRecord.writeId; - } else { - self.lastWriteId = -1; - } -} - -/** - * The default filter used when constructing the tree. Keep everything that's - * visible. - */ -+ (BOOL (^)(FWriteRecord *record))defaultFilter { - static BOOL (^filter)(FWriteRecord *); - static dispatch_once_t filterToken; - dispatch_once(&filterToken, ^{ - filter = ^(FWriteRecord *record) { - return YES; - }; - }); - return filter; -} - -/** - * Static method. Given an array of WriteRecords, a filter for which ones to - * include, and a path, construct a merge at that path - * @return An FImmutableTree of id<FNode>s. - */ -+ (FCompoundWrite *)layerTreeFromWrites:(NSArray *)writes - filter:(BOOL (^)(FWriteRecord *record))filter - treeRoot:(FPath *)treeRoot { - __block FCompoundWrite *compoundWrite = [FCompoundWrite emptyWrite]; - [writes enumerateObjectsUsingBlock:^(FWriteRecord *record, NSUInteger idx, - BOOL *stop) { - // Theory, a later set will either: - // a) abort a relevant transaction, so no need to worry about excluding it - // from calculating that transaction b) not be relevant to a transaction - // (separate branch), so again will not affect the data for that - // transaction - if (filter(record)) { - FPath *writePath = record.path; - if ([record isOverwrite]) { - if ([treeRoot contains:writePath]) { - FPath *relativePath = [FPath relativePathFrom:treeRoot - to:writePath]; - compoundWrite = [compoundWrite addWrite:record.overwrite - atPath:relativePath]; - } else if ([writePath contains:treeRoot]) { - id<FNode> child = [record.overwrite - getChild:[FPath relativePathFrom:writePath to:treeRoot]]; - compoundWrite = [compoundWrite addWrite:child - atPath:[FPath empty]]; - } else { - // There is no overlap between root path and write path, - // ignore write - } - } else { - if ([treeRoot contains:writePath]) { - FPath *relativePath = [FPath relativePathFrom:treeRoot - to:writePath]; - compoundWrite = [compoundWrite addCompoundWrite:record.merge - atPath:relativePath]; - } else if ([writePath contains:treeRoot]) { - FPath *relativePath = [FPath relativePathFrom:writePath - to:treeRoot]; - if (relativePath.isEmpty) { - compoundWrite = - [compoundWrite addCompoundWrite:record.merge - atPath:[FPath empty]]; - } else { - id<FNode> child = - [record.merge completeNodeAtPath:relativePath]; - if (child != nil) { - // There exists a child in this node that matches the - // root path - id<FNode> deepNode = - [child getChild:[relativePath popFront]]; - compoundWrite = - [compoundWrite addWrite:deepNode - atPath:[FPath empty]]; - } - } - } else { - // There is no overlap between root path and write path, - // ignore write - } - } - } - }]; - return compoundWrite; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTreeRef.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTreeRef.h deleted file mode 100644 index 962ad5c..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTreeRef.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@protocol FNode; -@class FChildrenNode; -@class FPath; -@class FNamedNode; -@class FWriteRecord; -@class FWriteTree; -@protocol FIndex; -@class FCacheNode; - -@interface FWriteTreeRef : NSObject - -- (id)initWithPath:(FPath *)aPath writeTree:(FWriteTree *)tree; - -- (id<FNode>)calculateCompleteEventCacheWithCompleteServerCache: - (id<FNode>)completeServerCache; - -- (FChildrenNode *)calculateCompleteEventChildrenWithCompleteServerChildren: - (FChildrenNode *)completeServerChildren; - -- (id<FNode>) - calculateEventCacheAfterServerOverwriteWithChildPath:(FPath *)childPath - existingEventSnap: - (id<FNode>)existingEventSnap - existingServerSnap: - (id<FNode>)existingServerSnap; - -- (id<FNode>)shadowingWriteAtPath:(FPath *)path; - -- (FNamedNode *)calculateNextNodeAfterPost:(FNamedNode *)post - completeServerData:(id<FNode>)completeServerData - reverse:(BOOL)reverse - index:(id<FIndex>)index; - -- (id<FNode>)calculateCompleteChild:(NSString *)childKey - cache:(FCacheNode *)existingServerCache; - -- (FWriteTreeRef *)childWriteTreeRef:(NSString *)childKey; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTreeRef.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTreeRef.m deleted file mode 100644 index 809d1a9..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/FWriteTreeRef.m +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FWriteTreeRef.h" -#import "FCacheNode.h" -#import "FChildrenNode.h" -#import "FIndex.h" -#import "FNamedNode.h" -#import "FNode.h" -#import "FPath.h" -#import "FWriteRecord.h" -#import "FWriteTree.h" - -@interface FWriteTreeRef () -/** - * The path to this particular FWriteTreeRef. Used for calling methods on - * writeTree while exposing a simpler interface to callers. - */ -@property(nonatomic, strong) FPath *path; -/** - * A reference to the actual tree of the write data. All methods are - * pass-through to the tree, but with the appropriate path prefixed. - * - * This lets us make cheap references to points in the tree for sync points - * without having to copy and maintain all of the data. - */ -@property(nonatomic, strong) FWriteTree *writeTree; -@end - -/** - * A FWriteTreeRef wraps a FWriteTree and a FPath, for convenient access to a - * particular subtree. All the methods just proxy to the underlying FWriteTree. - */ -@implementation FWriteTreeRef -- (id)initWithPath:(FPath *)aPath writeTree:(FWriteTree *)tree { - self = [super init]; - if (self) { - self.path = aPath; - self.writeTree = tree; - } - return self; -} - -/** - * @return If possible, returns a complete event cache, using the underlying - * server data if possible. In addition, can be used to get a cache that - * includes hidden writes, and excludes arbitrary writes. Note that customizing - * the returned node can lead to a more expensive calculation. - */ -- (id<FNode>)calculateCompleteEventCacheWithCompleteServerCache: - (id<FNode>)completeServerCache { - return [self.writeTree calculateCompleteEventCacheAtPath:self.path - completeServerCache:completeServerCache - excludeWriteIds:nil - includeHiddenWrites:NO]; -} - -/** - * @return If possible, returns a children node containing all of the complete - * children we have data for. The returned data is a mix of the given server - * data and write data. - */ -- (FChildrenNode *)calculateCompleteEventChildrenWithCompleteServerChildren: - (id<FNode>)completeServerChildren { - return [self.writeTree - calculateCompleteEventChildrenAtPath:self.path - completeServerChildren:completeServerChildren]; -} - -/** - * Given that either the underlying server data has updated or the outstanding - * writes have been updating, determine what, if anything, needs to be applied - * to the event cache. - * - * Possibilities: - * - * 1. No writes are shadowing. Events should be raised, the snap to be applied - * comes from the server data. - * - * 2. Some writes are completly shadowing. No events to be raised. - * - * 3. Is partially shadowed. Events should be raised. - * - * Either existingEventSnap or existingServerSnap must exist, this is validated - * via an assert. - */ -- (id<FNode>) - calculateEventCacheAfterServerOverwriteWithChildPath:(FPath *)childPath - existingEventSnap: - (id<FNode>)existingEventSnap - existingServerSnap: - (id<FNode>)existingServerSnap { - return [self.writeTree - calculateEventCacheAfterServerOverwriteAtPath:self.path - childPath:childPath - existingEventSnap:existingEventSnap - existingServerSnap:existingServerSnap]; -} - -/** - * Returns a node if there is a complete overwrite for this path. More - * specifically, if there is a write at a higher path, this will return the - * child of that write relative to the write and this path. Returns nil if there - * is no write at this path. - */ -- (id<FNode>)shadowingWriteAtPath:(FPath *)path { - return [self.writeTree shadowingWriteAtPath:[self.path child:path]]; -} - -/** - * This method is used when processing child remove events on a query. If we - * can, we pull in children that are outside the window, but may now be in the - * window. - */ -- (FNamedNode *)calculateNextNodeAfterPost:(FNamedNode *)post - completeServerData:(id<FNode>)completeServerData - reverse:(BOOL)reverse - index:(id<FIndex>)index { - return [self.writeTree calculateNextNodeAfterPost:post - atPath:self.path - completeServerData:completeServerData - reverse:reverse - index:index]; -} - -/** - * Returns a complete child for a given server snap after applying all user - * writes or nil if there is no complete child for this child key. - */ -- (id<FNode>)calculateCompleteChild:(NSString *)childKey - cache:(FCacheNode *)existingServerCache { - return [self.writeTree calculateCompleteChildAtPath:self.path - childKey:childKey - cache:existingServerCache]; -} - -/** - * @return a WriteTreeref for a child. - */ -- (FWriteTreeRef *)childWriteTreeRef:(NSString *)childKey { - return - [[FWriteTreeRef alloc] initWithPath:[self.path childFromString:childKey] - writeTree:self.writeTree]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FAckUserWrite.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FAckUserWrite.h deleted file mode 100644 index 97a23bf..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FAckUserWrite.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FOperation.h" - -@class FPath; -@class FOperationSource; -@class FImmutableTree; - -@interface FAckUserWrite : NSObject <FOperation> - -- initWithPath:(FPath *)operationPath - affectedTree:(FImmutableTree *)affectedTree - revert:(BOOL)shouldRevert; - -@property(nonatomic, strong, readonly) FOperationSource *source; -@property(nonatomic, readonly) FOperationType type; -@property(nonatomic, strong, readonly) FPath *path; -// A FImmutableTree, containing @YES for each affected path. Affected paths -// can't overlap. -@property(nonatomic, strong, readonly) FImmutableTree *affectedTree; -@property(nonatomic, readonly) BOOL revert; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FAckUserWrite.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FAckUserWrite.m deleted file mode 100644 index 2a1f287..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FAckUserWrite.m +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FAckUserWrite.h" -#import "FImmutableTree.h" -#import "FOperationSource.h" -#import "FPath.h" - -@implementation FAckUserWrite - -- (id)initWithPath:(FPath *)operationPath - affectedTree:(FImmutableTree *)tree - revert:(BOOL)shouldRevert { - self = [super init]; - if (self) { - self->_source = [FOperationSource userInstance]; - self->_type = FOperationTypeAckUserWrite; - self->_path = operationPath; - self->_affectedTree = tree; - self->_revert = shouldRevert; - } - return self; -} - -- (FAckUserWrite *)operationForChild:(NSString *)childKey { - if (![self.path isEmpty]) { - NSAssert([self.path.getFront isEqualToString:childKey], - @"operationForChild called for unrelated child."); - return [[FAckUserWrite alloc] initWithPath:[self.path popFront] - affectedTree:self.affectedTree - revert:self.revert]; - } else if (self.affectedTree.value != nil) { - NSAssert(self.affectedTree.children.isEmpty, - @"affectedTree should not have overlapping affected paths."); - // All child locations are affected as well; just return same operation. - return self; - } else { - FImmutableTree *childTree = - [self.affectedTree subtreeAtPath:[[FPath alloc] initWith:childKey]]; - return [[FAckUserWrite alloc] initWithPath:[FPath empty] - affectedTree:childTree - revert:self.revert]; - } -} - -- (NSString *)description { - return - [NSString stringWithFormat: - @"FAckUserWrite { path=%@, revert=%d, affectedTree=%@ }", - self.path, self.revert, self.affectedTree]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FMerge.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FMerge.h deleted file mode 100644 index 56fbec9..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FMerge.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FOperation.h" - -@class FCompoundWrite; - -@interface FMerge : NSObject <FOperation> - -- (id)initWithSource:(FOperationSource *)aSource - path:(FPath *)aPath - children:(FCompoundWrite *)children; - -@property(nonatomic, strong, readonly) FOperationSource *source; -@property(nonatomic, readonly) FOperationType type; -@property(nonatomic, strong, readonly) FPath *path; -@property(nonatomic, strong, readonly) FCompoundWrite *children; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FMerge.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FMerge.m deleted file mode 100644 index c344755..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FMerge.m +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FMerge.h" -#import "FCompoundWrite.h" -#import "FNode.h" -#import "FOperationSource.h" -#import "FOverwrite.h" -#import "FPath.h" - -@interface FMerge () -@property(nonatomic, strong, readwrite) FOperationSource *source; -@property(nonatomic, readwrite) FOperationType type; -@property(nonatomic, strong, readwrite) FPath *path; -@property(nonatomic, strong) FCompoundWrite *children; -@end - -@implementation FMerge - -@synthesize source; -@synthesize type; -@synthesize path; -@synthesize children; - -- (id)initWithSource:(FOperationSource *)aSource - path:(FPath *)aPath - children:(FCompoundWrite *)someChildren { - self = [super init]; - if (self) { - self.source = aSource; - self.type = FOperationTypeMerge; - self.path = aPath; - self.children = someChildren; - } - return self; -} - -- (id<FOperation>)operationForChild:(NSString *)childKey { - if ([self.path isEmpty]) { - FCompoundWrite *childTree = [self.children - childCompoundWriteAtPath:[[FPath alloc] initWith:childKey]]; - if (childTree.isEmpty) { - return nil; - } else if (childTree.rootWrite != nil) { - // We have a snapshot for the child in question. This becomes an - // overwrite of the child. - return [[FOverwrite alloc] initWithSource:self.source - path:[FPath empty] - snap:childTree.rootWrite]; - } else { - // This is a merge at a deeper level - return [[FMerge alloc] initWithSource:self.source - path:[FPath empty] - children:childTree]; - } - } else { - NSAssert( - [self.path.getFront isEqualToString:childKey], - @"Can't get a merge for a child not on the path of the operation"); - return [[FMerge alloc] initWithSource:self.source - path:[self.path popFront] - children:self.children]; - } -} - -- (NSString *)description { - return - [NSString stringWithFormat:@"FMerge { path=%@, soruce=%@ children=%@}", - self.path, self.source, self.children]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperation.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperation.h deleted file mode 100644 index 41f6054..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperation.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@class FOperationSource; -@class FPath; - -typedef NS_ENUM(NSInteger, FOperationType) { - FOperationTypeOverwrite = 0, - FOperationTypeMerge = 1, - FOperationTypeAckUserWrite = 2, - FOperationTypeListenComplete = 3 -}; - -@protocol FOperation <NSObject> -@property(nonatomic, strong, readonly) FOperationSource *source; -@property(nonatomic, readonly) FOperationType type; -@property(nonatomic, strong, readonly) FPath *path; -- (id<FOperation>)operationForChild:(NSString *)childKey; -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperationSource.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperationSource.h deleted file mode 100644 index 747487b..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperationSource.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@class FQueryParams; - -@interface FOperationSource : NSObject - -@property(nonatomic, readonly) BOOL fromUser; -@property(nonatomic, readonly) BOOL fromServer; -@property(nonatomic, readonly) BOOL isTagged; -@property(nonatomic, strong, readonly) FQueryParams *queryParams; - -- initWithFromUser:(BOOL)isFromUser - fromServer:(BOOL)isFromServer - queryParams:(FQueryParams *)params - tagged:(BOOL)isTagged; - -+ (FOperationSource *)userInstance; -+ (FOperationSource *)serverInstance; -+ (FOperationSource *)forServerTaggedQuery:(FQueryParams *)params; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperationSource.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperationSource.m deleted file mode 100644 index 92e3db8..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOperationSource.m +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FOperationSource.h" -#import "FPath.h" -#import "FQueryParams.h" - -@interface FOperationSource () -@property(nonatomic, readwrite) BOOL fromUser; -@property(nonatomic, readwrite) BOOL fromServer; -@property(nonatomic, readwrite) BOOL isTagged; -@property(nonatomic, strong, readwrite) FQueryParams *queryParams; -@end - -@implementation FOperationSource - -@synthesize fromUser; -@synthesize fromServer; -@synthesize queryParams; - -- (id)initWithFromUser:(BOOL)isFromUser - fromServer:(BOOL)isFromServer - queryParams:(FQueryParams *)params - tagged:(BOOL)tagged { - self = [super init]; - if (self) { - self.fromUser = isFromUser; - self.fromServer = isFromServer; - self.queryParams = params; - self.isTagged = tagged; - } - return self; -} - -+ (FOperationSource *)userInstance { - static FOperationSource *user = nil; - static dispatch_once_t userToken; - dispatch_once(&userToken, ^{ - user = [[FOperationSource alloc] initWithFromUser:YES - fromServer:NO - queryParams:nil - tagged:NO]; - }); - return user; -} - -+ (FOperationSource *)serverInstance { - static FOperationSource *server = nil; - static dispatch_once_t serverToken; - dispatch_once(&serverToken, ^{ - server = [[FOperationSource alloc] initWithFromUser:NO - fromServer:YES - queryParams:nil - tagged:NO]; - }); - return server; -} - -+ (FOperationSource *)forServerTaggedQuery:(FQueryParams *)params { - return [[FOperationSource alloc] initWithFromUser:NO - fromServer:YES - queryParams:params - tagged:YES]; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"FOperationSource { fromUser=%d, " - @"fromServer=%d, queryId=%@, tagged=%d }", - self.fromUser, self.fromServer, - self.queryParams, self.isTagged]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOverwrite.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOverwrite.h deleted file mode 100644 index 7d738ac..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOverwrite.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FOperation.h" - -@protocol FNode; - -@interface FOverwrite : NSObject <FOperation> - -- (id)initWithSource:(FOperationSource *)aSource - path:(FPath *)aPath - snap:(id<FNode>)aSnap; - -@property(nonatomic, strong, readonly) FOperationSource *source; -@property(nonatomic, readonly) FOperationType type; -@property(nonatomic, strong, readonly) FPath *path; -@property(nonatomic, strong, readonly) id<FNode> snap; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOverwrite.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOverwrite.m deleted file mode 100644 index ad4daec..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Operation/FOverwrite.m +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FOverwrite.h" -#import "FNode.h" -#import "FOperationSource.h" - -@interface FOverwrite () -@property(nonatomic, strong, readwrite) FOperationSource *source; -@property(nonatomic, readwrite) FOperationType type; -@property(nonatomic, strong, readwrite) FPath *path; -@property(nonatomic, strong) id<FNode> snap; -@end - -@implementation FOverwrite - -@synthesize source; -@synthesize type; -@synthesize path; -@synthesize snap; - -- (id)initWithSource:(FOperationSource *)aSource - path:(FPath *)aPath - snap:(id<FNode>)aSnap { - self = [super init]; - if (self) { - self.source = aSource; - self.type = FOperationTypeOverwrite; - self.path = aPath; - self.snap = aSnap; - } - return self; -} - -- (FOverwrite *)operationForChild:(NSString *)childKey { - if ([self.path isEmpty]) { - return [[FOverwrite alloc] - initWithSource:self.source - path:[FPath empty] - snap:[self.snap getImmediateChild:childKey]]; - } else { - return [[FOverwrite alloc] initWithSource:self.source - path:[self.path popFront] - snap:self.snap]; - } -} - -- (NSString *)description { - return [NSString - stringWithFormat:@"FOverwrite { path=%@, source=%@, snapshot=%@ }", - self.path, self.source, self.snap]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FIRRetryHelper.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FIRRetryHelper.h deleted file mode 100644 index a63d0d8..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FIRRetryHelper.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@interface FIRRetryHelper : NSObject - -- (instancetype)initWithDispatchQueue:(dispatch_queue_t)dispatchQueue - minRetryDelayAfterFailure:(NSTimeInterval)minRetryDelayAfterFailure - maxRetryDelay:(NSTimeInterval)maxRetryDelay - retryExponent:(double)retryExponent - jitterFactor:(double)jitterFactor; - -- (void)retry:(void (^)(void))block; - -- (void)cancel; - -- (void)signalSuccess; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FIRRetryHelper.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FIRRetryHelper.m deleted file mode 100644 index ef24d12..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FIRRetryHelper.m +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRRetryHelper.h" -#import "FUtilities.h" -#import <FirebaseCore/FIRLogger.h> - -@interface FIRRetryHelperTask : NSObject - -@property(nonatomic, strong) void (^block)(void); - -@end - -@implementation FIRRetryHelperTask - -- (instancetype)initWithBlock:(void (^)(void))block { - self = [super init]; - if (self != nil) { - self->_block = [block copy]; - } - return self; -} - -- (BOOL)isCanceled { - return self.block == nil; -} - -- (void)cancel { - self.block = nil; -} - -- (void)execute { - if (self.block) { - self.block(); - } -} - -@end - -@interface FIRRetryHelper () - -@property(nonatomic, strong) dispatch_queue_t dispatchQueue; -@property(nonatomic) NSTimeInterval minRetryDelayAfterFailure; -@property(nonatomic) NSTimeInterval maxRetryDelay; -@property(nonatomic) double retryExponent; -@property(nonatomic) double jitterFactor; - -@property(nonatomic) BOOL lastWasSuccess; -@property(nonatomic) NSTimeInterval currentRetryDelay; - -@property(nonatomic, strong) FIRRetryHelperTask *scheduledRetry; - -@end - -@implementation FIRRetryHelper - -- (instancetype)initWithDispatchQueue:(dispatch_queue_t)dispatchQueue - minRetryDelayAfterFailure:(NSTimeInterval)minRetryDelayAfterFailure - maxRetryDelay:(NSTimeInterval)maxRetryDelay - retryExponent:(double)retryExponent - jitterFactor:(double)jitterFactor { - self = [super init]; - if (self != nil) { - self->_dispatchQueue = dispatchQueue; - self->_minRetryDelayAfterFailure = minRetryDelayAfterFailure; - self->_maxRetryDelay = maxRetryDelay; - self->_retryExponent = retryExponent; - self->_jitterFactor = jitterFactor; - self->_lastWasSuccess = YES; - } - return self; -} - -- (void)retry:(void (^)(void))block { - if (self.scheduledRetry != nil) { - FFLog(@"I-RDB054001", @"Canceling existing retry attempt"); - [self.scheduledRetry cancel]; - self.scheduledRetry = nil; - } - - NSTimeInterval delay; - if (self.lastWasSuccess) { - delay = 0; - } else { - if (self.currentRetryDelay == 0) { - self.currentRetryDelay = self.minRetryDelayAfterFailure; - } else { - NSTimeInterval newDelay = - (self.currentRetryDelay * self.retryExponent); - self.currentRetryDelay = MIN(newDelay, self.maxRetryDelay); - } - - delay = ((1 - self.jitterFactor) * self.currentRetryDelay) + - (self.jitterFactor * self.currentRetryDelay * - [FUtilities randomDouble]); - FFLog(@"I-RDB054002", @"Scheduling retry in %fs", delay); - } - self.lastWasSuccess = NO; - FIRRetryHelperTask *task = [[FIRRetryHelperTask alloc] initWithBlock:block]; - self.scheduledRetry = task; - dispatch_time_t popTime = - dispatch_time(DISPATCH_TIME_NOW, (long long)(delay * NSEC_PER_SEC)); - dispatch_after(popTime, self.dispatchQueue, ^{ - if (![task isCanceled]) { - self.scheduledRetry = nil; - [task execute]; - } - }); -} - -- (void)signalSuccess { - self.lastWasSuccess = YES; - self.currentRetryDelay = 0; -} - -- (void)cancel { - if (self.scheduledRetry != nil) { - FFLog(@"I-RDB054003", @"Canceling existing retry attempt"); - [self.scheduledRetry cancel]; - self.scheduledRetry = nil; - } else { - FFLog(@"I-RDB054004", @"No existing retry attempt to cancel"); - } - self.currentRetryDelay = 0; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FImmutableTree.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FImmutableTree.h deleted file mode 100644 index e6d4961..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FImmutableTree.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FImmutableSortedDictionary.h" -#import "FPath.h" -#import "FTuplePathValue.h" - -@interface FImmutableTree : NSObject - -- (id)initWithValue:(id)aValue; -- (id)initWithValue:(id)aValue - children:(FImmutableSortedDictionary *)childrenMap; - -+ (FImmutableTree *)empty; -- (BOOL)isEmpty; - -- (FTuplePathValue *)findRootMostMatchingPath:(FPath *)relativePath - predicate:(BOOL (^)(id))predicate; -- (FTuplePathValue *)findRootMostValueAndPath:(FPath *)relativePath; -- (FImmutableTree *)subtreeAtPath:(FPath *)relativePath; -- (FImmutableTree *)setValue:(id)newValue atPath:(FPath *)relativePath; -- (FImmutableTree *)removeValueAtPath:(FPath *)relativePath; -- (id)valueAtPath:(FPath *)relativePath; -- (id)rootMostValueOnPath:(FPath *)path; -- (id)rootMostValueOnPath:(FPath *)path matching:(BOOL (^)(id))predicate; -- (id)leafMostValueOnPath:(FPath *)path; -- (id)leafMostValueOnPath:(FPath *)relativePath - matching:(BOOL (^)(id))predicate; -- (BOOL)containsValueMatching:(BOOL (^)(id))predicate; -- (FImmutableTree *)setTree:(FImmutableTree *)newTree - atPath:(FPath *)relativePath; -- (id)foldWithBlock:(id (^)(FPath *path, id value, - NSDictionary *foldedChildren))block; -- (id)findOnPath:(FPath *)path - andApplyBlock:(id (^)(FPath *path, id value))block; -- (FPath *)forEachOnPath:(FPath *)path - whileBlock:(BOOL (^)(FPath *path, id value))block; -- (FImmutableTree *)forEachOnPath:(FPath *)path - performBlock:(void (^)(FPath *path, id value))block; -- (void)forEach:(void (^)(FPath *path, id value))block; -- (void)forEachChild:(void (^)(NSString *childKey, id childValue))block; - -@property(nonatomic, strong, readonly) id value; -@property(nonatomic, strong, readonly) FImmutableSortedDictionary *children; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FImmutableTree.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FImmutableTree.m deleted file mode 100644 index 34e62ae..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FImmutableTree.m +++ /dev/null @@ -1,486 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FImmutableTree.h" -#import "FImmutableSortedDictionary.h" -#import "FPath.h" -#import "FUtilities.h" - -@interface FImmutableTree () -@property(nonatomic, strong, readwrite) id value; -/** - * Maps NSString -> FImmutableTree<T>, where <T> is type of value. - */ -@property(nonatomic, strong, readwrite) FImmutableSortedDictionary *children; -@end - -@implementation FImmutableTree -@synthesize value; -@synthesize children; - -- (id)initWithValue:(id)aValue { - self = [super init]; - if (self) { - self.value = aValue; - self.children = [FImmutableTree emptyChildren]; - } - return self; -} - -- (id)initWithValue:(id)aValue - children:(FImmutableSortedDictionary *)childrenMap { - self = [super init]; - if (self) { - self.value = aValue; - self.children = childrenMap; - } - return self; -} - -+ (FImmutableSortedDictionary *)emptyChildren { - static dispatch_once_t emptyChildrenToken; - static FImmutableSortedDictionary *emptyChildren; - dispatch_once(&emptyChildrenToken, ^{ - emptyChildren = [FImmutableSortedDictionary - dictionaryWithComparator:[FUtilities stringComparator]]; - }); - return emptyChildren; -} - -+ (FImmutableTree *)empty { - static dispatch_once_t emptyImmutableTreeToken; - static FImmutableTree *emptyTree = nil; - dispatch_once(&emptyImmutableTreeToken, ^{ - emptyTree = [[FImmutableTree alloc] initWithValue:nil]; - }); - return emptyTree; -} - -- (BOOL)isEmpty { - return self.value == nil && [self.children isEmpty]; -} - -/** - * Given a path and a predicate, return the first node and the path to that node - * where the predicate returns true - * // TODO Do a perf test. If we're creating a bunch of FTuplePathValue objects - * on the way back out, it may be better to pass down a pathSoFar FPath - */ -- (FTuplePathValue *)findRootMostMatchingPath:(FPath *)relativePath - predicate:(BOOL (^)(id value))predicate { - if (self.value != nil && predicate(self.value)) { - return [[FTuplePathValue alloc] initWithPath:[FPath empty] - value:self.value]; - } else { - if ([relativePath isEmpty]) { - return nil; - } else { - NSString *front = [relativePath getFront]; - FImmutableTree *child = [self.children get:front]; - if (child != nil) { - FTuplePathValue *childExistingPathAndValue = - [child findRootMostMatchingPath:[relativePath popFront] - predicate:predicate]; - if (childExistingPathAndValue != nil) { - FPath *fullPath = [[[FPath alloc] initWith:front] - child:childExistingPathAndValue.path]; - return [[FTuplePathValue alloc] - initWithPath:fullPath - value:childExistingPathAndValue.value]; - } else { - return nil; - } - } else { - // No child matching path - return nil; - } - } - } -} - -/** - * Find, if it exists, the shortest subpath of the given path that points a - * defined value in the tree - */ -- (FTuplePathValue *)findRootMostValueAndPath:(FPath *)relativePath { - return [self findRootMostMatchingPath:relativePath - predicate:^BOOL(__unsafe_unretained id value) { - return YES; - }]; -} - -- (id)rootMostValueOnPath:(FPath *)path { - return [self rootMostValueOnPath:path - matching:^BOOL(id value) { - return YES; - }]; -} - -- (id)rootMostValueOnPath:(FPath *)path matching:(BOOL (^)(id))predicate { - if (self.value != nil && predicate(self.value)) { - return self.value; - } else if (path.isEmpty) { - return nil; - } else { - return [[self.children get:path.getFront] - rootMostValueOnPath:[path popFront] - matching:predicate]; - } -} - -- (id)leafMostValueOnPath:(FPath *)path { - return [self leafMostValueOnPath:path - matching:^BOOL(id value) { - return YES; - }]; -} - -- (id)leafMostValueOnPath:(FPath *)relativePath - matching:(BOOL (^)(id))predicate { - __block id currentValue = self.value; - __block FImmutableTree *currentTree = self; - [relativePath enumerateComponentsUsingBlock:^(NSString *key, BOOL *stop) { - currentTree = [currentTree.children get:key]; - if (currentTree == nil) { - *stop = YES; - } else { - id treeValue = currentTree.value; - if (treeValue != nil && predicate(treeValue)) { - currentValue = treeValue; - } - } - }]; - return currentValue; -} - -- (BOOL)containsValueMatching:(BOOL (^)(id))predicate { - if (self.value != nil && predicate(self.value)) { - return YES; - } else { - __block BOOL found = NO; - [self.children enumerateKeysAndObjectsUsingBlock:^( - NSString *key, FImmutableTree *subtree, BOOL *stop) { - found = [subtree containsValueMatching:predicate]; - if (found) - *stop = YES; - }]; - return found; - } -} - -- (FImmutableTree *)subtreeAtPath:(FPath *)relativePath { - if ([relativePath isEmpty]) { - return self; - } else { - NSString *front = [relativePath getFront]; - FImmutableTree *childTree = [self.children get:front]; - if (childTree != nil) { - return [childTree subtreeAtPath:[relativePath popFront]]; - } else { - return [FImmutableTree empty]; - } - } -} - -/** - * Sets a value at the specified path - */ -- (FImmutableTree *)setValue:(id)newValue atPath:(FPath *)relativePath { - if ([relativePath isEmpty]) { - return [[FImmutableTree alloc] initWithValue:newValue - children:self.children]; - } else { - NSString *front = [relativePath getFront]; - FImmutableTree *child = [self.children get:front]; - if (child == nil) { - child = [FImmutableTree empty]; - } - FImmutableTree *newChild = [child setValue:newValue - atPath:[relativePath popFront]]; - FImmutableSortedDictionary *newChildren = - [self.children insertKey:front withValue:newChild]; - return [[FImmutableTree alloc] initWithValue:self.value - children:newChildren]; - } -} - -/** - * Remove the value at the specified path - */ -- (FImmutableTree *)removeValueAtPath:(FPath *)relativePath { - if ([relativePath isEmpty]) { - if ([self.children isEmpty]) { - return [FImmutableTree empty]; - } else { - return [[FImmutableTree alloc] initWithValue:nil - children:self.children]; - } - } else { - NSString *front = [relativePath getFront]; - FImmutableTree *child = [self.children get:front]; - if (child) { - FImmutableTree *newChild = - [child removeValueAtPath:[relativePath popFront]]; - FImmutableSortedDictionary *newChildren; - if ([newChild isEmpty]) { - newChildren = [self.children removeKey:front]; - } else { - newChildren = [self.children insertKey:front - withValue:newChild]; - } - if (self.value == nil && [newChildren isEmpty]) { - return [FImmutableTree empty]; - } else { - return [[FImmutableTree alloc] initWithValue:self.value - children:newChildren]; - } - } else { - return self; - } - } -} - -/** - * Gets a value from the tree - */ -- (id)valueAtPath:(FPath *)relativePath { - if ([relativePath isEmpty]) { - return self.value; - } else { - NSString *front = [relativePath getFront]; - FImmutableTree *child = [self.children get:front]; - if (child) { - return [child valueAtPath:[relativePath popFront]]; - } else { - return nil; - } - } -} - -/** - * Replaces the subtree at the specified path with the given new tree - */ -- (FImmutableTree *)setTree:(FImmutableTree *)newTree - atPath:(FPath *)relativePath { - if ([relativePath isEmpty]) { - return newTree; - } else { - NSString *front = [relativePath getFront]; - FImmutableTree *child = [self.children get:front]; - if (child == nil) { - child = [FImmutableTree empty]; - } - FImmutableTree *newChild = [child setTree:newTree - atPath:[relativePath popFront]]; - FImmutableSortedDictionary *newChildren; - if ([newChild isEmpty]) { - newChildren = [self.children removeKey:front]; - } else { - newChildren = [self.children insertKey:front withValue:newChild]; - } - return [[FImmutableTree alloc] initWithValue:self.value - children:newChildren]; - } -} - -/** - * Performs a depth first fold on this tree. Transforms a tree into a single - * value, given a function that operates on the path to a node, an optional - * current value, and a map of the child names to folded subtrees - */ -- (id)foldWithBlock:(id (^)(FPath *path, id value, - NSDictionary *foldedChildren))block { - return [self foldWithPathSoFar:[FPath empty] withBlock:block]; -} - -/** - * Recursive helper for public facing foldWithBlock: method - */ -- (id)foldWithPathSoFar:(FPath *)pathSoFar - withBlock:(id (^)(FPath *path, id value, - NSDictionary *foldedChildren))block { - __block NSMutableDictionary *accum = [[NSMutableDictionary alloc] init]; - [self.children - enumerateKeysAndObjectsUsingBlock:^( - NSString *childKey, FImmutableTree *childTree, BOOL *stop) { - accum[childKey] = - [childTree foldWithPathSoFar:[pathSoFar childFromString:childKey] - withBlock:block]; - }]; - return block(pathSoFar, self.value, accum); -} - -/** - * Find the first matching value on the given path. Return the result of - * applying block to it. - */ -- (id)findOnPath:(FPath *)path - andApplyBlock:(id (^)(FPath *path, id value))block { - return [self findOnPath:path pathSoFar:[FPath empty] andApplyBlock:block]; -} - -- (id)findOnPath:(FPath *)pathToFollow - pathSoFar:(FPath *)pathSoFar - andApplyBlock:(id (^)(FPath *path, id value))block { - id result = self.value ? block(pathSoFar, self.value) : nil; - if (result != nil) { - return result; - } else { - if ([pathToFollow isEmpty]) { - return nil; - } else { - NSString *front = [pathToFollow getFront]; - FImmutableTree *nextChild = [self.children get:front]; - if (nextChild != nil) { - return [nextChild findOnPath:[pathToFollow popFront] - pathSoFar:[pathSoFar childFromString:front] - andApplyBlock:block]; - } else { - return nil; - } - } - } -} -/** - * Call the block on each value along the path for as long as that function - * returns true - * @return The path to the deepest location inspected - */ -- (FPath *)forEachOnPath:(FPath *)path whileBlock:(BOOL (^)(FPath *, id))block { - return [self forEachOnPath:path pathSoFar:[FPath empty] whileBlock:block]; -} - -- (FPath *)forEachOnPath:(FPath *)pathToFollow - pathSoFar:(FPath *)pathSoFar - whileBlock:(BOOL (^)(FPath *, id))block { - if ([pathToFollow isEmpty]) { - if (self.value) { - block(pathSoFar, self.value); - } - return pathSoFar; - } else { - BOOL shouldContinue = YES; - if (self.value) { - shouldContinue = block(pathSoFar, self.value); - } - if (shouldContinue) { - NSString *front = [pathToFollow getFront]; - FImmutableTree *nextChild = [self.children get:front]; - if (nextChild) { - return - [nextChild forEachOnPath:[pathToFollow popFront] - pathSoFar:[pathSoFar childFromString:front] - whileBlock:block]; - } else { - return pathSoFar; - } - } else { - return pathSoFar; - } - } -} - -- (FImmutableTree *)forEachOnPath:(FPath *)path - performBlock:(void (^)(FPath *path, id value))block { - return [self forEachOnPath:path pathSoFar:[FPath empty] performBlock:block]; -} - -- (FImmutableTree *)forEachOnPath:(FPath *)pathToFollow - pathSoFar:(FPath *)pathSoFar - performBlock:(void (^)(FPath *path, id value))block { - if ([pathToFollow isEmpty]) { - return self; - } else { - if (self.value) { - block(pathSoFar, self.value); - } - NSString *front = [pathToFollow getFront]; - FImmutableTree *nextChild = [self.children get:front]; - if (nextChild) { - return [nextChild forEachOnPath:[pathToFollow popFront] - pathSoFar:[pathSoFar childFromString:front] - performBlock:block]; - } else { - return [FImmutableTree empty]; - } - } -} -/** - * Calls the given block for each node in the tree that has a value. Called in - * depth-first order - */ -- (void)forEach:(void (^)(FPath *path, id value))block { - [self forEachPathSoFar:[FPath empty] withBlock:block]; -} - -- (void)forEachPathSoFar:(FPath *)pathSoFar - withBlock:(void (^)(FPath *path, id value))block { - [self.children - enumerateKeysAndObjectsUsingBlock:^( - NSString *childKey, FImmutableTree *childTree, BOOL *stop) { - [childTree forEachPathSoFar:[pathSoFar childFromString:childKey] - withBlock:block]; - }]; - if (self.value) { - block(pathSoFar, self.value); - } -} - -- (void)forEachChild:(void (^)(NSString *childKey, id childValue))block { - [self.children - enumerateKeysAndObjectsUsingBlock:^( - NSString *childKey, FImmutableTree *childTree, BOOL *stop) { - if (childTree.value) { - block(childKey, childTree.value); - } - }]; -} - -- (BOOL)isEqual:(id)object { - if (![object isKindOfClass:[FImmutableTree class]]) { - return NO; - } - FImmutableTree *other = (FImmutableTree *)object; - return (self.value == other.value || [self.value isEqual:other.value]) && - [self.children isEqual:other.children]; -} - -- (NSUInteger)hash { - return self.children.hash * 31 + [self.value hash]; -} - -- (NSString *)description { - NSMutableString *string = [[NSMutableString alloc] init]; - [string appendString:@"FImmutableTree { value="]; - [string appendString:(self.value ? [self.value description] : @"<nil>")]; - [string appendString:@", children={"]; - [self.children - enumerateKeysAndObjectsUsingBlock:^( - NSString *childKey, FImmutableTree *childTree, BOOL *stop) { - [string appendString:@" "]; - [string appendString:childKey]; - [string appendString:@"="]; - [string appendString:[childTree.value description]]; - }]; - [string appendString:@" } }"]; - return [NSString stringWithString:string]; -} - -- (NSString *)debugDescription { - return [self description]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FPath.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FPath.h deleted file mode 100644 index cfa86aa..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FPath.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@interface FPath : NSObject <NSCopying> - -+ (FPath *)relativePathFrom:(FPath *)outer to:(FPath *)inner; -+ (FPath *)empty; -+ (FPath *)pathWithString:(NSString *)string; - -- (id)initWith:(NSString *)path; -- (id)initWithPieces:(NSArray *)somePieces andPieceNum:(NSInteger)aPieceNum; - -- (id)copyWithZone:(NSZone *)zone; - -- (void)enumerateComponentsUsingBlock:(void (^)(NSString *key, - BOOL *stop))block; -- (NSString *)getFront; -- (NSUInteger)length; -- (FPath *)popFront; -- (NSString *)getBack; -- (NSString *)toString; -- (NSString *)toStringWithTrailingSlash; -- (NSString *)wireFormat; -- (FPath *)parent; -- (FPath *)child:(FPath *)childPathObj; -- (FPath *)childFromString:(NSString *)childPath; -- (BOOL)isEmpty; -- (BOOL)contains:(FPath *)other; -- (NSComparisonResult)compare:(FPath *)other; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FPath.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FPath.m deleted file mode 100644 index f655240..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FPath.m +++ /dev/null @@ -1,304 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FPath.h" - -#import "FUtilities.h" - -@interface FPath () - -@property(nonatomic, readwrite, assign) NSInteger pieceNum; -@property(nonatomic, strong) NSArray *pieces; - -@end - -@implementation FPath - -#pragma mark - -#pragma mark Initializers - -+ (FPath *)relativePathFrom:(FPath *)outer to:(FPath *)inner { - NSString *outerFront = [outer getFront]; - NSString *innerFront = [inner getFront]; - if (outerFront == nil) { - return inner; - } else if ([outerFront isEqualToString:innerFront]) { - return [self relativePathFrom:[outer popFront] to:[inner popFront]]; - } else { - @throw [[NSException alloc] - initWithName:@"FirebaseDatabaseInternalError" - reason:[NSString - stringWithFormat: - @"innerPath (%@) is not within outerPath (%@)", - inner, outer] - userInfo:nil]; - } -} - -+ (FPath *)pathWithString:(NSString *)string { - return [[FPath alloc] initWith:string]; -} - -- (id)initWith:(NSString *)path { - self = [super init]; - if (self) { - NSArray *pathPieces = [path componentsSeparatedByString:@"/"]; - NSMutableArray *newPieces = [[NSMutableArray alloc] init]; - for (NSInteger i = 0; i < pathPieces.count; i++) { - NSString *piece = [pathPieces objectAtIndex:i]; - if (piece.length > 0) { - [newPieces addObject:piece]; - } - } - - self.pieces = newPieces; - self.pieceNum = 0; - } - return self; -} - -- (id)initWithPieces:(NSArray *)somePieces andPieceNum:(NSInteger)aPieceNum { - self = [super init]; - if (self) { - self.pieceNum = aPieceNum; - self.pieces = somePieces; - } - return self; -} - -- (id)copyWithZone:(NSZone *)zone { - // Immutable, so it's safe to return self - return self; -} - -- (NSString *)description { - return [self toString]; -} - -#pragma mark - -#pragma mark Public methods - -- (NSString *)getFront { - if (self.pieceNum >= self.pieces.count) { - return nil; - } - return [self.pieces objectAtIndex:self.pieceNum]; -} - -/** - * @return The number of segments in this path - */ -- (NSUInteger)length { - return self.pieces.count - self.pieceNum; -} - -- (FPath *)popFront { - NSInteger newPieceNum = self.pieceNum; - if (newPieceNum < self.pieces.count) { - newPieceNum++; - } - return [[FPath alloc] initWithPieces:self.pieces andPieceNum:newPieceNum]; -} - -- (NSString *)getBack { - if (self.pieceNum < self.pieces.count) { - return [self.pieces lastObject]; - } else { - return nil; - } -} - -- (NSString *)toString { - return [self toStringWithTrailingSlash:NO]; -} - -- (NSString *)toStringWithTrailingSlash { - return [self toStringWithTrailingSlash:YES]; -} - -- (NSString *)toStringWithTrailingSlash:(BOOL)trailingSlash { - NSMutableString *pathString = [[NSMutableString alloc] init]; - for (NSInteger i = self.pieceNum; i < self.pieces.count; i++) { - [pathString appendString:@"/"]; - [pathString appendString:[self.pieces objectAtIndex:i]]; - } - if ([pathString length] == 0) { - return @"/"; - } else { - if (trailingSlash) { - [pathString appendString:@"/"]; - } - return pathString; - } -} - -- (NSString *)wireFormat { - if ([self isEmpty]) { - return @"/"; - } else { - NSMutableString *pathString = [[NSMutableString alloc] init]; - for (NSInteger i = self.pieceNum; i < self.pieces.count; i++) { - if (i > self.pieceNum) { - [pathString appendString:@"/"]; - } - [pathString appendString:[self.pieces objectAtIndex:i]]; - } - return pathString; - } -} - -- (FPath *)parent { - if (self.pieceNum >= self.pieces.count) { - return nil; - } else { - NSMutableArray *newPieces = [[NSMutableArray alloc] init]; - for (NSInteger i = self.pieceNum; i < self.pieces.count - 1; i++) { - [newPieces addObject:[self.pieces objectAtIndex:i]]; - } - return [[FPath alloc] initWithPieces:newPieces andPieceNum:0]; - } -} - -- (FPath *)child:(FPath *)childPathObj { - NSMutableArray *newPieces = [[NSMutableArray alloc] init]; - for (NSInteger i = self.pieceNum; i < self.pieces.count; i++) { - [newPieces addObject:[self.pieces objectAtIndex:i]]; - } - - for (NSInteger i = childPathObj.pieceNum; i < childPathObj.pieces.count; - i++) { - [newPieces addObject:[childPathObj.pieces objectAtIndex:i]]; - } - - return [[FPath alloc] initWithPieces:newPieces andPieceNum:0]; -} - -- (FPath *)childFromString:(NSString *)childPath { - NSMutableArray *newPieces = [[NSMutableArray alloc] init]; - for (NSInteger i = self.pieceNum; i < self.pieces.count; i++) { - [newPieces addObject:[self.pieces objectAtIndex:i]]; - } - - NSArray *pathPieces = [childPath componentsSeparatedByString:@"/"]; - for (unsigned int i = 0; i < pathPieces.count; i++) { - NSString *piece = [pathPieces objectAtIndex:i]; - if (piece.length > 0) { - [newPieces addObject:piece]; - } - } - - return [[FPath alloc] initWithPieces:newPieces andPieceNum:0]; -} - -/** - * @return True if there are no segments in this path - */ -- (BOOL)isEmpty { - return self.pieceNum >= self.pieces.count; -} - -/** - * @return Singleton to represent an empty path - */ -+ (FPath *)empty { - static dispatch_once_t oneEmptyPath; - static FPath *emptyPath; - dispatch_once(&oneEmptyPath, ^{ - emptyPath = [[FPath alloc] initWith:@""]; - }); - return emptyPath; -} - -- (BOOL)contains:(FPath *)other { - if (self.length > other.length) { - return NO; - } - - NSInteger i = self.pieceNum; - NSInteger j = other.pieceNum; - while (i < self.pieces.count) { - NSString *thisSeg = [self.pieces objectAtIndex:i]; - NSString *otherSeg = [other.pieces objectAtIndex:j]; - if (![thisSeg isEqualToString:otherSeg]) { - return NO; - } - ++i; - ++j; - } - return YES; -} - -- (void)enumerateComponentsUsingBlock:(void (^)(NSString *, BOOL *))block { - BOOL stop = NO; - for (NSInteger i = self.pieceNum; !stop && i < self.pieces.count; i++) { - block(self.pieces[i], &stop); - } -} - -- (NSComparisonResult)compare:(FPath *)other { - NSInteger myCount = self.pieces.count; - NSInteger otherCount = other.pieces.count; - for (NSInteger i = self.pieceNum, j = other.pieceNum; - i < myCount && j < otherCount; i++, j++) { - NSComparisonResult comparison = [FUtilities compareKey:self.pieces[i] - toKey:other.pieces[j]]; - if (comparison != NSOrderedSame) { - return comparison; - } - } - if (self.length < other.length) { - return NSOrderedAscending; - } else if (other.length < self.length) { - return NSOrderedDescending; - } else { - NSAssert(self.length == other.length, - @"Paths must be the same lengths"); - return NSOrderedSame; - } -} - -/** - * @return YES if paths are the same - */ -- (BOOL)isEqual:(id)other { - if (other == self) { - return YES; - } - if (!other || ![other isKindOfClass:[self class]]) { - return NO; - } - FPath *otherPath = (FPath *)other; - if (self.length != otherPath.length) { - return NO; - } - for (NSUInteger i = self.pieceNum, j = otherPath.pieceNum; - i < self.pieces.count; i++, j++) { - if (![self.pieces[i] isEqualToString:otherPath.pieces[j]]) { - return NO; - } - } - return YES; -} - -- (NSUInteger)hash { - NSUInteger hashCode = 0; - for (NSInteger i = self.pieceNum; i < self.pieces.count; i++) { - hashCode = hashCode * 37 + [self.pieces[i] hash]; - } - return hashCode; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTree.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTree.h deleted file mode 100644 index d5c77ab..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTree.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FPath.h" -#import "FTreeNode.h" -#import <Foundation/Foundation.h> - -@interface FTree : NSObject - -- (id)init; -- (id)initWithName:(NSString *)aName - withParent:(FTree *)aParent - withNode:(FTreeNode *)aNode; - -- (FTree *)subTree:(FPath *)path; -- (id)getValue; -- (void)setValue:(id)value; -- (void)clear; -- (BOOL)hasChildren; -- (BOOL)isEmpty; -- (void)forEachChildMutationSafe:(void (^)(FTree *))action; -- (void)forEachChild:(void (^)(FTree *))action; -- (void)forEachDescendant:(void (^)(FTree *))action; -- (void)forEachDescendant:(void (^)(FTree *))action - includeSelf:(BOOL)incSelf - childrenFirst:(BOOL)childFirst; -- (BOOL)forEachAncestor:(BOOL (^)(FTree *))action; -- (BOOL)forEachAncestor:(BOOL (^)(FTree *))action includeSelf:(BOOL)incSelf; -- (void)forEachImmediateDescendantWithValue:(void (^)(FTree *))action; -- (BOOL)valueExistsAtOrAbove:(FPath *)path; -- (FPath *)path; -- (void)updateParents; -- (void)updateChild:(NSString *)childName withNode:(FTree *)child; - -@property(nonatomic, strong) NSString *name; -@property(nonatomic, strong) FTree *parent; -@property(nonatomic, strong) FTreeNode *node; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTree.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTree.m deleted file mode 100644 index 209b59f..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTree.m +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTree.h" -#import "FPath.h" -#import "FTreeNode.h" -#import "FUtilities.h" - -@implementation FTree - -@synthesize name; -@synthesize parent; -@synthesize node; - -- (id)init { - self = [super init]; - if (self) { - self.name = @""; - self.parent = nil; - self.node = [[FTreeNode alloc] init]; - } - return self; -} - -- (id)initWithName:(NSString *)aName - withParent:(FTree *)aParent - withNode:(FTreeNode *)aNode { - self = [super init]; - if (self) { - self.name = aName != nil ? aName : @""; - self.parent = aParent != nil ? aParent : nil; - self.node = aNode != nil ? aNode : [[FTreeNode alloc] init]; - } - return self; -} - -- (FTree *)subTree:(FPath *)path { - FTree *child = self; - NSString *next = [path getFront]; - while (next != nil) { - FTreeNode *childNode = child.node.children[next]; - if (childNode == nil) { - childNode = [[FTreeNode alloc] init]; - } - child = [[FTree alloc] initWithName:next - withParent:child - withNode:childNode]; - path = [path popFront]; - next = [path getFront]; - } - return child; -} - -- (id)getValue { - return self.node.value; -} - -- (void)setValue:(id)value { - self.node.value = value; - [self updateParents]; -} - -- (void)clear { - self.node.value = nil; - [self.node.children removeAllObjects]; - self.node.childCount = 0; - [self updateParents]; -} - -- (BOOL)hasChildren { - return self.node.childCount > 0; -} - -- (BOOL)isEmpty { - return [self getValue] == nil && ![self hasChildren]; -} - -- (void)forEachChild:(void (^)(FTree *))action { - for (NSString *key in self.node.children) { - action([[FTree alloc] - initWithName:key - withParent:self - withNode:[self.node.children objectForKey:key]]); - } -} - -- (void)forEachChildMutationSafe:(void (^)(FTree *))action { - for (NSString *key in [self.node.children copy]) { - action([[FTree alloc] - initWithName:key - withParent:self - withNode:[self.node.children objectForKey:key]]); - } -} - -- (void)forEachDescendant:(void (^)(FTree *))action { - [self forEachDescendant:action includeSelf:NO childrenFirst:NO]; -} - -- (void)forEachDescendant:(void (^)(FTree *))action - includeSelf:(BOOL)incSelf - childrenFirst:(BOOL)childFirst { - if (incSelf && !childFirst) { - action(self); - } - - [self forEachChild:^(FTree *child) { - [child forEachDescendant:action includeSelf:YES childrenFirst:childFirst]; - }]; - - if (incSelf && childFirst) { - action(self); - } -} - -- (BOOL)forEachAncestor:(BOOL (^)(FTree *))action { - return [self forEachAncestor:action includeSelf:NO]; -} - -- (BOOL)forEachAncestor:(BOOL (^)(FTree *))action includeSelf:(BOOL)incSelf { - FTree *aNode = (incSelf) ? self : self.parent; - while (aNode != nil) { - if (action(aNode)) { - return YES; - } - aNode = aNode.parent; - } - return NO; -} - -- (void)forEachImmediateDescendantWithValue:(void (^)(FTree *))action { - [self forEachChild:^(FTree *child) { - if ([child getValue] != nil) { - action(child); - } else { - [child forEachImmediateDescendantWithValue:action]; - } - }]; -} - -- (BOOL)valueExistsAtOrAbove:(FPath *)path { - FTreeNode *aNode = self.node; - while (aNode != nil) { - if (aNode.value != nil) { - return YES; - } - aNode = [aNode.children objectForKey:path.getFront]; - path = [path popFront]; - } - // XXX Check with Michael if this is correct; deviates from JS. - return NO; -} - -- (FPath *)path { - return [[FPath alloc] - initWith:(self.parent == nil) - ? self.name - : [NSString stringWithFormat:@"%@/%@", [self.parent path], - self.name]]; -} - -- (void)updateParents { - [self.parent updateChild:self.name withNode:self]; -} - -- (void)updateChild:(NSString *)childName withNode:(FTree *)child { - BOOL childEmpty = [child isEmpty]; - BOOL childExists = self.node.children[childName] != nil; - if (childEmpty && childExists) { - [self.node.children removeObjectForKey:childName]; - self.node.childCount = self.node.childCount - 1; - [self updateParents]; - } else if (!childEmpty && !childExists) { - [self.node.children setObject:child.node forKey:childName]; - self.node.childCount = self.node.childCount + 1; - [self updateParents]; - } -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTreeNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTreeNode.h deleted file mode 100644 index 549f3b1..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTreeNode.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@interface FTreeNode : NSObject - -@property(nonatomic, strong) NSMutableDictionary *children; -@property(nonatomic, readwrite, assign) int childCount; -@property(nonatomic, strong) id value; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTreeNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTreeNode.m deleted file mode 100644 index bae6c62..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/Utilities/FTreeNode.m +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTreeNode.h" - -@implementation FTreeNode - -@synthesize children; -@synthesize childCount; -@synthesize value; - -- (id)init { - self = [super init]; - if (self) { - self.children = [[NSMutableDictionary alloc] init]; - self.childCount = 0; - self.value = nil; - } - return self; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCacheNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCacheNode.h deleted file mode 100644 index eff0cb0..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCacheNode.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@protocol FNode; -@class FIndexedNode; -@class FPath; - -/** - * A cache node only stores complete children. Additionally it holds a flag - * whether the node can be considered fully initialized in the sense that we - * know at one point in time, this represented a valid state of the world, e.g. - * initialized with data from the server, or a complete overwrite by the client. - * It is not necessarily complete because it may have been from a tagged query. - * The filtered flag also tracks whether a node potentially had children removed - * due to a filter. - */ -@interface FCacheNode : NSObject - -- (id)initWithIndexedNode:(FIndexedNode *)indexedNode - isFullyInitialized:(BOOL)fullyInitialized - isFiltered:(BOOL)filtered; - -- (BOOL)isCompleteForPath:(FPath *)path; -- (BOOL)isCompleteForChild:(NSString *)childKey; - -@property(nonatomic, readonly) BOOL isFullyInitialized; -@property(nonatomic, readonly) BOOL isFiltered; -@property(nonatomic, strong, readonly) FIndexedNode *indexedNode; -@property(nonatomic, strong, readonly) id<FNode> node; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCacheNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCacheNode.m deleted file mode 100644 index a991d52..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCacheNode.m +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FCacheNode.h" -#import "FEmptyNode.h" -#import "FIndexedNode.h" -#import "FNode.h" -#import "FPath.h" - -@interface FCacheNode () -@property(nonatomic, readwrite) BOOL isFullyInitialized; -@property(nonatomic, readwrite) BOOL isFiltered; -@property(nonatomic, strong, readwrite) FIndexedNode *indexedNode; -@end - -@implementation FCacheNode -- (id)initWithIndexedNode:(FIndexedNode *)indexedNode - isFullyInitialized:(BOOL)fullyInitialized - isFiltered:(BOOL)filtered { - self = [super init]; - if (self) { - self.indexedNode = indexedNode; - self.isFullyInitialized = fullyInitialized; - self.isFiltered = filtered; - } - return self; -} - -- (BOOL)isCompleteForPath:(FPath *)path { - if (path.isEmpty) { - return self.isFullyInitialized && !self.isFiltered; - } else { - NSString *childKey = [path getFront]; - return [self isCompleteForChild:childKey]; - } -} - -- (BOOL)isCompleteForChild:(NSString *)childKey { - return (self.isFullyInitialized && !self.isFiltered) || - [self.node hasChild:childKey]; -} - -- (id<FNode>)node { - return self.indexedNode.node; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCancelEvent.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCancelEvent.h deleted file mode 100644 index dd58642..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCancelEvent.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FEvent.h" -#import <Foundation/Foundation.h> - -@protocol FEventRegistration; - -@interface FCancelEvent : NSObject <FEvent> - -- initWithEventRegistration:(id<FEventRegistration>)eventRegistration - error:(NSError *)error - path:(FPath *)path; - -@property(nonatomic, strong, readonly) NSError *error; -@property(nonatomic, strong, readonly) FPath *path; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCancelEvent.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCancelEvent.m deleted file mode 100644 index b069a71..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FCancelEvent.m +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FCancelEvent.h" -#import "FEventRegistration.h" -#import "FPath.h" - -@interface FCancelEvent () -@property(nonatomic, strong) id<FEventRegistration> eventRegistration; -@property(nonatomic, strong, readwrite) NSError *error; -@property(nonatomic, strong, readwrite) FPath *path; -@end - -@implementation FCancelEvent - -@synthesize eventRegistration; -@synthesize error; -@synthesize path; - -- (id)initWithEventRegistration:(id<FEventRegistration>)registration - error:(NSError *)anError - path:(FPath *)aPath { - self = [super init]; - if (self) { - self.eventRegistration = registration; - self.error = anError; - self.path = aPath; - } - return self; -} - -- (void)fireEventOnQueue:(dispatch_queue_t)queue { - [self.eventRegistration fireEvent:self queue:queue]; -} - -- (BOOL)isCancelEvent { - return YES; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"%@: cancel", self.path]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChange.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChange.h deleted file mode 100644 index 101ec8f..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChange.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRDatabaseReference.h" -#import "FIndexedNode.h" -#import "FNode.h" -#import <Foundation/Foundation.h> - -@interface FChange : NSObject - -@property(nonatomic, readonly) FIRDataEventType type; -@property(nonatomic, strong, readonly) FIndexedNode *indexedNode; -@property(nonatomic, strong, readonly) NSString *childKey; -@property(nonatomic, strong, readonly) NSString *prevKey; -@property(nonatomic, strong, readonly) FIndexedNode *oldIndexedNode; - -- (id)initWithType:(FIRDataEventType)type - indexedNode:(FIndexedNode *)indexedNode; -- (id)initWithType:(FIRDataEventType)type - indexedNode:(FIndexedNode *)indexedNode - childKey:(NSString *)childKey; -- (id)initWithType:(FIRDataEventType)type - indexedNode:(FIndexedNode *)indexedNode - childKey:(NSString *)childKey - oldIndexedNode:(FIndexedNode *)oldIndexedNode; - -- (FChange *)changeWithPrevKey:(NSString *)prevKey; -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChange.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChange.m deleted file mode 100644 index 8ad1cfc..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChange.m +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FChange.h" - -@interface FChange () - -@property(nonatomic, strong, readwrite) NSString *prevKey; - -@end - -@implementation FChange - -- (id)initWithType:(FIRDataEventType)type - indexedNode:(FIndexedNode *)indexedNode { - return [self initWithType:type - indexedNode:indexedNode - childKey:nil - oldIndexedNode:nil]; -} - -- (id)initWithType:(FIRDataEventType)type - indexedNode:(FIndexedNode *)indexedNode - childKey:(NSString *)childKey { - return [self initWithType:type - indexedNode:indexedNode - childKey:childKey - oldIndexedNode:nil]; -} - -- (id)initWithType:(FIRDataEventType)type - indexedNode:(FIndexedNode *)indexedNode - childKey:(NSString *)childKey - oldIndexedNode:(FIndexedNode *)oldIndexedNode { - self = [super init]; - if (self != nil) { - self->_type = type; - self->_indexedNode = indexedNode; - self->_childKey = childKey; - self->_oldIndexedNode = oldIndexedNode; - } - return self; -} - -- (FChange *)changeWithPrevKey:(NSString *)prevKey { - FChange *newChange = [[FChange alloc] initWithType:self.type - indexedNode:self.indexedNode - childKey:self.childKey - oldIndexedNode:self.oldIndexedNode]; - newChange.prevKey = prevKey; - return newChange; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"event: %d, data: %@", (int)self.type, - [self.indexedNode.node val]]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChildEventRegistration.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChildEventRegistration.h deleted file mode 100644 index 0b0c633..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChildEventRegistration.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FEventRegistration.h" -#import "FTypedefs.h" -#import <Foundation/Foundation.h> - -@class FRepo; - -@interface FChildEventRegistration : NSObject <FEventRegistration> - -- (id)initWithRepo:(FRepo *)repo - handle:(FIRDatabaseHandle)fHandle - callbacks:(NSDictionary *)callbackBlocks - cancelCallback:(fbt_void_nserror)cancelCallbackBlock; - -/** - * Maps FIRDataEventType (as NSNumber) to fbt_void_datasnapshot_nsstring - */ -@property(nonatomic, copy, readonly) NSDictionary *callbacks; -@property(nonatomic, copy, readonly) fbt_void_nserror cancelCallback; -@property(nonatomic, readonly) FIRDatabaseHandle handle; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChildEventRegistration.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChildEventRegistration.m deleted file mode 100644 index 1b688c1..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FChildEventRegistration.m +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FChildEventRegistration.h" -#import "FCancelEvent.h" -#import "FDataEvent.h" -#import "FIRDataSnapshot_Private.h" -#import "FIRDatabaseQuery_Private.h" -#import "FQueryParams.h" -#import "FQuerySpec.h" -#import <FirebaseCore/FIRLogger.h> - -@interface FChildEventRegistration () -@property(nonatomic, strong) FRepo *repo; -@property(nonatomic, copy, readwrite) NSDictionary *callbacks; -@property(nonatomic, copy, readwrite) fbt_void_nserror cancelCallback; -@property(nonatomic, readwrite) FIRDatabaseHandle handle; -@end - -@implementation FChildEventRegistration - -- (id)initWithRepo:(id)repo - handle:(FIRDatabaseHandle)fHandle - callbacks:(NSDictionary *)callbackBlocks - cancelCallback:(fbt_void_nserror)cancelCallbackBlock { - self = [super init]; - if (self) { - self.repo = repo; - self.handle = fHandle; - self.callbacks = callbackBlocks; - self.cancelCallback = cancelCallbackBlock; - } - return self; -} - -- (BOOL)responseTo:(FIRDataEventType)eventType { - return self.callbacks != nil && - [self.callbacks - objectForKey:[NSNumber numberWithInteger:eventType]] != nil; -} - -- (FDataEvent *)createEventFrom:(FChange *)change query:(FQuerySpec *)query { - FIRDatabaseReference *ref = [[FIRDatabaseReference alloc] - initWithRepo:self.repo - path:[query.path childFromString:change.childKey]]; - FIRDataSnapshot *snapshot = - [[FIRDataSnapshot alloc] initWithRef:ref - indexedNode:change.indexedNode]; - - FDataEvent *eventData = - [[FDataEvent alloc] initWithEventType:change.type - eventRegistration:self - dataSnapshot:snapshot - prevName:change.prevKey]; - return eventData; -} - -- (void)fireEvent:(id<FEvent>)event queue:(dispatch_queue_t)queue { - if ([event isCancelEvent]) { - FCancelEvent *cancelEvent = event; - FFLog(@"I-RDB061001", @"Raising cancel value event on %@", event.path); - NSAssert( - self.cancelCallback != nil, - @"Raising a cancel event on a listener with no cancel callback"); - dispatch_async(queue, ^{ - self.cancelCallback(cancelEvent.error); - }); - } else if (self.callbacks != nil) { - FDataEvent *dataEvent = event; - FFLog(@"I-RDB061002", @"Raising event callback (%ld) on %@", - (long)dataEvent.eventType, dataEvent.path); - fbt_void_datasnapshot_nsstring callback = [self.callbacks - objectForKey:[NSNumber numberWithInteger:dataEvent.eventType]]; - - if (callback != nil) { - dispatch_async(queue, ^{ - callback(dataEvent.snapshot, dataEvent.prevName); - }); - } - } -} - -- (FCancelEvent *)createCancelEventFromError:(NSError *)error - path:(FPath *)path { - if (self.cancelCallback != nil) { - return [[FCancelEvent alloc] initWithEventRegistration:self - error:error - path:path]; - } else { - return nil; - } -} - -- (BOOL)matches:(id<FEventRegistration>)other { - return self.handle == NSNotFound || other.handle == NSNotFound || - self.handle == other.handle; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FDataEvent.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FDataEvent.h deleted file mode 100644 index a0d28f9..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FDataEvent.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FEvent.h" -#import "FIRDataSnapshot.h" -#import "FIRDatabaseReference.h" -#import "FTupleUserCallback.h" -#import <Foundation/Foundation.h> - -@protocol FEventRegistration; -@protocol FIndex; - -@interface FDataEvent : NSObject <FEvent> - -- initWithEventType:(FIRDataEventType)type - eventRegistration:(id<FEventRegistration>)eventRegistration - dataSnapshot:(FIRDataSnapshot *)dataSnapshot; -- initWithEventType:(FIRDataEventType)type - eventRegistration:(id<FEventRegistration>)eventRegistration - dataSnapshot:(FIRDataSnapshot *)snapshot - prevName:(NSString *)prevName; - -@property(nonatomic, strong, readonly) id<FEventRegistration> eventRegistration; -@property(nonatomic, strong, readonly) FIRDataSnapshot *snapshot; -@property(nonatomic, strong, readonly) NSString *prevName; -@property(nonatomic, readonly) FIRDataEventType eventType; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FDataEvent.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FDataEvent.m deleted file mode 100644 index 886a21e..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FDataEvent.m +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FDataEvent.h" -#import "FEventRegistration.h" -#import "FIRDatabaseQuery_Private.h" -#import "FIndex.h" - -@interface FDataEvent () -@property(nonatomic, strong, readwrite) id<FEventRegistration> - eventRegistration; -@property(nonatomic, strong, readwrite) FIRDataSnapshot *snapshot; -@property(nonatomic, strong, readwrite) NSString *prevName; -@property(nonatomic, readwrite) FIRDataEventType eventType; -@end - -@implementation FDataEvent - -@synthesize eventRegistration; -@synthesize snapshot; -@synthesize prevName; -@synthesize eventType; - -- (id)initWithEventType:(FIRDataEventType)type - eventRegistration:(id<FEventRegistration>)registration - dataSnapshot:(FIRDataSnapshot *)dataSnapshot { - return [self initWithEventType:type - eventRegistration:registration - dataSnapshot:dataSnapshot - prevName:nil]; -} - -- (id)initWithEventType:(FIRDataEventType)type - eventRegistration:(id<FEventRegistration>)registration - dataSnapshot:(FIRDataSnapshot *)dataSnapshot - prevName:(NSString *)previousName { - self = [super init]; - if (self) { - self.eventRegistration = registration; - self.snapshot = dataSnapshot; - self.prevName = previousName; - self.eventType = type; - } - return self; -} - -- (FPath *)path { - // Used for logging, so delay calculation - FIRDatabaseReference *ref = self.snapshot.ref; - if (self.eventType == FIRDataEventTypeValue) { - return ref.path; - } else { - return ref.parent.path; - } -} - -- (void)fireEventOnQueue:(dispatch_queue_t)queue { - [self.eventRegistration fireEvent:self queue:queue]; -} - -- (BOOL)isCancelEvent { - return NO; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"event %d, data: %@", (int)eventType, - [snapshot value]]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEvent.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEvent.h deleted file mode 100644 index cddcf73..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEvent.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRDataEventType.h" -#import <Foundation/Foundation.h> - -@class FPath; - -@protocol FEvent <NSObject> -- (FPath *)path; -- (void)fireEventOnQueue:(dispatch_queue_t)queue; -- (BOOL)isCancelEvent; -- (NSString *)description; -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRaiser.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRaiser.h deleted file mode 100644 index c46bff5..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRaiser.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTypedefs.h" - -@class FPath; -@class FRepo; -@class FIRDatabaseConfig; - -/** - * Left as instance methods rather than class methods so that we could - * potentially callback on different queues for different repos. This is - * semi-parallel to JS's FEventQueue - */ -@interface FEventRaiser : NSObject - -- (id)initWithQueue:(dispatch_queue_t)queue; - -- (void)raiseEvents:(NSArray *)eventDataList; -- (void)raiseCallback:(fbt_void_void)callback; -- (void)raiseCallbacks:(NSArray *)callbackList; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRaiser.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRaiser.m deleted file mode 100644 index d745358..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRaiser.m +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FEventRaiser.h" -#import "FDataEvent.h" -#import "FRepo.h" -#import "FRepoManager.h" -#import "FTupleUserCallback.h" -#import "FTypedefs.h" -#import "FUtilities.h" - -@interface FEventRaiser () - -@property(nonatomic, strong) dispatch_queue_t queue; - -@end - -/** - * This class exists for symmetry with other clients, but since events are - * async, we don't need to do the complicated stuff the JS client does to - * preserve event order. - */ -@implementation FEventRaiser - -- (id)init { - [NSException raise:NSInternalInconsistencyException - format:@"Can't use default constructor"]; - return nil; -} - -- (id)initWithQueue:(dispatch_queue_t)queue { - self = [super init]; - if (self != nil) { - self->_queue = queue; - } - return self; -} - -- (void)raiseEvents:(NSArray *)eventDataList { - for (id<FEvent> event in eventDataList) { - [event fireEventOnQueue:self.queue]; - } -} - -- (void)raiseCallback:(fbt_void_void)callback { - dispatch_async(self.queue, callback); -} - -- (void)raiseCallbacks:(NSArray *)callbackList { - for (fbt_void_void callback in callbackList) { - dispatch_async(self.queue, callback); - } -} - -+ (void)raiseCallbacks:(NSArray *)callbackList queue:(dispatch_queue_t)queue { - for (fbt_void_void callback in callbackList) { - dispatch_async(queue, callback); - } -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRegistration.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRegistration.h deleted file mode 100644 index 79a2eb0..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FEventRegistration.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FChange.h" -#import "FIRDataEventType.h" -#import <Foundation/Foundation.h> - -@protocol FEvent; -@class FDataEvent; -@class FCancelEvent; -@class FQuerySpec; - -@protocol FEventRegistration <NSObject> -- (BOOL)responseTo:(FIRDataEventType)eventType; -- (FDataEvent *)createEventFrom:(FChange *)change query:(FQuerySpec *)query; -- (void)fireEvent:(id<FEvent>)event queue:(dispatch_queue_t)queue; -- (FCancelEvent *)createCancelEventFromError:(NSError *)error - path:(FPath *)path; -/** - * Used to figure out what event registration match the event registration that - * needs to be removed. - */ -- (BOOL)matches:(id<FEventRegistration>)other; -@property(nonatomic, readonly) FIRDatabaseHandle handle; -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FKeepSyncedEventRegistration.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FKeepSyncedEventRegistration.h deleted file mode 100644 index d4dca60..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FKeepSyncedEventRegistration.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import "FEventRegistration.h" - -/** - * A singleton event registration to mark a query as keep synced - */ -@interface FKeepSyncedEventRegistration : NSObject <FEventRegistration> - -+ (FKeepSyncedEventRegistration *)instance; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FKeepSyncedEventRegistration.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FKeepSyncedEventRegistration.m deleted file mode 100644 index 1821829..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FKeepSyncedEventRegistration.m +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FKeepSyncedEventRegistration.h" - -@interface FKeepSyncedEventRegistration () - -@end - -@implementation FKeepSyncedEventRegistration - -+ (FKeepSyncedEventRegistration *)instance { - static dispatch_once_t onceToken; - static FKeepSyncedEventRegistration *keepSynced; - dispatch_once(&onceToken, ^{ - keepSynced = [[FKeepSyncedEventRegistration alloc] init]; - }); - return keepSynced; -} - -- (BOOL)responseTo:(FIRDataEventType)eventType { - return NO; -} - -- (FDataEvent *)createEventFrom:(FChange *)change query:(FQuerySpec *)query { - [NSException - raise:NSInternalInconsistencyException - format:@"Should never create event for FKeepSyncedEventRegistration"]; - return nil; -} - -- (void)fireEvent:(id<FEvent>)event queue:(dispatch_queue_t)queue { - [NSException - raise:NSInternalInconsistencyException - format:@"Should never raise event for FKeepSyncedEventRegistration"]; -} - -- (FCancelEvent *)createCancelEventFromError:(NSError *)error - path:(FPath *)path { - // Don't create cancel events.... - return nil; -} - -- (FIRDatabaseHandle)handle { - // TODO[offline]: returning arbitray, can't return NSNotFound since that is - // used to match other event registrations We should really redo this to - // match on different kind of events (single observer, all observers, - // cancelled) rather than on a NSNotFound handle... - return NSNotFound - 1; -} - -- (BOOL)matches:(id<FEventRegistration>)other { - // Only matches singleton instance - return self == other; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FValueEventRegistration.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FValueEventRegistration.h deleted file mode 100644 index 819febe..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FValueEventRegistration.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FEventRegistration.h" -#import "FTypedefs.h" -#import <Foundation/Foundation.h> - -@class FRepo; - -@interface FValueEventRegistration : NSObject <FEventRegistration> - -- (id)initWithRepo:(FRepo *)repo - handle:(FIRDatabaseHandle)fHandle - callback:(fbt_void_datasnapshot)callbackBlock - cancelCallback:(fbt_void_nserror)cancelCallbackBlock; - -@property(nonatomic, copy, readonly) fbt_void_datasnapshot callback; -@property(nonatomic, copy, readonly) fbt_void_nserror cancelCallback; -@property(nonatomic, readonly) FIRDatabaseHandle handle; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FValueEventRegistration.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FValueEventRegistration.m deleted file mode 100644 index ad9368b..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FValueEventRegistration.m +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FValueEventRegistration.h" -#import "FCancelEvent.h" -#import "FDataEvent.h" -#import "FIRDataSnapshot_Private.h" -#import "FIRDatabaseQuery_Private.h" -#import "FQueryParams.h" -#import "FQuerySpec.h" -#import <FirebaseCore/FIRLogger.h> - -@interface FValueEventRegistration () -@property(nonatomic, strong) FRepo *repo; -@property(nonatomic, copy, readwrite) fbt_void_datasnapshot callback; -@property(nonatomic, copy, readwrite) fbt_void_nserror cancelCallback; -@property(nonatomic, readwrite) FIRDatabaseHandle handle; -@end - -@implementation FValueEventRegistration - -- (id)initWithRepo:(FRepo *)repo - handle:(FIRDatabaseHandle)fHandle - callback:(fbt_void_datasnapshot)callbackBlock - cancelCallback:(fbt_void_nserror)cancelCallbackBlock { - self = [super init]; - if (self) { - self.repo = repo; - self.handle = fHandle; - self.callback = callbackBlock; - self.cancelCallback = cancelCallbackBlock; - } - return self; -} - -- (BOOL)responseTo:(FIRDataEventType)eventType { - return eventType == FIRDataEventTypeValue; -} - -- (FDataEvent *)createEventFrom:(FChange *)change query:(FQuerySpec *)query { - FIRDatabaseReference *ref = - [[FIRDatabaseReference alloc] initWithRepo:self.repo path:query.path]; - FIRDataSnapshot *snapshot = - [[FIRDataSnapshot alloc] initWithRef:ref - indexedNode:change.indexedNode]; - FDataEvent *eventData = - [[FDataEvent alloc] initWithEventType:FIRDataEventTypeValue - eventRegistration:self - dataSnapshot:snapshot]; - return eventData; -} - -- (void)fireEvent:(id<FEvent>)event queue:(dispatch_queue_t)queue { - if ([event isCancelEvent]) { - FCancelEvent *cancelEvent = event; - FFLog(@"I-RDB065001", @"Raising cancel value event on %@", event.path); - NSAssert( - self.cancelCallback != nil, - @"Raising a cancel event on a listener with no cancel callback"); - dispatch_async(queue, ^{ - self.cancelCallback(cancelEvent.error); - }); - } else if (self.callback != nil) { - FDataEvent *dataEvent = event; - FFLog(@"I-RDB065002", @"Raising value event on %@", - dataEvent.snapshot.key); - dispatch_async(queue, ^{ - self.callback(dataEvent.snapshot); - }); - } -} - -- (FCancelEvent *)createCancelEventFromError:(NSError *)error - path:(FPath *)path { - if (self.cancelCallback != nil) { - return [[FCancelEvent alloc] initWithEventRegistration:self - error:error - path:path]; - } else { - return nil; - } -} - -- (BOOL)matches:(id<FEventRegistration>)other { - return self.handle == NSNotFound || other.handle == NSNotFound || - self.handle == other.handle; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FView.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FView.h deleted file mode 100644 index 0b4b9d8..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FView.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@protocol FNode; -@protocol FOperation; -@protocol FEventRegistration; -@class FWriteTreeRef; -@class FQuerySpec; -@class FChange; -@class FPath; -@class FViewCache; - -@interface FViewOperationResult : NSObject - -@property(nonatomic, strong, readonly) NSArray *changes; -@property(nonatomic, strong, readonly) NSArray *events; - -@end - -@interface FView : NSObject - -@property(nonatomic, strong, readonly) FQuerySpec *query; - -- (id)initWithQuery:(FQuerySpec *)query - initialViewCache:(FViewCache *)initialViewCache; - -- (id<FNode>)eventCache; -- (id<FNode>)serverCache; -- (id<FNode>)completeServerCacheFor:(FPath *)path; -- (BOOL)isEmpty; - -- (void)addEventRegistration:(id<FEventRegistration>)eventRegistration; -- (NSArray *)removeEventRegistration:(id<FEventRegistration>)eventRegistration - cancelError:(NSError *)cancelError; - -- (FViewOperationResult *)applyOperation:(id<FOperation>)operation - writesCache:(FWriteTreeRef *)writesCache - serverCache:(id<FNode>)optCompleteServerCache; -- (NSArray *)initialEvents:(id<FEventRegistration>)registration; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FView.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FView.m deleted file mode 100644 index a15e13d..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FView.m +++ /dev/null @@ -1,266 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FView.h" -#import "FCacheNode.h" -#import "FCancelEvent.h" -#import "FEmptyNode.h" -#import "FEventGenerator.h" -#import "FEventRegistration.h" -#import "FIRDatabaseQuery.h" -#import "FIRDatabaseQuery_Private.h" -#import "FIndexedFilter.h" -#import "FIndexedNode.h" -#import "FNode.h" -#import "FOperation.h" -#import "FOperationSource.h" -#import "FPath.h" -#import "FQueryParams.h" -#import "FQuerySpec.h" -#import "FViewCache.h" -#import "FViewProcessor.h" -#import "FViewProcessorResult.h" -#import "FWriteTreeRef.h" - -@interface FViewOperationResult () - -@property(nonatomic, strong, readwrite) NSArray *changes; -@property(nonatomic, strong, readwrite) NSArray *events; - -@end - -@implementation FViewOperationResult - -- (id)initWithChanges:(NSArray *)changes events:(NSArray *)events { - self = [super init]; - if (self != nil) { - self->_changes = changes; - self->_events = events; - } - return self; -} - -@end - -/** - * A view represents a specific location and query that has 1 or more event - * registrations. - * - * It does several things: - * - Maintains the list of event registration for this location/query. - * - Maintains a cache of the data visible for this location/query. - * - Applies new operations (via applyOperation), updates the cache, and based - * on the event registrations returns the set of events to be raised. - */ -@interface FView () - -@property(nonatomic, strong, readwrite) FQuerySpec *query; -@property(nonatomic, strong) FViewProcessor *processor; -@property(nonatomic, strong) FViewCache *viewCache; -@property(nonatomic, strong) NSMutableArray *eventRegistrations; -@property(nonatomic, strong) FEventGenerator *eventGenerator; - -@end - -@implementation FView -- (id)initWithQuery:(FQuerySpec *)query - initialViewCache:(FViewCache *)initialViewCache { - self = [super init]; - if (self) { - self.query = query; - - FIndexedFilter *indexFilter = - [[FIndexedFilter alloc] initWithIndex:query.index]; - id<FNodeFilter> filter = query.params.nodeFilter; - self.processor = [[FViewProcessor alloc] initWithFilter:filter]; - FCacheNode *initialServerCache = initialViewCache.cachedServerSnap; - FCacheNode *initialEventCache = initialViewCache.cachedEventSnap; - - // Don't filter server node with other filter than index, wait for - // tagged listen - FIndexedNode *emptyIndexedNode = - [FIndexedNode indexedNodeWithNode:[FEmptyNode emptyNode] - index:query.index]; - FIndexedNode *serverSnap = - [indexFilter updateFullNode:emptyIndexedNode - withNewNode:initialServerCache.indexedNode - accumulator:nil]; - FIndexedNode *eventSnap = - [filter updateFullNode:emptyIndexedNode - withNewNode:initialEventCache.indexedNode - accumulator:nil]; - FCacheNode *newServerCache = [[FCacheNode alloc] - initWithIndexedNode:serverSnap - isFullyInitialized:initialServerCache.isFullyInitialized - isFiltered:indexFilter.filtersNodes]; - FCacheNode *newEventCache = [[FCacheNode alloc] - initWithIndexedNode:eventSnap - isFullyInitialized:initialEventCache.isFullyInitialized - isFiltered:filter.filtersNodes]; - - self.viewCache = [[FViewCache alloc] initWithEventCache:newEventCache - serverCache:newServerCache]; - - self.eventRegistrations = [[NSMutableArray alloc] init]; - - self.eventGenerator = [[FEventGenerator alloc] initWithQuery:query]; - } - - return self; -} - -- (id<FNode>)serverCache { - return self.viewCache.cachedServerSnap.node; -} - -- (id<FNode>)eventCache { - return self.viewCache.cachedEventSnap.node; -} - -- (id<FNode>)completeServerCacheFor:(FPath *)path { - id<FNode> cache = self.viewCache.completeServerSnap; - if (cache) { - // If this isn't a "loadsAllData" view, then cache isn't actually a - // complete cache and we need to see if it contains the child we're - // interested in. - if ([self.query loadsAllData] || - (!path.isEmpty && - ![cache getImmediateChild:path.getFront].isEmpty)) { - return [cache getChild:path]; - } - } - return nil; -} - -- (BOOL)isEmpty { - return self.eventRegistrations.count == 0; -} - -- (void)addEventRegistration:(id<FEventRegistration>)eventRegistration { - [self.eventRegistrations addObject:eventRegistration]; -} - -/** - * @param eventRegistration If null, remove all callbacks. - * @param cancelError If a cancelError is provided, appropriate cancel events - * will be returned. - * @return Cancel events, if cancelError was provided. - */ -- (NSArray *)removeEventRegistration:(id<FEventRegistration>)eventRegistration - cancelError:(NSError *)cancelError { - NSMutableArray *cancelEvents = [[NSMutableArray alloc] init]; - if (cancelError != nil) { - NSAssert(eventRegistration == nil, - @"A cancel should cancel all event registrations."); - FPath *path = self.query.path; - for (id<FEventRegistration> registration in self.eventRegistrations) { - FCancelEvent *maybeEvent = - [registration createCancelEventFromError:cancelError path:path]; - if (maybeEvent) { - [cancelEvents addObject:maybeEvent]; - } - } - } - - if (eventRegistration) { - NSUInteger i = 0; - while (i < self.eventRegistrations.count) { - id<FEventRegistration> existing = self.eventRegistrations[i]; - if ([existing matches:eventRegistration]) { - [self.eventRegistrations removeObjectAtIndex:i]; - } else { - i++; - } - } - } else { - [self.eventRegistrations removeAllObjects]; - } - return cancelEvents; -} - -/** - * Applies the given Operation, updates our cache, and returns the appropriate - * events and changes - */ -- (FViewOperationResult *)applyOperation:(id<FOperation>)operation - writesCache:(FWriteTreeRef *)writesCache - serverCache:(id<FNode>)optCompleteServerCache { - if (operation.type == FOperationTypeMerge && - operation.source.queryParams != nil) { - NSAssert(self.viewCache.completeServerSnap != nil, - @"We should always have a full cache before handling merges"); - NSAssert(self.viewCache.completeEventSnap != nil, - @"Missing event cache, even though we have a server cache"); - } - FViewCache *oldViewCache = self.viewCache; - FViewProcessorResult *result = - [self.processor applyOperationOn:oldViewCache - operation:operation - writesCache:writesCache - completeCache:optCompleteServerCache]; - - NSAssert(result.viewCache.cachedServerSnap.isFullyInitialized || - !oldViewCache.cachedServerSnap.isFullyInitialized, - @"Once a server snap is complete, it should never go back."); - - self.viewCache = result.viewCache; - NSArray *events = [self - generateEventsForChanges:result.changes - eventCache:result.viewCache.cachedEventSnap.indexedNode - registration:nil]; - return [[FViewOperationResult alloc] initWithChanges:result.changes - events:events]; -} - -- (NSArray *)initialEvents:(id<FEventRegistration>)registration { - FCacheNode *eventSnap = self.viewCache.cachedEventSnap; - NSMutableArray *initialChanges = [[NSMutableArray alloc] init]; - [eventSnap.indexedNode.node enumerateChildrenUsingBlock:^( - NSString *key, id<FNode> node, BOOL *stop) { - FIndexedNode *indexed = [FIndexedNode indexedNodeWithNode:node]; - FChange *change = [[FChange alloc] initWithType:FIRDataEventTypeChildAdded - indexedNode:indexed - childKey:key]; - [initialChanges addObject:change]; - }]; - if (eventSnap.isFullyInitialized) { - FChange *change = [[FChange alloc] initWithType:FIRDataEventTypeValue - indexedNode:eventSnap.indexedNode]; - [initialChanges addObject:change]; - } - return [self generateEventsForChanges:initialChanges - eventCache:eventSnap.indexedNode - registration:registration]; -} - -- (NSArray *)generateEventsForChanges:(NSArray *)changes - eventCache:(FIndexedNode *)eventCache - registration:(id<FEventRegistration>)registration { - NSArray *registrations; - if (registration == nil) { - registrations = [[NSArray alloc] initWithArray:self.eventRegistrations]; - } else { - registrations = [[NSArray alloc] initWithObjects:registration, nil]; - } - return [self.eventGenerator generateEventsForChanges:changes - eventCache:eventCache - eventRegistrations:registrations]; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"FView (%@)", self.query]; -} -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FViewCache.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FViewCache.h deleted file mode 100644 index 62618d2..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FViewCache.h +++ /dev/null @@ -1,40 +0,0 @@ -#/* -* Copyright 2017 Google -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -#import <Foundation/Foundation.h> - -@protocol FNode; -@class FCacheNode; -@class FIndexedNode; - -@interface FViewCache : NSObject - -- (id)initWithEventCache:(FCacheNode *)eventCache - serverCache:(FCacheNode *)serverCache; - -- (FViewCache *)updateEventSnap:(FIndexedNode *)eventSnap - isComplete:(BOOL)complete - isFiltered:(BOOL)filtered; -- (FViewCache *)updateServerSnap:(FIndexedNode *)serverSnap - isComplete:(BOOL)complete - isFiltered:(BOOL)filtered; - -@property(nonatomic, strong, readonly) FCacheNode *cachedEventSnap; -@property(nonatomic, strong, readonly) id<FNode> completeEventSnap; -@property(nonatomic, strong, readonly) FCacheNode *cachedServerSnap; -@property(nonatomic, strong, readonly) id<FNode> completeServerSnap; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FViewCache.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FViewCache.m deleted file mode 100644 index 13e9283..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/FViewCache.m +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FViewCache.h" -#import "FCacheNode.h" -#import "FEmptyNode.h" -#import "FNode.h" - -@interface FViewCache () -@property(nonatomic, strong, readwrite) FCacheNode *cachedEventSnap; -@property(nonatomic, strong, readwrite) FCacheNode *cachedServerSnap; -@end - -@implementation FViewCache - -- (id)initWithEventCache:(FCacheNode *)eventCache - serverCache:(FCacheNode *)serverCache { - self = [super init]; - if (self) { - self.cachedEventSnap = eventCache; - self.cachedServerSnap = serverCache; - } - return self; -} - -- (FViewCache *)updateEventSnap:(FIndexedNode *)eventSnap - isComplete:(BOOL)complete - isFiltered:(BOOL)filtered { - FCacheNode *updatedEventCache = - [[FCacheNode alloc] initWithIndexedNode:eventSnap - isFullyInitialized:complete - isFiltered:filtered]; - return [[FViewCache alloc] initWithEventCache:updatedEventCache - serverCache:self.cachedServerSnap]; -} - -- (FViewCache *)updateServerSnap:(FIndexedNode *)serverSnap - isComplete:(BOOL)complete - isFiltered:(BOOL)filtered { - FCacheNode *updatedServerCache = - [[FCacheNode alloc] initWithIndexedNode:serverSnap - isFullyInitialized:complete - isFiltered:filtered]; - return [[FViewCache alloc] initWithEventCache:self.cachedEventSnap - serverCache:updatedServerCache]; -} - -- (id<FNode>)completeEventSnap { - return (self.cachedEventSnap.isFullyInitialized) ? self.cachedEventSnap.node - : nil; -} - -- (id<FNode>)completeServerSnap { - return (self.cachedServerSnap.isFullyInitialized) - ? self.cachedServerSnap.node - : nil; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FChildChangeAccumulator.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FChildChangeAccumulator.h deleted file mode 100644 index bf25163..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FChildChangeAccumulator.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@class FChange; - -@interface FChildChangeAccumulator : NSObject - -- (id)init; -- (void)trackChildChange:(FChange *)change; -- (NSArray *)changes; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FChildChangeAccumulator.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FChildChangeAccumulator.m deleted file mode 100644 index e35c2e2..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FChildChangeAccumulator.m +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FChildChangeAccumulator.h" -#import "FChange.h" -#import "FIndex.h" - -@interface FChildChangeAccumulator () -@property(nonatomic, strong) NSMutableDictionary *changeMap; -@end - -@implementation FChildChangeAccumulator - -- (id)init { - self = [super init]; - if (self) { - self.changeMap = [[NSMutableDictionary alloc] init]; - } - return self; -} - -- (void)trackChildChange:(FChange *)change { - FIRDataEventType type = change.type; - NSString *childKey = change.childKey; - NSAssert(type == FIRDataEventTypeChildAdded || - type == FIRDataEventTypeChildChanged || - type == FIRDataEventTypeChildRemoved, - @"Only child changes supported for tracking."); - NSAssert(![change.childKey isEqualToString:@".priority"], - @"Changes not tracked on priority"); - if (self.changeMap[childKey] != nil) { - FChange *oldChange = [self.changeMap objectForKey:childKey]; - FIRDataEventType oldType = oldChange.type; - if (type == FIRDataEventTypeChildAdded && - oldType == FIRDataEventTypeChildRemoved) { - FChange *newChange = - [[FChange alloc] initWithType:FIRDataEventTypeChildChanged - indexedNode:change.indexedNode - childKey:childKey - oldIndexedNode:oldChange.indexedNode]; - [self.changeMap setObject:newChange forKey:childKey]; - } else if (type == FIRDataEventTypeChildRemoved && - oldType == FIRDataEventTypeChildAdded) { - [self.changeMap removeObjectForKey:childKey]; - } else if (type == FIRDataEventTypeChildRemoved && - oldType == FIRDataEventTypeChildChanged) { - FChange *newChange = - [[FChange alloc] initWithType:FIRDataEventTypeChildRemoved - indexedNode:oldChange.oldIndexedNode - childKey:childKey]; - [self.changeMap setObject:newChange forKey:childKey]; - } else if (type == FIRDataEventTypeChildChanged && - oldType == FIRDataEventTypeChildAdded) { - FChange *newChange = - [[FChange alloc] initWithType:FIRDataEventTypeChildAdded - indexedNode:change.indexedNode - childKey:childKey]; - [self.changeMap setObject:newChange forKey:childKey]; - } else if (type == FIRDataEventTypeChildChanged && - oldType == FIRDataEventTypeChildChanged) { - FChange *newChange = - [[FChange alloc] initWithType:FIRDataEventTypeChildChanged - indexedNode:change.indexedNode - childKey:childKey - oldIndexedNode:oldChange.oldIndexedNode]; - [self.changeMap setObject:newChange forKey:childKey]; - } else { - NSString *reason = [NSString - stringWithFormat: - @"Illegal combination of changes: %@ occurred after %@", - change, oldChange]; - @throw [[NSException alloc] - initWithName:@"FirebaseDatabaseInternalError" - reason:reason - userInfo:nil]; - } - } else { - [self.changeMap setObject:change forKey:childKey]; - } -} - -- (NSArray *)changes { - return [self.changeMap allValues]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FCompleteChildSource.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FCompleteChildSource.h deleted file mode 100644 index 0c04bc1..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FCompleteChildSource.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@protocol FNode; -@class FNamedNode; -@protocol FIndex; - -@protocol FCompleteChildSource <NSObject> - -- (id<FNode>)completeChild:(NSString *)childKey; -- (FNamedNode *)childByIndex:(id<FIndex>)index - afterChild:(FNamedNode *)child - isReverse:(BOOL)reverse; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FIndexedFilter.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FIndexedFilter.h deleted file mode 100644 index 291e79a..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FIndexedFilter.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FNodeFilter.h" -#import <Foundation/Foundation.h> - -@protocol FIndex; - -@interface FIndexedFilter : NSObject <FNodeFilter> - -- (id)initWithIndex:(id<FIndex>)theIndex; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FIndexedFilter.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FIndexedFilter.m deleted file mode 100644 index f49af79..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FIndexedFilter.m +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIndexedFilter.h" -#import "FChange.h" -#import "FChildChangeAccumulator.h" -#import "FChildrenNode.h" -#import "FEmptyNode.h" -#import "FIndex.h" -#import "FIndexedNode.h" -#import "FKeyIndex.h" -#import "FNode.h" - -@interface FIndexedFilter () -@property(nonatomic, strong, readwrite) id<FIndex> index; -@end - -@implementation FIndexedFilter -- (id)initWithIndex:(id<FIndex>)theIndex { - self = [super init]; - if (self) { - self.index = theIndex; - } - return self; -} - -- (FIndexedNode *)updateChildIn:(FIndexedNode *)indexedNode - forChildKey:(NSString *)childKey - newChild:(id<FNode>)newChildSnap - affectedPath:(FPath *)affectedPath - fromSource:(id<FCompleteChildSource>)source - accumulator: - (FChildChangeAccumulator *)optChangeAccumulator { - NSAssert([indexedNode hasIndex:self.index], - @"The index in FIndexedNode must match the index of the filter"); - id<FNode> node = indexedNode.node; - id<FNode> oldChildSnap = [node getImmediateChild:childKey]; - - // Check if anything actually changed. - if ([[oldChildSnap getChild:affectedPath] - isEqual:[newChildSnap getChild:affectedPath]]) { - // There's an edge case where a child can enter or leave the view - // because affectedPath was set to null. In this case, affectedPath will - // appear null in both the old and new snapshots. So we need to avoid - // treating these cases as "nothing changed." - if (oldChildSnap.isEmpty == newChildSnap.isEmpty) { -// Nothing changed. -#ifdef DEBUG - NSAssert([oldChildSnap isEqual:newChildSnap], - @"Old and new snapshots should be equal."); -#endif - - return indexedNode; - } - } - if (optChangeAccumulator) { - if (newChildSnap.isEmpty) { - if ([node hasChild:childKey]) { - FChange *change = [[FChange alloc] - initWithType:FIRDataEventTypeChildRemoved - indexedNode:[FIndexedNode indexedNodeWithNode:oldChildSnap] - childKey:childKey]; - [optChangeAccumulator trackChildChange:change]; - } else { - NSAssert(node.isLeafNode, - @"A child remove without an old child only makes " - @"sense on a leaf node."); - } - } else if (oldChildSnap.isEmpty) { - FChange *change = [[FChange alloc] - initWithType:FIRDataEventTypeChildAdded - indexedNode:[FIndexedNode indexedNodeWithNode:newChildSnap] - childKey:childKey]; - [optChangeAccumulator trackChildChange:change]; - } else { - FChange *change = [[FChange alloc] - initWithType:FIRDataEventTypeChildChanged - indexedNode:[FIndexedNode indexedNodeWithNode:newChildSnap] - childKey:childKey - oldIndexedNode:[FIndexedNode indexedNodeWithNode:oldChildSnap]]; - [optChangeAccumulator trackChildChange:change]; - } - } - if (node.isLeafNode && newChildSnap.isEmpty) { - return indexedNode; - } else { - return [indexedNode updateChild:childKey withNewChild:newChildSnap]; - } -} - -- (FIndexedNode *)updateFullNode:(FIndexedNode *)oldSnap - withNewNode:(FIndexedNode *)newSnap - accumulator: - (FChildChangeAccumulator *)optChangeAccumulator { - if (optChangeAccumulator) { - [oldSnap.node enumerateChildrenUsingBlock:^( - NSString *childKey, id<FNode> childNode, BOOL *stop) { - if (![newSnap.node hasChild:childKey]) { - FChange *change = [[FChange alloc] - initWithType:FIRDataEventTypeChildRemoved - indexedNode:[FIndexedNode indexedNodeWithNode:childNode] - childKey:childKey]; - [optChangeAccumulator trackChildChange:change]; - } - }]; - - [newSnap.node enumerateChildrenUsingBlock:^( - NSString *childKey, id<FNode> childNode, BOOL *stop) { - if ([oldSnap.node hasChild:childKey]) { - id<FNode> oldChildSnap = - [oldSnap.node getImmediateChild:childKey]; - if (![oldChildSnap isEqual:childNode]) { - FChange *change = [[FChange alloc] - initWithType:FIRDataEventTypeChildChanged - indexedNode:[FIndexedNode - indexedNodeWithNode:childNode] - childKey:childKey - oldIndexedNode:[FIndexedNode - indexedNodeWithNode:oldChildSnap]]; - [optChangeAccumulator trackChildChange:change]; - } - } else { - FChange *change = [[FChange alloc] - initWithType:FIRDataEventTypeChildAdded - indexedNode:[FIndexedNode indexedNodeWithNode:childNode] - childKey:childKey]; - [optChangeAccumulator trackChildChange:change]; - } - }]; - } - return newSnap; -} - -- (FIndexedNode *)updatePriority:(id<FNode>)priority - forNode:(FIndexedNode *)oldSnap { - if ([oldSnap.node isEmpty]) { - return oldSnap; - } else { - return [oldSnap updatePriority:priority]; - } -} - -- (BOOL)filtersNodes { - return NO; -} - -- (id<FNodeFilter>)indexedFilter { - return self; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FLimitedFilter.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FLimitedFilter.h deleted file mode 100644 index 0642e72..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FLimitedFilter.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FNodeFilter.h" -#import <Foundation/Foundation.h> - -@class FQueryParams; - -@interface FLimitedFilter : NSObject <FNodeFilter> - -- (id)initWithQueryParams:(FQueryParams *)params; -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FLimitedFilter.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FLimitedFilter.m deleted file mode 100644 index fab9aab..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FLimitedFilter.m +++ /dev/null @@ -1,285 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FLimitedFilter.h" -#import "FChange.h" -#import "FChildChangeAccumulator.h" -#import "FChildrenNode.h" -#import "FCompleteChildSource.h" -#import "FEmptyNode.h" -#import "FIndex.h" -#import "FNamedNode.h" -#import "FQueryParams.h" -#import "FRangedFilter.h" -#import "FTreeSortedDictionary.h" - -@interface FLimitedFilter () -@property(nonatomic, strong) FRangedFilter *rangedFilter; -@property(nonatomic, strong, readwrite) id<FIndex> index; -@property(nonatomic) NSInteger limit; -@property(nonatomic) BOOL reverse; - -@end - -@implementation FLimitedFilter -- (id)initWithQueryParams:(FQueryParams *)params { - self = [super init]; - if (self) { - self.rangedFilter = [[FRangedFilter alloc] initWithQueryParams:params]; - self.index = params.index; - self.limit = params.limit; - self.reverse = !params.isViewFromLeft; - } - return self; -} - -- (FIndexedNode *)updateChildIn:(FIndexedNode *)oldSnap - forChildKey:(NSString *)childKey - newChild:(id<FNode>)newChildSnap - affectedPath:(FPath *)affectedPath - fromSource:(id<FCompleteChildSource>)source - accumulator: - (FChildChangeAccumulator *)optChangeAccumulator { - if (![self.rangedFilter matchesKey:childKey andNode:newChildSnap]) { - newChildSnap = [FEmptyNode emptyNode]; - } - if ([[oldSnap.node getImmediateChild:childKey] isEqual:newChildSnap]) { - // No change - return oldSnap; - } else if (oldSnap.node.numChildren < self.limit) { - return [[self.rangedFilter indexedFilter] - updateChildIn:oldSnap - forChildKey:childKey - newChild:newChildSnap - affectedPath:affectedPath - fromSource:source - accumulator:optChangeAccumulator]; - } else { - return [self fullLimitUpdateNode:oldSnap - forChildKey:childKey - newChild:newChildSnap - fromSource:source - accumulator:optChangeAccumulator]; - } -} - -- (FIndexedNode *)fullLimitUpdateNode:(FIndexedNode *)oldIndexed - forChildKey:(NSString *)childKey - newChild:(id<FNode>)newChildSnap - fromSource:(id<FCompleteChildSource>)source - accumulator: - (FChildChangeAccumulator *)optChangeAccumulator { - NSAssert(oldIndexed.node.numChildren == self.limit, - @"Should have number of children equal to limit."); - - FNamedNode *windowBoundary = - self.reverse ? oldIndexed.firstChild : oldIndexed.lastChild; - - BOOL inRange = [self.rangedFilter matchesKey:childKey andNode:newChildSnap]; - if ([oldIndexed.node hasChild:childKey]) { - // `childKey` was already in `oldSnap`. Figure out if it remains in the - // window or needs to be replaced. - id<FNode> oldChildSnap = [oldIndexed.node getImmediateChild:childKey]; - - // In case the `newChildSnap` falls outside the window, get the - // `nextChild` that might replace it. - FNamedNode *nextChild = [source childByIndex:self.index - afterChild:windowBoundary - isReverse:(BOOL)self.reverse]; - if (nextChild != nil && ([nextChild.name isEqualToString:childKey] || - [oldIndexed.node hasChild:nextChild.name])) { - // There is a weird edge case where a node is updated as part of a - // merge in the write tree, but hasn't been applied to the limited - // filter yet. Ignore this next child which will be updated later in - // the limited filter... - nextChild = [source childByIndex:self.index - afterChild:nextChild - isReverse:self.reverse]; - } - - // Figure out if `newChildSnap` is in range and ordered before - // `nextChild` - BOOL remainsInWindow = inRange && !newChildSnap.isEmpty; - remainsInWindow = remainsInWindow && - (!nextChild || [self.index compareKey:nextChild.name - andNode:nextChild.node - toOtherKey:childKey - andNode:newChildSnap - reverse:self.reverse] >= - NSOrderedSame); - if (remainsInWindow) { - // `newChildSnap` is ordered before `nextChild`, so it's a child - // changed event - if (optChangeAccumulator != nil) { - FChange *change = [[FChange alloc] - initWithType:FIRDataEventTypeChildChanged - indexedNode:[FIndexedNode - indexedNodeWithNode:newChildSnap] - childKey:childKey - oldIndexedNode:[FIndexedNode - indexedNodeWithNode:oldChildSnap]]; - [optChangeAccumulator trackChildChange:change]; - } - return [oldIndexed updateChild:childKey withNewChild:newChildSnap]; - } else { - // `newChildSnap` is ordered after `nextChild`, so it's a child - // removed event - if (optChangeAccumulator != nil) { - FChange *change = [[FChange alloc] - initWithType:FIRDataEventTypeChildRemoved - indexedNode:[FIndexedNode indexedNodeWithNode:oldChildSnap] - childKey:childKey]; - [optChangeAccumulator trackChildChange:change]; - } - FIndexedNode *newIndexed = - [oldIndexed updateChild:childKey - withNewChild:[FEmptyNode emptyNode]]; - - // We need to check if the `nextChild` is actually in range before - // adding it - BOOL nextChildInRange = - (nextChild != nil) && - [self.rangedFilter matchesKey:nextChild.name - andNode:nextChild.node]; - if (nextChildInRange) { - if (optChangeAccumulator != nil) { - FChange *change = [[FChange alloc] - initWithType:FIRDataEventTypeChildAdded - indexedNode:[FIndexedNode - indexedNodeWithNode:nextChild.node] - childKey:nextChild.name]; - [optChangeAccumulator trackChildChange:change]; - } - return [newIndexed updateChild:nextChild.name - withNewChild:nextChild.node]; - } else { - return newIndexed; - } - } - } else if (newChildSnap.isEmpty) { - // We're deleting a node, but it was not in the window, so ignore it. - return oldIndexed; - } else if (inRange) { - // `newChildSnap` is in range, but was ordered after `windowBoundary`. - // If this has changed, we bump out the `windowBoundary` and add the - // `newChildSnap` - if ([self.index compareKey:windowBoundary.name - andNode:windowBoundary.node - toOtherKey:childKey - andNode:newChildSnap - reverse:self.reverse] >= NSOrderedSame) { - if (optChangeAccumulator != nil) { - FChange *removedChange = [[FChange alloc] - initWithType:FIRDataEventTypeChildRemoved - indexedNode:[FIndexedNode - indexedNodeWithNode:windowBoundary.node] - childKey:windowBoundary.name]; - FChange *addedChange = [[FChange alloc] - initWithType:FIRDataEventTypeChildAdded - indexedNode:[FIndexedNode indexedNodeWithNode:newChildSnap] - childKey:childKey]; - [optChangeAccumulator trackChildChange:removedChange]; - [optChangeAccumulator trackChildChange:addedChange]; - } - return [[oldIndexed updateChild:childKey withNewChild:newChildSnap] - updateChild:windowBoundary.name - withNewChild:[FEmptyNode emptyNode]]; - } else { - return oldIndexed; - } - } else { - // `newChildSnap` was not in range and remains not in range, so ignore - // it. - return oldIndexed; - } -} - -- (FIndexedNode *)updateFullNode:(FIndexedNode *)oldSnap - withNewNode:(FIndexedNode *)newSnap - accumulator: - (FChildChangeAccumulator *)optChangeAccumulator { - __block FIndexedNode *filtered; - if (newSnap.node.isLeafNode || newSnap.node.isEmpty) { - // Make sure we have a children node with the correct index, not a leaf - // node - filtered = [FIndexedNode indexedNodeWithNode:[FEmptyNode emptyNode] - index:self.index]; - } else { - filtered = newSnap; - // Don't support priorities on queries. - filtered = [filtered updatePriority:[FEmptyNode emptyNode]]; - FNamedNode *startPost = nil; - FNamedNode *endPost = nil; - if (self.reverse) { - startPost = self.rangedFilter.endPost; - endPost = self.rangedFilter.startPost; - } else { - startPost = self.rangedFilter.startPost; - endPost = self.rangedFilter.endPost; - } - __block BOOL foundStartPost = NO; - __block NSUInteger count = 0; - [newSnap - enumerateChildrenReverse:self.reverse - usingBlock:^(NSString *childKey, id<FNode> childNode, - BOOL *stop) { - if (!foundStartPost && - [self.index - compareKey:startPost.name - andNode:startPost.node - toOtherKey:childKey - andNode:childNode - reverse:self.reverse] <= NSOrderedSame) { - // Start adding - foundStartPost = YES; - } - BOOL inRange = foundStartPost && count < self.limit; - inRange = inRange && - [self.index compareKey:childKey - andNode:childNode - toOtherKey:endPost.name - andNode:endPost.node - reverse:self.reverse] <= - NSOrderedSame; - if (inRange) { - count++; - } else { - filtered = [filtered - updateChild:childKey - withNewChild:[FEmptyNode emptyNode]]; - } - }]; - } - return [self.indexedFilter updateFullNode:oldSnap - withNewNode:filtered - accumulator:optChangeAccumulator]; -} - -- (FIndexedNode *)updatePriority:(id<FNode>)priority - forNode:(FIndexedNode *)oldSnap { - // Don't support priorities on queries. - return oldSnap; -} - -- (BOOL)filtersNodes { - return YES; -} - -- (id<FNodeFilter>)indexedFilter { - return self.rangedFilter.indexedFilter; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FNodeFilter.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FNodeFilter.h deleted file mode 100644 index d19c6fb..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Core/View/Filter/FNodeFilter.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@protocol FNode; -@class FIndexedNode; -@protocol FCompleteChildSource; -@class FChildChangeAccumulator; -@protocol FIndex; -@class FPath; - -/** - * FNodeFilter is used to update nodes and complete children of nodes while - * applying queries on the fly and keeping track of any child changes. This - * class does not track value changes as value changes depend on more than just - * the node itself. Different kind of queries require different kind of - * implementations of this interface. - */ -@protocol FNodeFilter <NSObject> - -/** - * Update a single complete child in the snap. If the child equals the old child - * in the snap, this is a no-op. The method expects an indexed snap. - */ -- (FIndexedNode *)updateChildIn:(FIndexedNode *)oldSnap - forChildKey:(NSString *)childKey - newChild:(id<FNode>)newChildSnap - affectedPath:(FPath *)affectedPath - fromSource:(id<FCompleteChildSource>)source - accumulator:(FChildChangeAccumulator *)optChangeAccumulator; - -/** - * Update a node in full and output any resulting change from this complete - * update. - */ -- (FIndexedNode *)updateFullNode:(FIndexedNode *)oldSnap - withNewNode:(FIndexedNode *)newSnap - accumulator: - (FChildChangeAccumulator *)optChangeAccumulator; - -/** - * Update the priority of the root node - */ -- (FIndexedNode *)updatePriority:(id<FNode>)priority - forNode:(FIndexedNode *)oldSnap; - -/** - * Returns true if children might be filtered due to query critiera - */ -- (BOOL)filtersNodes; - -/** - * Returns the index filter that this filter uses to get a NodeFilter that - * doesn't filter any children. - */ -@property(nonatomic, strong, readonly) id<FNodeFilter> indexedFilter; - -/** - * Returns the index that this filter uses - */ -@property(nonatomic, strong, readonly) id<FIndex> index; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FClock.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FClock.h deleted file mode 100644 index e85cb2a..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FClock.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@protocol FClock <NSObject> - -- (NSTimeInterval)currentTime; - -@end - -@interface FSystemClock : NSObject <FClock> - -+ (FSystemClock *)clock; - -@end - -@interface FOffsetClock : NSObject <FClock> - -- (id)initWithClock:(id<FClock>)clock offset:(NSTimeInterval)offset; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FClock.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FClock.m deleted file mode 100644 index 5d9a9ec..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FClock.m +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FClock.h" - -@implementation FSystemClock - -- (NSTimeInterval)currentTime { - return [[NSDate date] timeIntervalSince1970]; -} - -+ (FSystemClock *)clock { - static dispatch_once_t onceToken; - static FSystemClock *clock; - dispatch_once(&onceToken, ^{ - clock = [[FSystemClock alloc] init]; - }); - return clock; -} - -@end - -@interface FOffsetClock () - -@property(nonatomic, strong) id<FClock> clock; -@property(nonatomic) NSTimeInterval offset; - -@end - -@implementation FOffsetClock - -- (NSTimeInterval)currentTime { - return [self.clock currentTime] + self.offset; -} - -- (id)initWithClock:(id<FClock>)clock offset:(NSTimeInterval)offset { - self = [super init]; - if (self != nil) { - self->_clock = clock; - self->_offset = offset; - } - return self; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FEventGenerator.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FEventGenerator.h deleted file mode 100644 index 443664e..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FEventGenerator.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@class FQuerySpec; -@class FIndexedNode; -@protocol FNode; - -@interface FEventGenerator : NSObject -- (id)initWithQuery:(FQuerySpec *)query; -- (NSArray *)generateEventsForChanges:(NSArray *)changes - eventCache:(FIndexedNode *)eventCache - eventRegistrations:(NSArray *)registrations; -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FEventGenerator.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FEventGenerator.m deleted file mode 100644 index 162b0ac..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FEventGenerator.m +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FEventGenerator.h" -#import "FChange.h" -#import "FDataEvent.h" -#import "FEvent.h" -#import "FEventRegistration.h" -#import "FIRDatabaseQuery_Private.h" -#import "FNamedNode.h" -#import "FNode.h" -#import "FQueryParams.h" -#import "FQuerySpec.h" - -@interface FEventGenerator () -@property(nonatomic, strong) FQuerySpec *query; -@end - -/** - * An EventGenerator is used to convert "raw" changes (fb.core.view.Change) as - * computed by the CacheDiffer into actual events (fb.core.view.Event) that can - * be raised. See generateEventsForChanges() for details. - */ -@implementation FEventGenerator - -- (id)initWithQuery:(FQuerySpec *)query { - self = [super init]; - if (self) { - self.query = query; - } - return self; -} - -/** - * Given a set of raw changes (no moved events, and prevName not specified yet), - * and a set of EventRegistrations that should be notified of these changes, - * generate the actual events to be raised. - * - * Notes: - * - child_moved events will be synthesized at this time for any child_changed - * events that affect our index - * - prevName will be calculated based on the index ordering - * - * @param changes NSArray of FChange, not necessarily in order. - * @param registrations is NSArray of FEventRegistration. - * @return NSArray of FEvent. - */ -- (NSArray *)generateEventsForChanges:(NSArray *)changes - eventCache:(FIndexedNode *)eventCache - eventRegistrations:(NSArray *)registrations { - NSMutableArray *events = [[NSMutableArray alloc] init]; - - // child_moved is index-specific, so check all our child_changed events to - // see if we need to materialize child_moved events with this view's index - NSMutableArray *moves = [[NSMutableArray alloc] init]; - for (FChange *change in changes) { - if (change.type == FIRDataEventTypeChildChanged && - [self.query.index - indexedValueChangedBetween:change.oldIndexedNode.node - and:change.indexedNode.node]) { - FChange *moveChange = - [[FChange alloc] initWithType:FIRDataEventTypeChildMoved - indexedNode:change.indexedNode - childKey:change.childKey - oldIndexedNode:nil]; - [moves addObject:moveChange]; - } - } - - [self generateEvents:events - forType:FIRDataEventTypeChildRemoved - changes:changes - eventCache:eventCache - eventRegistrations:registrations]; - [self generateEvents:events - forType:FIRDataEventTypeChildAdded - changes:changes - eventCache:eventCache - eventRegistrations:registrations]; - [self generateEvents:events - forType:FIRDataEventTypeChildMoved - changes:moves - eventCache:eventCache - eventRegistrations:registrations]; - [self generateEvents:events - forType:FIRDataEventTypeChildChanged - changes:changes - eventCache:eventCache - eventRegistrations:registrations]; - [self generateEvents:events - forType:FIRDataEventTypeValue - changes:changes - eventCache:eventCache - eventRegistrations:registrations]; - - return events; -} - -- (void)generateEvents:(NSMutableArray *)events - forType:(FIRDataEventType)eventType - changes:(NSArray *)changes - eventCache:(FIndexedNode *)eventCache - eventRegistrations:(NSArray *)registrations { - NSMutableArray *filteredChanges = [[NSMutableArray alloc] init]; - for (FChange *change in changes) { - if (change.type == eventType) { - [filteredChanges addObject:change]; - } - } - - id<FIndex> index = self.query.index; - - [filteredChanges - sortUsingComparator:^NSComparisonResult(FChange *one, FChange *two) { - if (one.childKey == nil || two.childKey == nil) { - @throw [[NSException alloc] - initWithName:@"InternalInconsistencyError" - reason:@"Should only compare child_ events" - userInfo:nil]; - } - return [index compareKey:one.childKey - andNode:one.indexedNode.node - toOtherKey:two.childKey - andNode:two.indexedNode.node]; - }]; - - for (FChange *change in filteredChanges) { - for (id<FEventRegistration> registration in registrations) { - if ([registration responseTo:eventType]) { - id<FEvent> event = [self generateEventForChange:change - registration:registration - eventCache:eventCache]; - [events addObject:event]; - } - } - } -} - -- (id<FEvent>)generateEventForChange:(FChange *)change - registration:(id<FEventRegistration>)registration - eventCache:(FIndexedNode *)eventCache { - FChange *materializedChange; - if (change.type == FIRDataEventTypeValue || - change.type == FIRDataEventTypeChildRemoved) { - materializedChange = change; - } else { - NSString *prevChildKey = - [eventCache predecessorForChildKey:change.childKey - childNode:change.indexedNode.node - index:self.query.index]; - materializedChange = [change changeWithPrevKey:prevChildKey]; - } - return [registration createEventFrom:materializedChange query:self.query]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIRDatabaseConfig_Private.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIRDatabaseConfig_Private.h deleted file mode 100644 index ca2f34b..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIRDatabaseConfig_Private.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FAuthTokenProvider.h" -#import "FIRDatabaseConfig.h" - -@protocol FStorageEngine; - -@interface FIRDatabaseConfig () - -@property(nonatomic, readonly) BOOL isFrozen; -@property(nonatomic, strong, readonly) NSString *sessionIdentifier; -@property(nonatomic, strong) id<FAuthTokenProvider> authTokenProvider; -@property(nonatomic, strong) id<FStorageEngine> forceStorageEngine; - -- (void)freeze; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIRDatabaseReference.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIRDatabaseReference.m deleted file mode 100644 index b3c0106..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIRDatabaseReference.m +++ /dev/null @@ -1,528 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRDatabaseReference.h" -#import "FIRDatabase.h" -#import "FIRDatabaseConfig.h" -#import "FIRDatabaseConfig_Private.h" -#import "FIRDatabaseQuery_Private.h" -#import "FIRDatabaseReference_Private.h" -#import "FNextPushId.h" -#import "FQueryParams.h" -#import "FSnapshotUtilities.h" -#import "FStringUtilities.h" -#import "FUtilities.h" -#import "FValidation.h" -#import <FirebaseCore/FIRApp.h> -#import <FirebaseCore/FIROptions.h> - -@implementation FIRDatabaseReference - -#pragma mark - -#pragma mark Constructors - -- (id)initWithConfig:(FIRDatabaseConfig *)config { - FParsedUrl *parsedUrl = - [FUtilities parseUrl:[[FIRApp defaultApp] options].databaseURL]; - [FValidation validateFrom:@"initWithUrl:" validURL:parsedUrl]; - return [self initWithRepo:[FRepoManager getRepo:parsedUrl.repoInfo - config:config] - path:parsedUrl.path]; -} - -- (id)initWithRepo:(FRepo *)repo path:(FPath *)path { - return [super initWithRepo:repo - path:path - params:[FQueryParams defaultInstance] - orderByCalled:NO - priorityMethodCalled:NO]; -} - -#pragma mark - -#pragma mark Ancillary methods - -- (nullable NSString *)key { - if ([self.path isEmpty]) { - return nil; - } else { - return [self.path getBack]; - } -} - -- (FIRDatabase *)database { - return self.repo.database; -} - -- (FIRDatabaseReference *)parent { - FPath *parentPath = [self.path parent]; - FIRDatabaseReference *parent = nil; - if (parentPath != nil) { - parent = [[FIRDatabaseReference alloc] initWithRepo:self.repo - path:parentPath]; - } - return parent; -} - -- (NSString *)URL { - FIRDatabaseReference *parent = [self parent]; - return parent == nil - ? [self.repo description] - : [NSString - stringWithFormat:@"%@/%@", [parent description], - [FStringUtilities urlEncoded:self.key]]; -} - -- (NSString *)description { - return [self URL]; -} - -- (FIRDatabaseReference *)root { - return [[FIRDatabaseReference alloc] - initWithRepo:self.repo - path:[[FPath alloc] initWith:@""]]; -} - -#pragma mark - -#pragma mark Child methods - -- (FIRDatabaseReference *)child:(NSString *)pathString { - if ([self.path getFront] == nil) { - // we're at the root - [FValidation validateFrom:@"child:" validRootPathString:pathString]; - } else { - [FValidation validateFrom:@"child:" validPathString:pathString]; - } - FPath *path = [self.path childFromString:pathString]; - FIRDatabaseReference *firebaseRef = - [[FIRDatabaseReference alloc] initWithRepo:self.repo path:path]; - return firebaseRef; -} - -- (FIRDatabaseReference *)childByAutoId { - [FValidation validateFrom:@"childByAutoId:" writablePath:self.path]; - - NSString *name = [FNextPushId get:self.repo.serverTime]; - return [self child:name]; -} - -#pragma mark - -#pragma mark Basic write methods - -- (void)setValue:(id)value { - [self setValueInternal:value - andPriority:nil - withCompletionBlock:nil - from:@"setValue:"]; -} - -- (void)setValue:(id)value withCompletionBlock:(fbt_void_nserror_ref)block { - [self setValueInternal:value - andPriority:nil - withCompletionBlock:block - from:@"setValue:withCompletionBlock:"]; -} - -- (void)setValue:(id)value andPriority:(id)priority { - [self setValueInternal:value - andPriority:priority - withCompletionBlock:nil - from:@"setValue:andPriority:"]; -} - -- (void)setValue:(id)value - andPriority:(id)priority - withCompletionBlock:(fbt_void_nserror_ref)block { - [self setValueInternal:value - andPriority:priority - withCompletionBlock:block - from:@"setValue:andPriority:withCompletionBlock:"]; -} - -- (void)setValueInternal:(id)value - andPriority:(id)priority - withCompletionBlock:(fbt_void_nserror_ref)block - from:(NSString *)fn { - [FValidation validateFrom:fn writablePath:self.path]; - - fbt_void_nserror_ref userCallback = [block copy]; - id<FNode> newNode = [FSnapshotUtilities nodeFrom:value - priority:priority - withValidationFrom:fn]; - - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - [self.repo set:self.path withNode:newNode withCallback:userCallback]; - }); -} - -- (void)removeValue { - [self setValueInternal:nil - andPriority:nil - withCompletionBlock:nil - from:@"removeValue:"]; -} - -- (void)removeValueWithCompletionBlock:(fbt_void_nserror_ref)block { - [self setValueInternal:nil - andPriority:nil - withCompletionBlock:block - from:@"removeValueWithCompletionBlock:"]; -} - -- (void)setPriority:(id)priority { - [self setPriorityInternal:priority - withCompletionBlock:nil - from:@"setPriority:"]; -} - -- (void)setPriority:(id)priority - withCompletionBlock:(fbt_void_nserror_ref)block { - - [self setPriorityInternal:priority - withCompletionBlock:block - from:@"setPriority:withCompletionBlock:"]; -} - -- (void)setPriorityInternal:(id)priority - withCompletionBlock:(fbt_void_nserror_ref)block - from:(NSString *)fn { - [FValidation validateFrom:fn writablePath:self.path]; - - fbt_void_nserror_ref userCallback = [block copy]; - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - [self.repo set:[self.path childFromString:@".priority"] - withNode:[FSnapshotUtilities nodeFrom:priority] - withCallback:userCallback]; - }); -} - -- (void)updateChildValues:(NSDictionary *)values { - [self updateChildValuesInternal:values - withCompletionBlock:nil - from:@"updateChildValues:"]; -} - -- (void)updateChildValues:(NSDictionary *)values - withCompletionBlock:(fbt_void_nserror_ref)block { - [self updateChildValuesInternal:values - withCompletionBlock:block - from:@"updateChildValues:withCompletionBlock:"]; -} - -- (void)updateChildValuesInternal:(NSDictionary *)values - withCompletionBlock:(fbt_void_nserror_ref)block - from:(NSString *)fn { - [FValidation validateFrom:fn writablePath:self.path]; - - FCompoundWrite *merge = - [FSnapshotUtilities compoundWriteFromDictionary:values - withValidationFrom:fn]; - - fbt_void_nserror_ref userCallback = [block copy]; - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - [self.repo update:self.path withNodes:merge withCallback:userCallback]; - }); -} - -#pragma mark - -#pragma mark Disconnect Operations - -- (void)onDisconnectSetValue:(id)value { - [self onDisconnectSetValueInternal:value - andPriority:nil - withCompletionBlock:nil - from:@"onDisconnectSetValue:"]; -} - -- (void)onDisconnectSetValue:(id)value - withCompletionBlock:(fbt_void_nserror_ref)block { - [self onDisconnectSetValueInternal:value - andPriority:nil - withCompletionBlock:block - from:@"onDisconnectSetValue:" - @"withCompletionBlock:"]; -} - -- (void)onDisconnectSetValue:(id)value andPriority:(id)priority { - [self onDisconnectSetValueInternal:value - andPriority:priority - withCompletionBlock:nil - from:@"onDisconnectSetValue:andPriority:"]; -} - -- (void)onDisconnectSetValue:(id)value - andPriority:(id)priority - withCompletionBlock:(fbt_void_nserror_ref)block { - [self onDisconnectSetValueInternal:value - andPriority:priority - withCompletionBlock:block - from:@"onDisconnectSetValue:andPriority:" - @"withCompletionBlock:"]; -} - -- (void)onDisconnectSetValueInternal:(id)value - andPriority:(id)priority - withCompletionBlock:(fbt_void_nserror_ref)block - from:(NSString *)fn { - [FValidation validateFrom:fn writablePath:self.path]; - - id<FNode> newNodeUnresolved = [FSnapshotUtilities nodeFrom:value - priority:priority - withValidationFrom:fn]; - - fbt_void_nserror_ref userCallback = [block copy]; - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - [self.repo onDisconnectSet:self.path - withNode:newNodeUnresolved - withCallback:userCallback]; - }); -} - -- (void)onDisconnectRemoveValue { - [self onDisconnectSetValueInternal:nil - andPriority:nil - withCompletionBlock:nil - from:@"onDisconnectRemoveValue:"]; -} - -- (void)onDisconnectRemoveValueWithCompletionBlock:(fbt_void_nserror_ref)block { - [self onDisconnectSetValueInternal:nil - andPriority:nil - withCompletionBlock:block - from:@"onDisconnectRemoveValueWithCompletionB" - @"lock:"]; -} - -- (void)onDisconnectUpdateChildValues:(NSDictionary *)values { - [self - onDisconnectUpdateChildValuesInternal:values - withCompletionBlock:nil - from: - @"onDisconnectUpdateChildValues:"]; -} - -- (void)onDisconnectUpdateChildValues:(NSDictionary *)values - withCompletionBlock:(fbt_void_nserror_ref)block { - [self onDisconnectUpdateChildValuesInternal:values - withCompletionBlock:block - from:@"onDisconnectUpdateChildValues" - @":withCompletionBlock:"]; -} - -- (void)onDisconnectUpdateChildValuesInternal:(NSDictionary *)values - withCompletionBlock:(fbt_void_nserror_ref)block - from:(NSString *)fn { - [FValidation validateFrom:fn writablePath:self.path]; - - FCompoundWrite *merge = - [FSnapshotUtilities compoundWriteFromDictionary:values - withValidationFrom:fn]; - - fbt_void_nserror_ref userCallback = [block copy]; - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - [self.repo onDisconnectUpdate:self.path - withNodes:merge - withCallback:userCallback]; - }); -} - -- (void)cancelDisconnectOperations { - [self cancelDisconnectOperationsWithCompletionBlock:nil]; -} - -- (void)cancelDisconnectOperationsWithCompletionBlock: - (fbt_void_nserror_ref)block { - fbt_void_nserror_ref callback = nil; - if (block != nil) { - callback = [block copy]; - } - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - [self.repo onDisconnectCancel:self.path withCallback:callback]; - }); -} - -#pragma mark - -#pragma mark Connection management methods - -+ (void)goOffline { - [FRepoManager interruptAll]; -} - -+ (void)goOnline { - [FRepoManager resumeAll]; -} - -#pragma mark - -#pragma mark Data reading methods deferred to FQuery - -- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType - withBlock:(fbt_void_datasnapshot)block { - return [self observeEventType:eventType - withBlock:block - withCancelBlock:nil]; -} - -- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType - andPreviousSiblingKeyWithBlock:(fbt_void_datasnapshot_nsstring)block { - return [self observeEventType:eventType - andPreviousSiblingKeyWithBlock:block - withCancelBlock:nil]; -} - -- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType - withBlock:(fbt_void_datasnapshot)block - withCancelBlock:(fbt_void_nserror)cancelBlock { - return [super observeEventType:eventType - withBlock:block - withCancelBlock:cancelBlock]; -} - -- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType - andPreviousSiblingKeyWithBlock:(fbt_void_datasnapshot_nsstring)block - withCancelBlock:(fbt_void_nserror)cancelBlock { - return [super observeEventType:eventType - andPreviousSiblingKeyWithBlock:block - withCancelBlock:cancelBlock]; -} - -- (void)removeObserverWithHandle:(FIRDatabaseHandle)handle { - [super removeObserverWithHandle:handle]; -} - -- (void)removeAllObservers { - [super removeAllObservers]; -} - -- (void)keepSynced:(BOOL)keepSynced { - [super keepSynced:keepSynced]; -} - -- (void)observeSingleEventOfType:(FIRDataEventType)eventType - withBlock:(fbt_void_datasnapshot)block { - [self observeSingleEventOfType:eventType - withBlock:block - withCancelBlock:nil]; -} - -- (void)observeSingleEventOfType:(FIRDataEventType)eventType - andPreviousSiblingKeyWithBlock:(fbt_void_datasnapshot_nsstring)block { - [self observeSingleEventOfType:eventType - andPreviousSiblingKeyWithBlock:block - withCancelBlock:nil]; -} - -- (void)observeSingleEventOfType:(FIRDataEventType)eventType - withBlock:(fbt_void_datasnapshot)block - withCancelBlock:(fbt_void_nserror)cancelBlock { - [super observeSingleEventOfType:eventType - withBlock:block - withCancelBlock:cancelBlock]; -} - -- (void)observeSingleEventOfType:(FIRDataEventType)eventType - andPreviousSiblingKeyWithBlock:(fbt_void_datasnapshot_nsstring)block - withCancelBlock:(fbt_void_nserror)cancelBlock { - [super observeSingleEventOfType:eventType - andPreviousSiblingKeyWithBlock:block - withCancelBlock:cancelBlock]; -} - -#pragma mark - -#pragma mark Query methods -// These methods suppress warnings from having method definitions in -// FIRDatabaseReference.h for docs generation. - -- (FIRDatabaseQuery *)queryLimitedToFirst:(NSUInteger)limit { - return [super queryLimitedToFirst:limit]; -} - -- (FIRDatabaseQuery *)queryLimitedToLast:(NSUInteger)limit { - return [super queryLimitedToLast:limit]; -} - -- (FIRDatabaseQuery *)queryOrderedByChild:(NSString *)key { - return [super queryOrderedByChild:key]; -} - -- (FIRDatabaseQuery *)queryOrderedByKey { - return [super queryOrderedByKey]; -} - -- (FIRDatabaseQuery *)queryOrderedByPriority { - return [super queryOrderedByPriority]; -} - -- (FIRDatabaseQuery *)queryStartingAtValue:(id)startValue { - return [super queryStartingAtValue:startValue]; -} - -- (FIRDatabaseQuery *)queryStartingAtValue:(id)startValue - childKey:(NSString *)childKey { - return [super queryStartingAtValue:startValue childKey:childKey]; -} - -- (FIRDatabaseQuery *)queryEndingAtValue:(id)endValue { - return [super queryEndingAtValue:endValue]; -} - -- (FIRDatabaseQuery *)queryEndingAtValue:(id)endValue - childKey:(NSString *)childKey { - return [super queryEndingAtValue:endValue childKey:childKey]; -} - -- (FIRDatabaseQuery *)queryEqualToValue:(id)value { - return [super queryEqualToValue:value]; -} - -- (FIRDatabaseQuery *)queryEqualToValue:(id)value - childKey:(NSString *)childKey { - return [super queryEqualToValue:value childKey:childKey]; -} - -#pragma mark - -#pragma mark Transaction methods - -- (void)runTransactionBlock:(fbt_transactionresult_mutabledata)block { - [FValidation validateFrom:@"runTransactionBlock:" writablePath:self.path]; - [self runTransactionBlock:block andCompletionBlock:nil withLocalEvents:YES]; -} - -- (void)runTransactionBlock:(fbt_transactionresult_mutabledata)update - andCompletionBlock: - (fbt_void_nserror_bool_datasnapshot)completionBlock { - [FValidation validateFrom:@"runTransactionBlock:andCompletionBlock:" - writablePath:self.path]; - [self runTransactionBlock:update - andCompletionBlock:completionBlock - withLocalEvents:YES]; -} - -- (void)runTransactionBlock:(fbt_transactionresult_mutabledata)block - andCompletionBlock:(fbt_void_nserror_bool_datasnapshot)completionBlock - withLocalEvents:(BOOL)localEvents { - [FValidation - validateFrom:@"runTransactionBlock:andCompletionBlock:withLocalEvents:" - writablePath:self.path]; - fbt_transactionresult_mutabledata updateCopy = [block copy]; - fbt_void_nserror_bool_datasnapshot onCompleteCopy = [completionBlock copy]; - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - [self.repo startTransactionOnPath:self.path - update:updateCopy - onComplete:onCompleteCopy - withLocalEvents:localEvents]; - }); -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIndex.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIndex.h deleted file mode 100644 index 89bec76..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIndex.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@class FImmutableSortedDictionary; -@class FNamedNode; -@protocol FNode; - -@protocol FIndex <NSObject, NSCopying> -- (NSComparisonResult)compareKey:(NSString *)key1 - andNode:(id<FNode>)node1 - toOtherKey:(NSString *)key2 - andNode:(id<FNode>)node2; - -- (NSComparisonResult)compareKey:(NSString *)key1 - andNode:(id<FNode>)node1 - toOtherKey:(NSString *)key2 - andNode:(id<FNode>)node2 - reverse:(BOOL)reverse; - -- (NSComparisonResult)compareNamedNode:(FNamedNode *)namedNode1 - toNamedNode:(FNamedNode *)namedNode2; - -- (BOOL)isDefinedOn:(id<FNode>)node; -- (BOOL)indexedValueChangedBetween:(id<FNode>)oldNode and:(id<FNode>)newNode; -- (FNamedNode *)minPost; -- (FNamedNode *)maxPost; -- (FNamedNode *)makePost:(id<FNode>)indexValue name:(NSString *)name; -- (NSString *)queryDefinition; - -@end - -@interface FIndex : NSObject - -+ (id<FIndex>)indexFromQueryDefinition:(NSString *)string; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIndex.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIndex.m deleted file mode 100644 index 0366399..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FIndex.m +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIndex.h" - -#import "FKeyIndex.h" -#import "FPathIndex.h" -#import "FPriorityIndex.h" -#import "FValueIndex.h" - -@implementation FIndex - -+ (id<FIndex>)indexFromQueryDefinition:(NSString *)string { - if ([string isEqualToString:@".key"]) { - return [FKeyIndex keyIndex]; - } else if ([string isEqualToString:@".value"]) { - return [FValueIndex valueIndex]; - } else if ([string isEqualToString:@".priority"]) { - return [FPriorityIndex priorityIndex]; - } else { - return - [[FPathIndex alloc] initWithPath:[[FPath alloc] initWith:string]]; - } -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FKeyIndex.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FKeyIndex.h deleted file mode 100644 index 281a5ac..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FKeyIndex.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIndex.h" -#import <Foundation/Foundation.h> - -@interface FKeyIndex : NSObject <FIndex> -+ (id<FIndex>)keyIndex; -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FKeyIndex.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FKeyIndex.m deleted file mode 100644 index ac10829..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FKeyIndex.m +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FKeyIndex.h" -#import "FEmptyNode.h" -#import "FNamedNode.h" -#import "FSnapshotUtilities.h" -#import "FUtilities.h" - -@interface FKeyIndex () - -@property(nonatomic, strong) FNamedNode *maxPost; - -@end - -@implementation FKeyIndex - -- (id)init { - self = [super init]; - if (self) { - self.maxPost = [[FNamedNode alloc] initWithName:[FUtilities maxName] - andNode:[FEmptyNode emptyNode]]; - } - return self; -} - -- (NSComparisonResult)compareKey:(NSString *)key1 - andNode:(id<FNode>)node1 - toOtherKey:(NSString *)key2 - andNode:(id<FNode>)node2 { - return [FUtilities compareKey:key1 toKey:key2]; -} - -- (NSComparisonResult)compareKey:(NSString *)key1 - andNode:(id<FNode>)node1 - toOtherKey:(NSString *)key2 - andNode:(id<FNode>)node2 - reverse:(BOOL)reverse { - if (reverse) { - return [self compareKey:key2 - andNode:node2 - toOtherKey:key1 - andNode:node1]; - } else { - return [self compareKey:key1 - andNode:node1 - toOtherKey:key2 - andNode:node2]; - } -} - -- (NSComparisonResult)compareNamedNode:(FNamedNode *)namedNode1 - toNamedNode:(FNamedNode *)namedNode2 { - return [self compareKey:namedNode1.name - andNode:namedNode1.node - toOtherKey:namedNode2.name - andNode:namedNode2.node]; -} - -- (BOOL)isDefinedOn:(id<FNode>)node { - return YES; -} - -- (BOOL)indexedValueChangedBetween:(id<FNode>)oldNode and:(id<FNode>)newNode { - return NO; // The key for a node never changes. -} - -- (FNamedNode *)minPost { - return [FNamedNode min]; -} - -- (FNamedNode *)makePost:(id<FNode>)indexValue name:(NSString *)name { - NSString *key = indexValue.val; - NSAssert([key isKindOfClass:[NSString class]], - @"KeyIndex indexValue must always be a string."); - // We just use empty node, but it'll never be compared, since our comparator - // only looks at name. - return [[FNamedNode alloc] initWithName:key andNode:[FEmptyNode emptyNode]]; -} - -- (NSString *)queryDefinition { - return @".key"; -} - -- (NSString *)description { - return @"FKeyIndex"; -} - -- (id)copyWithZone:(NSZone *)zone { - return self; -} - -- (BOOL)isEqual:(id)other { - // since we're a singleton. - return (other == self); -} - -- (NSUInteger)hash { - return [@".key" hash]; -} - -+ (id<FIndex>)keyIndex { - static id<FIndex> keyIndex; - static dispatch_once_t once; - dispatch_once(&once, ^{ - keyIndex = [[FKeyIndex alloc] init]; - }); - return keyIndex; -} -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FListenComplete.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FListenComplete.h deleted file mode 100644 index 99aabf8..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FListenComplete.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FOperation.h" -#import <Foundation/Foundation.h> - -@interface FListenComplete : NSObject <FOperation> - -- (id)initWithSource:(FOperationSource *)aSource path:(FPath *)aPath; - -@property(nonatomic, strong, readonly) FOperationSource *source; -@property(nonatomic, strong, readonly) FPath *path; -@property(nonatomic, readonly) FOperationType type; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FListenComplete.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FListenComplete.m deleted file mode 100644 index 26370c6..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FListenComplete.m +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FListenComplete.h" -#import "FOperationSource.h" -#import "FPath.h" - -@interface FListenComplete () -@property(nonatomic, strong, readwrite) FOperationSource *source; -@property(nonatomic, strong, readwrite) FPath *path; -@property(nonatomic, readwrite) FOperationType type; -@end - -@implementation FListenComplete -- (id)initWithSource:(FOperationSource *)aSource path:(FPath *)aPath { - NSAssert(!aSource.fromUser, - @"Can't have a listen complete from a user source"); - self = [super init]; - if (self) { - self.source = aSource; - self.path = aPath; - self.type = FOperationTypeListenComplete; - } - return self; -} - -- (id<FOperation>)operationForChild:(NSString *)childKey { - if ([self.path isEmpty]) { - return [[FListenComplete alloc] initWithSource:self.source - path:[FPath empty]]; - } else { - return [[FListenComplete alloc] initWithSource:self.source - path:[self.path popFront]]; - } -} - -- (NSString *)description { - return [NSString stringWithFormat:@"FListenComplete { path=%@, source=%@ }", - self.path, self.source]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FMaxNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FMaxNode.h deleted file mode 100644 index c68137e..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FMaxNode.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FChildrenNode.h" -#import <Foundation/Foundation.h> - -@interface FMaxNode : FChildrenNode -+ (id<FNode>)maxNode; -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FMaxNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FMaxNode.m deleted file mode 100644 index 28e7672..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FMaxNode.m +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FMaxNode.h" -#import "FEmptyNode.h" -#import "FUtilities.h" - -@implementation FMaxNode { -} -- (id)init { - self = [super init]; - if (self) { - } - return self; -} - -+ (id<FNode>)maxNode { - static FMaxNode *maxNode = nil; - static dispatch_once_t once; - dispatch_once(&once, ^{ - maxNode = [[FMaxNode alloc] init]; - }); - return maxNode; -} - -- (NSComparisonResult)compare:(id<FNode>)other { - if (other == self) { - return NSOrderedSame; - } else { - return NSOrderedDescending; - } -} - -- (BOOL)isEqual:(id)other { - return other == self; -} - -- (id<FNode>)getImmediateChild:(NSString *)childName { - return [FEmptyNode emptyNode]; -} - -- (BOOL)isEmpty { - return NO; -} -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FNamedNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FNamedNode.h deleted file mode 100644 index 4414dfd..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FNamedNode.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FNode.h" -#import <Foundation/Foundation.h> - -@interface FNamedNode : NSObject <NSCopying> - -@property(nonatomic, strong, readonly) NSString *name; -@property(nonatomic, strong, readonly) id<FNode> node; - -- (id)initWithName:(NSString *)name andNode:(id<FNode>)node; - -+ (FNamedNode *)nodeWithName:(NSString *)name node:(id<FNode>)node; - -+ (FNamedNode *)min; -+ (FNamedNode *)max; -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FNamedNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FNamedNode.m deleted file mode 100644 index 3b2eaf7..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FNamedNode.m +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FNamedNode.h" -#import "FEmptyNode.h" -#import "FIndex.h" -#import "FMaxNode.h" -#import "FUtilities.h" - -@interface FNamedNode () -@property(nonatomic, strong, readwrite) NSString *name; -@property(nonatomic, strong, readwrite) id<FNode> node; -@end - -@implementation FNamedNode - -+ (FNamedNode *)nodeWithName:(NSString *)name node:(id<FNode>)node { - return [[FNamedNode alloc] initWithName:name andNode:node]; -} - -- (id)initWithName:(NSString *)name andNode:(id<FNode>)node { - self = [super init]; - if (self) { - self.name = name; - self.node = node; - } - return self; -} - -- (id)copy { - return self; -} - -- (id)copyWithZone:(NSZone *)zone { - return self; -} - -+ (FNamedNode *)min { - static FNamedNode *min = nil; - static dispatch_once_t once; - dispatch_once(&once, ^{ - min = [[FNamedNode alloc] initWithName:[FUtilities minName] - andNode:[FEmptyNode emptyNode]]; - }); - return min; -} - -+ (FNamedNode *)max { - static FNamedNode *max = nil; - static dispatch_once_t once; - dispatch_once(&once, ^{ - max = [[FNamedNode alloc] initWithName:[FUtilities maxName] - andNode:[FMaxNode maxNode]]; - }); - return max; -} - -- (NSString *)description { - return - [NSString stringWithFormat:@"NamedNode[%@] %@", self.name, self.node]; -} - -- (BOOL)isEqual:(id)object { - if (self == object) { - return YES; - } - if (object == nil || ![object isKindOfClass:[FNamedNode class]]) { - return NO; - } - - FNamedNode *namedNode = object; - if (![self.name isEqualToString:namedNode.name]) { - return NO; - } - if (![self.node isEqual:namedNode.node]) { - return NO; - } - - return YES; -} - -- (NSUInteger)hash { - NSUInteger nameHash = [self.name hash]; - NSUInteger nodeHash = [self.node hash]; - NSUInteger result = 31 * nameHash + nodeHash; - return result; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPathIndex.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPathIndex.h deleted file mode 100644 index 6ab9151..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPathIndex.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIndex.h" -#import "FPath.h" -#import <Foundation/Foundation.h> - -@interface FPathIndex : NSObject <FIndex> -- (id)initWithPath:(FPath *)path; -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPathIndex.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPathIndex.m deleted file mode 100644 index 214eab8..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPathIndex.m +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FPathIndex.h" -#import "FEmptyNode.h" -#import "FMaxNode.h" -#import "FNamedNode.h" -#import "FPath.h" -#import "FSnapshotUtilities.h" -#import "FUtilities.h" - -@interface FPathIndex () -@property(nonatomic, strong) FPath *path; -@end - -@implementation FPathIndex - -- (id)initWithPath:(FPath *)path { - self = [super init]; - if (self) { - if (path.isEmpty || [path.getFront isEqualToString:@".priority"]) { - [NSException raise:NSInvalidArgumentException - format:@"Invalid path for PathIndex: %@", path]; - } - _path = path; - } - return self; -} - -- (NSComparisonResult)compareKey:(NSString *)key1 - andNode:(id<FNode>)node1 - toOtherKey:(NSString *)key2 - andNode:(id<FNode>)node2 { - id<FNode> child1 = [node1 getChild:self.path]; - id<FNode> child2 = [node2 getChild:self.path]; - NSComparisonResult indexCmp = [child1 compare:child2]; - if (indexCmp == NSOrderedSame) { - return [FUtilities compareKey:key1 toKey:key2]; - } else { - return indexCmp; - } -} - -- (NSComparisonResult)compareKey:(NSString *)key1 - andNode:(id<FNode>)node1 - toOtherKey:(NSString *)key2 - andNode:(id<FNode>)node2 - reverse:(BOOL)reverse { - if (reverse) { - return [self compareKey:key2 - andNode:node2 - toOtherKey:key1 - andNode:node1]; - } else { - return [self compareKey:key1 - andNode:node1 - toOtherKey:key2 - andNode:node2]; - } -} - -- (NSComparisonResult)compareNamedNode:(FNamedNode *)namedNode1 - toNamedNode:(FNamedNode *)namedNode2 { - return [self compareKey:namedNode1.name - andNode:namedNode1.node - toOtherKey:namedNode2.name - andNode:namedNode2.node]; -} - -- (BOOL)isDefinedOn:(id<FNode>)node { - return ![node getChild:self.path].isEmpty; -} - -- (BOOL)indexedValueChangedBetween:(id<FNode>)oldNode and:(id<FNode>)newNode { - id<FNode> oldValue = [oldNode getChild:self.path]; - id<FNode> newValue = [newNode getChild:self.path]; - return [oldValue compare:newValue] != NSOrderedSame; -} - -- (FNamedNode *)minPost { - return FNamedNode.min; -} - -- (FNamedNode *)maxPost { - id<FNode> maxNode = [[FEmptyNode emptyNode] updateChild:self.path - withNewChild:[FMaxNode maxNode]]; - - return [[FNamedNode alloc] initWithName:[FUtilities maxName] - andNode:maxNode]; -} - -- (FNamedNode *)makePost:(id<FNode>)indexValue name:(NSString *)name { - id<FNode> node = [[FEmptyNode emptyNode] updateChild:self.path - withNewChild:indexValue]; - return [[FNamedNode alloc] initWithName:name andNode:node]; -} - -- (NSString *)queryDefinition { - return [self.path wireFormat]; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"FPathIndex(%@)", self.path]; -} - -- (id)copyWithZone:(NSZone *)zone { - // Safe since we're immutable. - return self; -} - -- (BOOL)isEqual:(id)other { - if (![other isKindOfClass:[FPathIndex class]]) { - return NO; - } - return ([self.path isEqual:((FPathIndex *)other).path]); -} - -- (NSUInteger)hash { - return [self.path hash]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPriorityIndex.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPriorityIndex.h deleted file mode 100644 index 1b4534e..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPriorityIndex.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import "FIndex.h" - -@interface FPriorityIndex : NSObject <FIndex> -+ (id<FIndex>)priorityIndex; -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPriorityIndex.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPriorityIndex.m deleted file mode 100644 index 0b33837..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FPriorityIndex.m +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FPriorityIndex.h" - -#import "FEmptyNode.h" -#import "FLeafNode.h" -#import "FMaxNode.h" -#import "FNamedNode.h" -#import "FNode.h" -#import "FUtilities.h" - -// TODO: Abstract into some common base class? - -@implementation FPriorityIndex - -- (NSComparisonResult)compareKey:(NSString *)key1 - andNode:(id<FNode>)node1 - toOtherKey:(NSString *)key2 - andNode:(id<FNode>)node2 { - id<FNode> child1 = [node1 getPriority]; - id<FNode> child2 = [node2 getPriority]; - NSComparisonResult indexCmp = [child1 compare:child2]; - if (indexCmp == NSOrderedSame) { - return [FUtilities compareKey:key1 toKey:key2]; - } else { - return indexCmp; - } -} - -- (NSComparisonResult)compareKey:(NSString *)key1 - andNode:(id<FNode>)node1 - toOtherKey:(NSString *)key2 - andNode:(id<FNode>)node2 - reverse:(BOOL)reverse { - if (reverse) { - return [self compareKey:key2 - andNode:node2 - toOtherKey:key1 - andNode:node1]; - } else { - return [self compareKey:key1 - andNode:node1 - toOtherKey:key2 - andNode:node2]; - } -} - -- (NSComparisonResult)compareNamedNode:(FNamedNode *)namedNode1 - toNamedNode:(FNamedNode *)namedNode2 { - return [self compareKey:namedNode1.name - andNode:namedNode1.node - toOtherKey:namedNode2.name - andNode:namedNode2.node]; -} - -- (BOOL)isDefinedOn:(id<FNode>)node { - return !node.getPriority.isEmpty; -} - -- (BOOL)indexedValueChangedBetween:(id<FNode>)oldNode and:(id<FNode>)newNode { - id<FNode> oldValue = [oldNode getPriority]; - id<FNode> newValue = [newNode getPriority]; - return ![oldValue isEqual:newValue]; -} - -- (FNamedNode *)minPost { - return FNamedNode.min; -} - -- (FNamedNode *)maxPost { - return [self makePost:[FMaxNode maxNode] name:[FUtilities maxName]]; -} - -- (FNamedNode *)makePost:(id<FNode>)indexValue name:(NSString *)name { - id<FNode> node = [[FLeafNode alloc] initWithValue:@"[PRIORITY-POST]" - withPriority:indexValue]; - return [[FNamedNode alloc] initWithName:name andNode:node]; -} - -- (NSString *)queryDefinition { - return @".priority"; -} - -- (NSString *)description { - return @"FPriorityIndex"; -} - -- (id)copyWithZone:(NSZone *)zone { - // Safe since we're immutable. - return self; -} - -- (BOOL)isEqual:(id)other { - return [other isKindOfClass:[FPriorityIndex class]]; -} - -- (NSUInteger)hash { - // chosen by a fair dice roll. Guaranteed to be random - return 3155577; -} - -+ (id<FIndex>)priorityIndex { - static id<FIndex> index; - static dispatch_once_t once; - dispatch_once(&once, ^{ - index = [[FPriorityIndex alloc] init]; - }); - - return index; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FRangedFilter.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FRangedFilter.h deleted file mode 100644 index 3c1aadd..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FRangedFilter.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FNodeFilter.h" -#import <Foundation/Foundation.h> - -@class FQueryParams; -@class FNamedNode; - -@interface FRangedFilter : NSObject <FNodeFilter> - -- (id)initWithQueryParams:(FQueryParams *)params; -- (BOOL)matchesKey:(NSString *)key andNode:(id<FNode>)node; - -@property(nonatomic, strong, readonly) FNamedNode *startPost; -@property(nonatomic, strong, readonly) FNamedNode *endPost; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FRangedFilter.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FRangedFilter.m deleted file mode 100644 index bd8ef81..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FRangedFilter.m +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FRangedFilter.h" -#import "FChildChangeAccumulator.h" -#import "FChildrenNode.h" -#import "FEmptyNode.h" -#import "FIndexedFilter.h" -#import "FIndexedNode.h" -#import "FNamedNode.h" -#import "FQueryParams.h" - -@interface FRangedFilter () -@property(nonatomic, strong, readwrite) id<FNodeFilter> indexedFilter; -@property(nonatomic, strong, readwrite) id<FIndex> index; -@property(nonatomic, strong, readwrite) FNamedNode *startPost; -@property(nonatomic, strong, readwrite) FNamedNode *endPost; -@end - -@implementation FRangedFilter -- (id)initWithQueryParams:(FQueryParams *)params { - self = [super init]; - if (self) { - self.indexedFilter = - [[FIndexedFilter alloc] initWithIndex:params.index]; - self.index = params.index; - self.startPost = [FRangedFilter startPostFromQueryParams:params]; - self.endPost = [FRangedFilter endPostFromQueryParams:params]; - } - return self; -} - -+ (FNamedNode *)startPostFromQueryParams:(FQueryParams *)params { - if ([params hasStart]) { - NSString *startKey = params.indexStartKey; - return [params.index makePost:params.indexStartValue name:startKey]; - } else { - return params.index.minPost; - } -} - -+ (FNamedNode *)endPostFromQueryParams:(FQueryParams *)params { - if ([params hasEnd]) { - NSString *endKey = params.indexEndKey; - return [params.index makePost:params.indexEndValue name:endKey]; - } else { - return params.index.maxPost; - } -} - -- (BOOL)matchesKey:(NSString *)key andNode:(id<FNode>)node { - return ([self.index compareKey:self.startPost.name - andNode:self.startPost.node - toOtherKey:key - andNode:node] <= NSOrderedSame && - [self.index compareKey:key - andNode:node - toOtherKey:self.endPost.name - andNode:self.endPost.node] <= NSOrderedSame); -} - -- (FIndexedNode *)updateChildIn:(FIndexedNode *)oldSnap - forChildKey:(NSString *)childKey - newChild:(id<FNode>)newChildSnap - affectedPath:(FPath *)affectedPath - fromSource:(id<FCompleteChildSource>)source - accumulator: - (FChildChangeAccumulator *)optChangeAccumulator { - if (![self matchesKey:childKey andNode:newChildSnap]) { - newChildSnap = [FEmptyNode emptyNode]; - } - return [self.indexedFilter updateChildIn:oldSnap - forChildKey:childKey - newChild:newChildSnap - affectedPath:affectedPath - fromSource:source - accumulator:optChangeAccumulator]; -} - -- (FIndexedNode *)updateFullNode:(FIndexedNode *)oldSnap - withNewNode:(FIndexedNode *)newSnap - accumulator: - (FChildChangeAccumulator *)optChangeAccumulator { - __block FIndexedNode *filtered; - if (newSnap.node.isLeafNode) { - // Make sure we have a children node with the correct index, not a leaf - // node - filtered = [FIndexedNode indexedNodeWithNode:[FEmptyNode emptyNode] - index:self.index]; - } else { - // Dont' support priorities on queries - filtered = [newSnap updatePriority:[FEmptyNode emptyNode]]; - [newSnap.node enumerateChildrenUsingBlock:^( - NSString *key, id<FNode> node, BOOL *stop) { - if (![self matchesKey:key andNode:node]) { - filtered = [filtered updateChild:key - withNewChild:[FEmptyNode emptyNode]]; - } - }]; - } - return [self.indexedFilter updateFullNode:oldSnap - withNewNode:filtered - accumulator:optChangeAccumulator]; -} - -- (FIndexedNode *)updatePriority:(id<FNode>)priority - forNode:(FIndexedNode *)oldSnap { - // Don't support priorities on queries - return oldSnap; -} - -- (BOOL)filtersNodes { - return YES; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FTransformedEnumerator.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FTransformedEnumerator.h deleted file mode 100644 index 25a59b4..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FTransformedEnumerator.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@interface FTransformedEnumerator : NSEnumerator -- (id)initWithEnumerator:(NSEnumerator *)enumerator - andTransform:(id (^)(id))transform; -- (id)nextObject; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FTransformedEnumerator.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FTransformedEnumerator.m deleted file mode 100644 index 567e100..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FTransformedEnumerator.m +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTransformedEnumerator.h" - -@interface FTransformedEnumerator () -@property(nonatomic, strong) NSEnumerator *enumerator; -@property(nonatomic, copy) id (^transform)(id); -@end - -@implementation FTransformedEnumerator -- (id)initWithEnumerator:(NSEnumerator *)enumerator - andTransform:(id (^)(id))transform { - self = [super init]; - if (self) { - self.enumerator = enumerator; - self.transform = transform; - } - return self; -} - -- (id)nextObject { - id next = self.enumerator.nextObject; - if (next != nil) { - return self.transform(next); - } else { - return nil; - } -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FValueIndex.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FValueIndex.h deleted file mode 100644 index a79f202..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FValueIndex.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIndex.h" -#import <Foundation/Foundation.h> - -@interface FValueIndex : NSObject <FIndex> -+ (id<FIndex>)valueIndex; -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FValueIndex.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FValueIndex.m deleted file mode 100644 index 61021c8..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FValueIndex.m +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FValueIndex.h" -#import "FMaxNode.h" -#import "FNamedNode.h" -#import "FSnapshotUtilities.h" -#import "FUtilities.h" - -@implementation FValueIndex - -- (NSComparisonResult)compareKey:(NSString *)key1 - andNode:(id<FNode>)node1 - toOtherKey:(NSString *)key2 - andNode:(id<FNode>)node2 { - NSComparisonResult indexCmp = [node1 compare:node2]; - if (indexCmp == NSOrderedSame) { - return [FUtilities compareKey:key1 toKey:key2]; - } else { - return indexCmp; - } -} - -- (NSComparisonResult)compareKey:(NSString *)key1 - andNode:(id<FNode>)node1 - toOtherKey:(NSString *)key2 - andNode:(id<FNode>)node2 - reverse:(BOOL)reverse { - if (reverse) { - return [self compareKey:key2 - andNode:node2 - toOtherKey:key1 - andNode:node1]; - } else { - return [self compareKey:key1 - andNode:node1 - toOtherKey:key2 - andNode:node2]; - } -} - -- (NSComparisonResult)compareNamedNode:(FNamedNode *)namedNode1 - toNamedNode:(FNamedNode *)namedNode2 { - return [self compareKey:namedNode1.name - andNode:namedNode1.node - toOtherKey:namedNode2.name - andNode:namedNode2.node]; -} - -- (BOOL)isDefinedOn:(id<FNode>)node { - return YES; -} - -- (BOOL)indexedValueChangedBetween:(id<FNode>)oldNode and:(id<FNode>)newNode { - return ![oldNode isEqual:newNode]; -} - -- (FNamedNode *)minPost { - return FNamedNode.min; -} - -- (FNamedNode *)maxPost { - return FNamedNode.max; -} - -- (FNamedNode *)makePost:(id<FNode>)indexValue name:(NSString *)name { - return [[FNamedNode alloc] initWithName:name andNode:indexValue]; -} - -- (NSString *)queryDefinition { - return @".value"; -} - -- (NSString *)description { - return @"FValueIndex"; -} - -- (id)copyWithZone:(NSZone *)zone { - return self; -} - -- (BOOL)isEqual:(id)other { - // since we're a singleton. - return (other == self); -} - -- (NSUInteger)hash { - return [@".value" hash]; -} - -+ (id<FIndex>)valueIndex { - static id<FIndex> valueIndex; - static dispatch_once_t once; - dispatch_once(&once, ^{ - valueIndex = [[FValueIndex alloc] init]; - }); - return valueIndex; -} -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessor.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessor.h deleted file mode 100644 index ea6676e..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessor.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@class FViewCache; -@class FViewProcessorResult; -@class FChildChangeAccumulator; -@protocol FNode; -@class FWriteTreeRef; -@class FPath; -@protocol FOperation; -@protocol FNodeFilter; - -@interface FViewProcessor : NSObject - -- (id)initWithFilter:(id<FNodeFilter>)nodeFilter; - -- (FViewProcessorResult *)applyOperationOn:(FViewCache *)oldViewCache - operation:(id<FOperation>)operation - writesCache:(FWriteTreeRef *)writesCache - completeCache:(id<FNode>)optCompleteCache; -- (FViewCache *)revertUserWriteOn:(FViewCache *)viewCache - path:(FPath *)path - writesCache:(FWriteTreeRef *)writesCache - completeCache:(id<FNode>)optCompleteCache - accumulator:(FChildChangeAccumulator *)accumulator; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessor.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessor.m deleted file mode 100644 index 5524996..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessor.m +++ /dev/null @@ -1,831 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FViewProcessor.h" -#import "FAckUserWrite.h" -#import "FCacheNode.h" -#import "FChange.h" -#import "FChildChangeAccumulator.h" -#import "FChildrenNode.h" -#import "FCompleteChildSource.h" -#import "FCompoundWrite.h" -#import "FEmptyNode.h" -#import "FIRDataEventType.h" -#import "FImmutableTree.h" -#import "FKeyIndex.h" -#import "FMerge.h" -#import "FNode.h" -#import "FNodeFilter.h" -#import "FOperation.h" -#import "FOperationSource.h" -#import "FOverwrite.h" -#import "FPath.h" -#import "FViewCache.h" -#import "FViewProcessorResult.h" -#import "FWriteTreeRef.h" - -/** - * An implementation of FCompleteChildSource that never returns any additional - * children - */ -@interface FNoCompleteChildSource : NSObject <FCompleteChildSource> -@end - -@implementation FNoCompleteChildSource -+ (FNoCompleteChildSource *)instance { - static FNoCompleteChildSource *source = nil; - static dispatch_once_t once; - dispatch_once(&once, ^{ - source = [[FNoCompleteChildSource alloc] init]; - }); - return source; -} - -- (id<FNode>)completeChild:(NSString *)childKey { - return nil; -} - -- (FNamedNode *)childByIndex:(id<FIndex>)index - afterChild:(FNamedNode *)child - isReverse:(BOOL)reverse { - return nil; -} -@end - -/** - * An implementation of FCompleteChildSource that uses a FWriteTree in addition - * to any other server data or old event caches available to calculate complete - * children. - */ -@interface FWriteTreeCompleteChildSource : NSObject <FCompleteChildSource> -@property(nonatomic, strong) FWriteTreeRef *writes; -@property(nonatomic, strong) FViewCache *viewCache; -@property(nonatomic, strong) id<FNode> optCompleteServerCache; -@end - -@implementation FWriteTreeCompleteChildSource -- (id)initWithWrites:(FWriteTreeRef *)writes - viewCache:(FViewCache *)viewCache - serverCache:(id<FNode>)optCompleteServerCache { - self = [super init]; - if (self) { - self.writes = writes; - self.viewCache = viewCache; - self.optCompleteServerCache = optCompleteServerCache; - } - return self; -} - -- (id<FNode>)completeChild:(NSString *)childKey { - FCacheNode *node = self.viewCache.cachedEventSnap; - if ([node isCompleteForChild:childKey]) { - return [node.node getImmediateChild:childKey]; - } else { - FCacheNode *serverNode; - if (self.optCompleteServerCache) { - // Since we're only ever getting child nodes, we can use the key - // index here - FIndexedNode *indexed = - [FIndexedNode indexedNodeWithNode:self.optCompleteServerCache - index:[FKeyIndex keyIndex]]; - serverNode = [[FCacheNode alloc] initWithIndexedNode:indexed - isFullyInitialized:YES - isFiltered:NO]; - } else { - serverNode = self.viewCache.cachedServerSnap; - } - return [self.writes calculateCompleteChild:childKey cache:serverNode]; - } -} - -- (FNamedNode *)childByIndex:(id<FIndex>)index - afterChild:(FNamedNode *)child - isReverse:(BOOL)reverse { - id<FNode> completeServerData = self.optCompleteServerCache != nil - ? self.optCompleteServerCache - : self.viewCache.completeServerSnap; - return [self.writes calculateNextNodeAfterPost:child - completeServerData:completeServerData - reverse:reverse - index:index]; -} - -@end - -@interface FViewProcessor () -@property(nonatomic, strong) id<FNodeFilter> filter; -@end - -@implementation FViewProcessor - -- (id)initWithFilter:(id<FNodeFilter>)nodeFilter { - self = [super init]; - if (self) { - self.filter = nodeFilter; - } - return self; -} - -- (FViewProcessorResult *)applyOperationOn:(FViewCache *)oldViewCache - operation:(id<FOperation>)operation - writesCache:(FWriteTreeRef *)writesCache - completeCache:(id<FNode>)optCompleteCache { - FChildChangeAccumulator *accumulator = - [[FChildChangeAccumulator alloc] init]; - FViewCache *newViewCache; - - if (operation.type == FOperationTypeOverwrite) { - FOverwrite *overwrite = (FOverwrite *)operation; - if (operation.source.fromUser) { - newViewCache = [self applyUserOverwriteTo:oldViewCache - changePath:overwrite.path - changedSnap:overwrite.snap - writesCache:writesCache - completeCache:optCompleteCache - accumulator:accumulator]; - } else { - NSAssert(operation.source.fromServer, - @"Unknown source for overwrite."); - // We filter the node if it's a tagged update or the node has been - // previously filtered and the update is not at the root in which - // case it is ok (and necessary) to mark the node unfiltered again - BOOL filterServerNode = overwrite.source.isTagged || - (oldViewCache.cachedServerSnap.isFiltered && - !overwrite.path.isEmpty); - newViewCache = [self applyServerOverwriteTo:oldViewCache - changePath:overwrite.path - snap:overwrite.snap - writesCache:writesCache - completeCache:optCompleteCache - filterServerNode:filterServerNode - accumulator:accumulator]; - } - } else if (operation.type == FOperationTypeMerge) { - FMerge *merge = (FMerge *)operation; - if (operation.source.fromUser) { - newViewCache = [self applyUserMergeTo:oldViewCache - path:merge.path - changedChildren:merge.children - writesCache:writesCache - completeCache:optCompleteCache - accumulator:accumulator]; - } else { - NSAssert(operation.source.fromServer, @"Unknown source for merge."); - // We filter the node if it's a tagged update or the node has been - // previously filtered - BOOL filterServerNode = merge.source.isTagged || - oldViewCache.cachedServerSnap.isFiltered; - newViewCache = [self applyServerMergeTo:oldViewCache - path:merge.path - changedChildren:merge.children - writesCache:writesCache - completeCache:optCompleteCache - filterServerNode:filterServerNode - accumulator:accumulator]; - } - } else if (operation.type == FOperationTypeAckUserWrite) { - FAckUserWrite *ackWrite = (FAckUserWrite *)operation; - if (!ackWrite.revert) { - newViewCache = [self ackUserWriteOn:oldViewCache - ackPath:ackWrite.path - affectedTree:ackWrite.affectedTree - writesCache:writesCache - completeCache:optCompleteCache - accumulator:accumulator]; - } else { - newViewCache = [self revertUserWriteOn:oldViewCache - path:ackWrite.path - writesCache:writesCache - completeCache:optCompleteCache - accumulator:accumulator]; - } - } else if (operation.type == FOperationTypeListenComplete) { - newViewCache = [self listenCompleteOldCache:oldViewCache - path:operation.path - writesCache:writesCache - serverCache:optCompleteCache - accumulator:accumulator]; - } else { - [NSException - raise:NSInternalInconsistencyException - format:@"Unknown operation encountered %ld.", (long)operation.type]; - return nil; - } - - NSArray *changes = [self maybeAddValueFromOldViewCache:oldViewCache - newViewCache:newViewCache - changes:accumulator.changes]; - FViewProcessorResult *results = - [[FViewProcessorResult alloc] initWithViewCache:newViewCache - changes:changes]; - return results; -} - -- (NSArray *)maybeAddValueFromOldViewCache:(FViewCache *)oldViewCache - newViewCache:(FViewCache *)newViewCache - changes:(NSArray *)changes { - NSArray *newChanges = changes; - FCacheNode *eventSnap = newViewCache.cachedEventSnap; - if (eventSnap.isFullyInitialized) { - BOOL isLeafOrEmpty = - eventSnap.node.isLeafNode || eventSnap.node.isEmpty; - if ([changes count] > 0 || - !oldViewCache.cachedEventSnap.isFullyInitialized || - (isLeafOrEmpty && - ![eventSnap.node isEqual:oldViewCache.completeEventSnap]) || - ![eventSnap.node.getPriority - isEqual:oldViewCache.completeEventSnap.getPriority]) { - FChange *valueChange = - [[FChange alloc] initWithType:FIRDataEventTypeValue - indexedNode:eventSnap.indexedNode]; - NSMutableArray *mutableChanges = [changes mutableCopy]; - [mutableChanges addObject:valueChange]; - newChanges = mutableChanges; - } - } - return newChanges; -} - -- (FViewCache *) - generateEventCacheAfterServerEvent:(FViewCache *)viewCache - path:(FPath *)changePath - writesCache:(FWriteTreeRef *)writesCache - source:(id<FCompleteChildSource>)source - accumulator:(FChildChangeAccumulator *)accumulator { - FCacheNode *oldEventSnap = viewCache.cachedEventSnap; - if ([writesCache shadowingWriteAtPath:changePath] != nil) { - // we have a shadowing write, ignore changes. - return viewCache; - } else { - FIndexedNode *newEventCache; - if (changePath.isEmpty) { - // TODO: figure out how this plays with "sliding ack windows" - NSAssert( - viewCache.cachedServerSnap.isFullyInitialized, - @"If change path is empty, we must have complete server data"); - id<FNode> nodeWithLocalWrites; - if (viewCache.cachedServerSnap.isFiltered) { - // We need to special case this, because we need to only apply - // writes to complete children, or we might end up raising - // events for incomplete children. If the server data is - // filtered deep writes cannot be guaranteed to be complete - id<FNode> serverCache = viewCache.completeServerSnap; - FChildrenNode *completeChildren = - ([serverCache isKindOfClass:[FChildrenNode class]]) - ? serverCache - : [FEmptyNode emptyNode]; - nodeWithLocalWrites = [writesCache - calculateCompleteEventChildrenWithCompleteServerChildren: - completeChildren]; - } else { - nodeWithLocalWrites = [writesCache - calculateCompleteEventCacheWithCompleteServerCache: - viewCache.completeServerSnap]; - } - FIndexedNode *indexedNode = - [FIndexedNode indexedNodeWithNode:nodeWithLocalWrites - index:self.filter.index]; - newEventCache = [self.filter - updateFullNode:viewCache.cachedEventSnap.indexedNode - withNewNode:indexedNode - accumulator:accumulator]; - } else { - NSString *childKey = [changePath getFront]; - if ([childKey isEqualToString:@".priority"]) { - NSAssert( - changePath.length == 1, - @"Can't have a priority with additional path components"); - id<FNode> oldEventNode = oldEventSnap.node; - id<FNode> serverNode = viewCache.cachedServerSnap.node; - // we might have overwrites for this priority - id<FNode> updatedPriority = [writesCache - calculateEventCacheAfterServerOverwriteWithChildPath: - changePath - existingEventSnap: - oldEventNode - existingServerSnap: - serverNode]; - if (updatedPriority != nil) { - newEventCache = - [self.filter updatePriority:updatedPriority - forNode:oldEventSnap.indexedNode]; - } else { - // priority didn't change, keep old node - newEventCache = oldEventSnap.indexedNode; - } - } else { - FPath *childChangePath = [changePath popFront]; - id<FNode> newEventChild; - if ([oldEventSnap isCompleteForChild:childKey]) { - id<FNode> serverNode = viewCache.cachedServerSnap.node; - id<FNode> eventChildUpdate = [writesCache - calculateEventCacheAfterServerOverwriteWithChildPath: - changePath - existingEventSnap: - oldEventSnap.node - existingServerSnap: - serverNode]; - if (eventChildUpdate != nil) { - newEventChild = - [[oldEventSnap.node getImmediateChild:childKey] - updateChild:childChangePath - withNewChild:eventChildUpdate]; - } else { - // Nothing changed, just keep the old child - newEventChild = - [oldEventSnap.node getImmediateChild:childKey]; - } - } else { - newEventChild = [writesCache - calculateCompleteChild:childKey - cache:viewCache.cachedServerSnap]; - } - if (newEventChild != nil) { - newEventCache = - [self.filter updateChildIn:oldEventSnap.indexedNode - forChildKey:childKey - newChild:newEventChild - affectedPath:childChangePath - fromSource:source - accumulator:accumulator]; - } else { - // No complete children available or no change - newEventCache = oldEventSnap.indexedNode; - } - } - } - return [viewCache updateEventSnap:newEventCache - isComplete:(oldEventSnap.isFullyInitialized || - changePath.isEmpty) - isFiltered:self.filter.filtersNodes]; - } -} - -- (FViewCache *)applyServerOverwriteTo:(FViewCache *)oldViewCache - changePath:(FPath *)changePath - snap:(id<FNode>)changedSnap - writesCache:(FWriteTreeRef *)writesCache - completeCache:(id<FNode>)optCompleteCache - filterServerNode:(BOOL)filterServerNode - accumulator:(FChildChangeAccumulator *)accumulator { - FCacheNode *oldServerSnap = oldViewCache.cachedServerSnap; - FIndexedNode *newServerCache; - id<FNodeFilter> serverFilter = - filterServerNode ? self.filter : self.filter.indexedFilter; - - if (changePath.isEmpty) { - FIndexedNode *indexed = - [FIndexedNode indexedNodeWithNode:changedSnap - index:serverFilter.index]; - newServerCache = [serverFilter updateFullNode:oldServerSnap.indexedNode - withNewNode:indexed - accumulator:nil]; - } else if (serverFilter.filtersNodes && !oldServerSnap.isFiltered) { - // We want to filter the server node, but we didn't filter the server - // node yet, so simulate a full update - NSAssert(![changePath isEmpty], - @"An empty path should been caught in the other branch"); - NSString *childKey = [changePath getFront]; - FPath *updatePath = [changePath popFront]; - id<FNode> newChild = [[oldServerSnap.node getImmediateChild:childKey] - updateChild:updatePath - withNewChild:changedSnap]; - FIndexedNode *indexed = - [oldServerSnap.indexedNode updateChild:childKey - withNewChild:newChild]; - newServerCache = [serverFilter updateFullNode:oldServerSnap.indexedNode - withNewNode:indexed - accumulator:nil]; - } else { - NSString *childKey = [changePath getFront]; - if (![oldServerSnap isCompleteForPath:changePath] && - changePath.length > 1) { - // We don't update incomplete nodes with updates intended for other - // listeners. - return oldViewCache; - } - FPath *childChangePath = [changePath popFront]; - id<FNode> childNode = [oldServerSnap.node getImmediateChild:childKey]; - id<FNode> newChildNode = [childNode updateChild:childChangePath - withNewChild:changedSnap]; - if ([childKey isEqualToString:@".priority"]) { - newServerCache = - [serverFilter updatePriority:newChildNode - forNode:oldServerSnap.indexedNode]; - } else { - newServerCache = - [serverFilter updateChildIn:oldServerSnap.indexedNode - forChildKey:childKey - newChild:newChildNode - affectedPath:childChangePath - fromSource:[FNoCompleteChildSource instance] - accumulator:nil]; - } - } - FViewCache *newViewCache = - [oldViewCache updateServerSnap:newServerCache - isComplete:(oldServerSnap.isFullyInitialized || - changePath.isEmpty) - isFiltered:serverFilter.filtersNodes]; - id<FCompleteChildSource> source = - [[FWriteTreeCompleteChildSource alloc] initWithWrites:writesCache - viewCache:newViewCache - serverCache:optCompleteCache]; - return [self generateEventCacheAfterServerEvent:newViewCache - path:changePath - writesCache:writesCache - source:source - accumulator:accumulator]; -} - -- (FViewCache *)applyUserOverwriteTo:(FViewCache *)oldViewCache - changePath:(FPath *)changePath - changedSnap:(id<FNode>)changedSnap - writesCache:(FWriteTreeRef *)writesCache - completeCache:(id<FNode>)optCompleteCache - accumulator:(FChildChangeAccumulator *)accumulator { - FCacheNode *oldEventSnap = oldViewCache.cachedEventSnap; - FViewCache *newViewCache; - id<FCompleteChildSource> source = - [[FWriteTreeCompleteChildSource alloc] initWithWrites:writesCache - viewCache:oldViewCache - serverCache:optCompleteCache]; - if (changePath.isEmpty) { - FIndexedNode *newIndexed = - [FIndexedNode indexedNodeWithNode:changedSnap - index:self.filter.index]; - FIndexedNode *newEventCache = - [self.filter updateFullNode:oldEventSnap.indexedNode - withNewNode:newIndexed - accumulator:accumulator]; - newViewCache = [oldViewCache updateEventSnap:newEventCache - isComplete:YES - isFiltered:self.filter.filtersNodes]; - } else { - NSString *childKey = [changePath getFront]; - if ([childKey isEqualToString:@".priority"]) { - FIndexedNode *newEventCache = [self.filter - updatePriority:changedSnap - forNode:oldViewCache.cachedEventSnap.indexedNode]; - newViewCache = - [oldViewCache updateEventSnap:newEventCache - isComplete:oldEventSnap.isFullyInitialized - isFiltered:oldEventSnap.isFiltered]; - } else { - FPath *childChangePath = [changePath popFront]; - id<FNode> oldChild = [oldEventSnap.node getImmediateChild:childKey]; - id<FNode> newChild; - if (childChangePath.isEmpty) { - // Child overwrite, we can replace the child - newChild = changedSnap; - } else { - id<FNode> childNode = [source completeChild:childKey]; - if (childNode != nil) { - if ([[childChangePath getBack] - isEqualToString:@".priority"] && - [childNode getChild:[childChangePath parent]].isEmpty) { - // This is a priority update on an empty node. If this - // node exists on the server, the server will send down - // the priority in the update, so ignore for now - newChild = childNode; - } else { - newChild = [childNode updateChild:childChangePath - withNewChild:changedSnap]; - } - } else { - newChild = [FEmptyNode emptyNode]; - } - } - if (![oldChild isEqual:newChild]) { - FIndexedNode *newEventSnap = - [self.filter updateChildIn:oldEventSnap.indexedNode - forChildKey:childKey - newChild:newChild - affectedPath:childChangePath - fromSource:source - accumulator:accumulator]; - newViewCache = [oldViewCache - updateEventSnap:newEventSnap - isComplete:oldEventSnap.isFullyInitialized - isFiltered:self.filter.filtersNodes]; - } else { - newViewCache = oldViewCache; - } - } - } - return newViewCache; -} - -+ (BOOL)cache:(FViewCache *)viewCache hasChild:(NSString *)childKey { - return [viewCache.cachedEventSnap isCompleteForChild:childKey]; -} - -/** - * @param changedChildren NSDictionary of child name (NSString*) to child value - * (id<FNode>) - */ -- (FViewCache *)applyUserMergeTo:(FViewCache *)viewCache - path:(FPath *)path - changedChildren:(FCompoundWrite *)changedChildren - writesCache:(FWriteTreeRef *)writesCache - completeCache:(id<FNode>)serverCache - accumulator:(FChildChangeAccumulator *)accumulator { - // HACK: In the case of a limit query, there may be some changes that bump - // things out of the window leaving room for new items. It's important we - // process these changes first, so we iterate the changes twice, first - // processing any that affect items currently in view. - // TODO: I consider an item "in view" if cacheHasChild is true, which checks - // both the server and event snap. I'm not sure if this will result in edge - // cases when a child is in one but not the other. - __block FViewCache *curViewCache = viewCache; - - [changedChildren enumerateWrites:^(FPath *relativePath, id<FNode> childNode, - BOOL *stop) { - FPath *writePath = [path child:relativePath]; - if ([FViewProcessor cache:viewCache hasChild:[writePath getFront]]) { - curViewCache = [self applyUserOverwriteTo:curViewCache - changePath:writePath - changedSnap:childNode - writesCache:writesCache - completeCache:serverCache - accumulator:accumulator]; - } - }]; - - [changedChildren enumerateWrites:^(FPath *relativePath, id<FNode> childNode, - BOOL *stop) { - FPath *writePath = [path child:relativePath]; - if (![FViewProcessor cache:viewCache hasChild:[writePath getFront]]) { - curViewCache = [self applyUserOverwriteTo:curViewCache - changePath:writePath - changedSnap:childNode - writesCache:writesCache - completeCache:serverCache - accumulator:accumulator]; - } - }]; - - return curViewCache; -} - -- (FViewCache *)applyServerMergeTo:(FViewCache *)viewCache - path:(FPath *)path - changedChildren:(FCompoundWrite *)changedChildren - writesCache:(FWriteTreeRef *)writesCache - completeCache:(id<FNode>)serverCache - filterServerNode:(BOOL)filterServerNode - accumulator:(FChildChangeAccumulator *)accumulator { - // If we don't have a cache yet, this merge was intended for a previously - // listen in the same location. Ignore it and wait for the complete data - // update coming soon. - if (viewCache.cachedServerSnap.node.isEmpty && - !viewCache.cachedServerSnap.isFullyInitialized) { - return viewCache; - } - - // HACK: In the case of a limit query, there may be some changes that bump - // things out of the window leaving room for new items. It's important we - // process these changes first, so we iterate the changes twice, first - // processing any that affect items currently in view. - // TODO: I consider an item "in view" if cacheHasChild is true, which checks - // both the server and event snap. I'm not sure if this will result in edge - // cases when a child is in one but not the other. - __block FViewCache *curViewCache = viewCache; - FCompoundWrite *actualMerge; - if (path.isEmpty) { - actualMerge = changedChildren; - } else { - actualMerge = - [[FCompoundWrite emptyWrite] addCompoundWrite:changedChildren - atPath:path]; - } - id<FNode> serverNode = viewCache.cachedServerSnap.node; - - NSDictionary *childCompoundWrites = actualMerge.childCompoundWrites; - [childCompoundWrites - enumerateKeysAndObjectsUsingBlock:^( - NSString *childKey, FCompoundWrite *childMerge, BOOL *stop) { - if ([serverNode hasChild:childKey]) { - id<FNode> serverChild = - [viewCache.cachedServerSnap.node getImmediateChild:childKey]; - id<FNode> newChild = [childMerge applyToNode:serverChild]; - curViewCache = - [self applyServerOverwriteTo:curViewCache - changePath:[[FPath alloc] initWith:childKey] - snap:newChild - writesCache:writesCache - completeCache:serverCache - filterServerNode:filterServerNode - accumulator:accumulator]; - } - }]; - - [childCompoundWrites - enumerateKeysAndObjectsUsingBlock:^( - NSString *childKey, FCompoundWrite *childMerge, BOOL *stop) { - bool isUnknownDeepMerge = - ![viewCache.cachedServerSnap isCompleteForChild:childKey] && - childMerge.rootWrite == nil; - if (![serverNode hasChild:childKey] && !isUnknownDeepMerge) { - id<FNode> serverChild = - [viewCache.cachedServerSnap.node getImmediateChild:childKey]; - id<FNode> newChild = [childMerge applyToNode:serverChild]; - curViewCache = - [self applyServerOverwriteTo:curViewCache - changePath:[[FPath alloc] initWith:childKey] - snap:newChild - writesCache:writesCache - completeCache:serverCache - filterServerNode:filterServerNode - accumulator:accumulator]; - } - }]; - - return curViewCache; -} - -- (FViewCache *)ackUserWriteOn:(FViewCache *)viewCache - ackPath:(FPath *)ackPath - affectedTree:(FImmutableTree *)affectedTree - writesCache:(FWriteTreeRef *)writesCache - completeCache:(id<FNode>)optCompleteCache - accumulator:(FChildChangeAccumulator *)accumulator { - - if ([writesCache shadowingWriteAtPath:ackPath] != nil) { - return viewCache; - } - - // Only filter server node if it is currently filtered - BOOL filterServerNode = viewCache.cachedServerSnap.isFiltered; - - // Essentially we'll just get our existing server cache for the affected - // paths and re-apply it as a server update now that it won't be shadowed. - FCacheNode *serverCache = viewCache.cachedServerSnap; - if (affectedTree.value != nil) { - // This is an overwrite. - if ((ackPath.isEmpty && serverCache.isFullyInitialized) || - [serverCache isCompleteForPath:ackPath]) { - return - [self applyServerOverwriteTo:viewCache - changePath:ackPath - snap:[serverCache.node getChild:ackPath] - writesCache:writesCache - completeCache:optCompleteCache - filterServerNode:filterServerNode - accumulator:accumulator]; - } else if (ackPath.isEmpty) { - // This is a goofy edge case where we are acking data at this - // location but don't have full data. We should just re-apply - // whatever we have in our cache as a merge. - FCompoundWrite *changedChildren = [FCompoundWrite emptyWrite]; - for (FNamedNode *child in serverCache.node.childEnumerator) { - changedChildren = [changedChildren addWrite:child.node - atKey:child.name]; - } - return [self applyServerMergeTo:viewCache - path:ackPath - changedChildren:changedChildren - writesCache:writesCache - completeCache:optCompleteCache - filterServerNode:filterServerNode - accumulator:accumulator]; - } else { - return viewCache; - } - } else { - // This is a merge. - __block FCompoundWrite *changedChildren = [FCompoundWrite emptyWrite]; - [affectedTree forEach:^(FPath *mergePath, id value) { - FPath *serverCachePath = [ackPath child:mergePath]; - if ([serverCache isCompleteForPath:serverCachePath]) { - changedChildren = [changedChildren - addWrite:[serverCache.node getChild:serverCachePath] - atPath:mergePath]; - } - }]; - return [self applyServerMergeTo:viewCache - path:ackPath - changedChildren:changedChildren - writesCache:writesCache - completeCache:optCompleteCache - filterServerNode:filterServerNode - accumulator:accumulator]; - } -} - -- (FViewCache *)revertUserWriteOn:(FViewCache *)viewCache - path:(FPath *)path - writesCache:(FWriteTreeRef *)writesCache - completeCache:(id<FNode>)optCompleteCache - accumulator:(FChildChangeAccumulator *)accumulator { - if ([writesCache shadowingWriteAtPath:path] != nil) { - return viewCache; - } else { - id<FCompleteChildSource> source = [[FWriteTreeCompleteChildSource alloc] - initWithWrites:writesCache - viewCache:viewCache - serverCache:optCompleteCache]; - FIndexedNode *oldEventCache = viewCache.cachedEventSnap.indexedNode; - FIndexedNode *newEventCache; - if (path.isEmpty || [[path getFront] isEqualToString:@".priority"]) { - id<FNode> newNode; - if (viewCache.cachedServerSnap.isFullyInitialized) { - newNode = [writesCache - calculateCompleteEventCacheWithCompleteServerCache: - viewCache.completeServerSnap]; - } else { - newNode = [writesCache - calculateCompleteEventChildrenWithCompleteServerChildren: - viewCache.cachedServerSnap.node]; - } - FIndexedNode *indexedNode = - [FIndexedNode indexedNodeWithNode:newNode - index:self.filter.index]; - newEventCache = [self.filter updateFullNode:oldEventCache - withNewNode:indexedNode - accumulator:accumulator]; - } else { - NSString *childKey = [path getFront]; - id<FNode> newChild = - [writesCache calculateCompleteChild:childKey - cache:viewCache.cachedServerSnap]; - if (newChild == nil && - [viewCache.cachedServerSnap isCompleteForChild:childKey]) { - newChild = [oldEventCache.node getImmediateChild:childKey]; - } - if (newChild != nil) { - newEventCache = [self.filter updateChildIn:oldEventCache - forChildKey:childKey - newChild:newChild - affectedPath:[path popFront] - fromSource:source - accumulator:accumulator]; - } else if (newChild == nil && - [viewCache.cachedEventSnap.node hasChild:childKey]) { - // No complete child available, delete the existing one, if any - newEventCache = - [self.filter updateChildIn:oldEventCache - forChildKey:childKey - newChild:[FEmptyNode emptyNode] - affectedPath:[path popFront] - fromSource:source - accumulator:accumulator]; - } else { - newEventCache = oldEventCache; - } - if (newEventCache.node.isEmpty && - viewCache.cachedServerSnap.isFullyInitialized) { - // We might have reverted all child writes. Maybe the old event - // was a leaf node. - id<FNode> complete = [writesCache - calculateCompleteEventCacheWithCompleteServerCache: - viewCache.completeServerSnap]; - if (complete.isLeafNode) { - FIndexedNode *indexed = - [FIndexedNode indexedNodeWithNode:complete]; - newEventCache = [self.filter updateFullNode:newEventCache - withNewNode:indexed - accumulator:accumulator]; - } - } - } - BOOL complete = viewCache.cachedServerSnap.isFullyInitialized || - [writesCache shadowingWriteAtPath:[FPath empty]] != nil; - return [viewCache updateEventSnap:newEventCache - isComplete:complete - isFiltered:self.filter.filtersNodes]; - } -} - -- (FViewCache *)listenCompleteOldCache:(FViewCache *)viewCache - path:(FPath *)path - writesCache:(FWriteTreeRef *)writesCache - serverCache:(id<FNode>)servercache - accumulator:(FChildChangeAccumulator *)accumulator { - FCacheNode *oldServerNode = viewCache.cachedServerSnap; - FViewCache *newViewCache = [viewCache - updateServerSnap:oldServerNode.indexedNode - isComplete:(oldServerNode.isFullyInitialized || path.isEmpty) - isFiltered:oldServerNode.isFiltered]; - return [self - generateEventCacheAfterServerEvent:newViewCache - path:path - writesCache:writesCache - source:[FNoCompleteChildSource instance] - accumulator:accumulator]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessorResult.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessorResult.h deleted file mode 100644 index 8d3e2ef..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessorResult.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@class FViewCache; - -@interface FViewProcessorResult : NSObject -@property(nonatomic, strong, readonly) FViewCache *viewCache; -/** - * List of FChanges. - */ -@property(nonatomic, strong, readonly) NSArray *changes; - -- (id)initWithViewCache:(FViewCache *)viewCache changes:(NSArray *)changes; -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessorResult.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessorResult.m deleted file mode 100644 index 0d38947..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/FViewProcessorResult.m +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FViewProcessorResult.h" -#import "FViewCache.h" - -@interface FViewProcessorResult () -@property(nonatomic, strong, readwrite) FViewCache *viewCache; -@property(nonatomic, strong, readwrite) NSArray *changes; -@end - -@implementation FViewProcessorResult -- (id)initWithViewCache:(FViewCache *)viewCache changes:(NSArray *)changes { - self = [super init]; - if (self) { - self.viewCache = viewCache; - self.changes = changes; - } - return self; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FAuthTokenProvider.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FAuthTokenProvider.h deleted file mode 100644 index a4f8b15..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FAuthTokenProvider.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import "FTypedefs.h" -#import "FTypedefs_Private.h" - -@protocol FIRAuthInterop; - -@protocol FAuthTokenProvider <NSObject> - -- (void)fetchTokenForcingRefresh:(BOOL)forceRefresh - withCallback:(fbt_void_nsstring_nserror)callback; - -- (void)listenForTokenChanges:(fbt_void_nsstring)listener; - -@end - -@interface FAuthTokenProvider : NSObject - -+ (id<FAuthTokenProvider>)authTokenProviderWithAuth:(id<FIRAuthInterop>)auth; - -- (instancetype)init NS_UNAVAILABLE; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FAuthTokenProvider.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FAuthTokenProvider.m deleted file mode 100644 index cd7fbe7..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FAuthTokenProvider.m +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FAuthTokenProvider.h" - -#import <FirebaseAuthInterop/FIRAuthInterop.h> -#import <FirebaseCore/FIRAppInternal.h> -#import <FirebaseCore/FIRComponentContainer.h> -#import <FirebaseCore/FIRLogger.h> - -#import "FIRDatabaseQuery_Private.h" -#import "FIRNoopAuthTokenProvider.h" -#import "FUtilities.h" - -@interface FAuthStateListenerWrapper : NSObject - -@property(nonatomic, copy) fbt_void_nsstring listener; -@property(nonatomic, weak) id<FIRAuthInterop> auth; - -@end - -@implementation FAuthStateListenerWrapper - -- (instancetype)initWithListener:(fbt_void_nsstring)listener - auth:(id<FIRAuthInterop>)auth { - self = [super init]; - if (self != nil) { - self->_listener = listener; - self->_auth = auth; - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(authStateDidChangeNotification:) - name:FIRAuthStateDidChangeInternalNotification - object:nil]; - } - return self; -} - -- (void)authStateDidChangeNotification:(NSNotification *)notification { - NSDictionary *userInfo = notification.userInfo; - if (notification.object == self.auth) { - NSString *token = - userInfo[FIRAuthStateDidChangeInternalNotificationTokenKey]; - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - self.listener(token); - }); - } -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -@end - -@interface FIRFirebaseAuthTokenProvider : NSObject <FAuthTokenProvider> - -@property(nonatomic, strong) id<FIRAuthInterop> auth; -/** Strong references to the auth listeners as they are only weak in - * FIRFirebaseApp */ -@property(nonatomic, strong) NSMutableArray *authListeners; - -- (instancetype)initWithAuth:(id<FIRAuthInterop>)auth; - -@end - -@implementation FIRFirebaseAuthTokenProvider - -- (instancetype)initWithAuth:(id<FIRAuthInterop>)auth { - self = [super init]; - if (self != nil) { - self->_auth = auth; - self->_authListeners = [NSMutableArray array]; - } - return self; -} - -- (void)fetchTokenForcingRefresh:(BOOL)forceRefresh - withCallback:(fbt_void_nsstring_nserror)callback { - if (self.auth == nil) { - // Signal that Auth is not available by returning nil. - callback(nil, nil); - } else { - [self.auth getTokenForcingRefresh:forceRefresh - withCallback:^(NSString *_Nullable token, - NSError *_Nullable error) { - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - callback(token, error); - }); - }]; - } -} - -- (void)listenForTokenChanges:(_Nonnull fbt_void_nsstring)listener { - FAuthStateListenerWrapper *wrapper = - [[FAuthStateListenerWrapper alloc] initWithListener:listener - auth:self.auth]; - [self.authListeners addObject:wrapper]; -} - -@end - -@implementation FAuthTokenProvider - -+ (id<FAuthTokenProvider>)authTokenProviderWithAuth: - (id<FIRAuthInterop>)authInterop { - return [[FIRFirebaseAuthTokenProvider alloc] initWithAuth:authInterop]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FIRNoopAuthTokenProvider.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FIRNoopAuthTokenProvider.h deleted file mode 100644 index 137c0ce..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FIRNoopAuthTokenProvider.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FAuthTokenProvider.h" -#import <Foundation/Foundation.h> - -@interface FIRNoopAuthTokenProvider : NSObject <FAuthTokenProvider> - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FIRNoopAuthTokenProvider.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FIRNoopAuthTokenProvider.m deleted file mode 100644 index c50d308..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Login/FIRNoopAuthTokenProvider.m +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRNoopAuthTokenProvider.h" -#import "FAuthTokenProvider.h" -#import "FIRDatabaseQuery_Private.h" - -@implementation FIRNoopAuthTokenProvider - -- (void)fetchTokenForcingRefresh:(BOOL)forceRefresh - withCallback:(fbt_void_nsstring_nserror)callback { - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - callback(nil, nil); - }); -} - -- (void)listenForTokenChanges:(fbt_void_nsstring)listener { - // no-op, because token never changes -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FCachePolicy.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FCachePolicy.h deleted file mode 100644 index 6305d34..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FCachePolicy.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@protocol FCachePolicy <NSObject> - -- (BOOL)shouldPruneCacheWithSize:(NSUInteger)cacheSize - numberOfTrackedQueries:(NSUInteger)numTrackedQueries; -- (BOOL)shouldCheckCacheSize:(NSUInteger)serverUpdatesSinceLastCheck; -- (float)percentOfQueriesToPruneAtOnce; -- (NSUInteger)maxNumberOfQueriesToKeep; - -@end - -@interface FLRUCachePolicy : NSObject <FCachePolicy> - -@property(nonatomic, readonly) NSUInteger maxSize; - -- (id)initWithMaxSize:(NSUInteger)maxSize; - -@end - -@interface FNoCachePolicy : NSObject <FCachePolicy> - -+ (FNoCachePolicy *)noCachePolicy; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FCachePolicy.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FCachePolicy.m deleted file mode 100644 index c1ecd98..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FCachePolicy.m +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FCachePolicy.h" - -@interface FLRUCachePolicy () - -@property(nonatomic, readwrite) NSUInteger maxSize; - -@end - -static const NSUInteger kFServerUpdatesBetweenCacheSizeChecks = 1000; -static const NSUInteger kFMaxNumberOfPrunableQueriesToKeep = 1000; -static const float kFPercentOfQueriesToPruneAtOnce = 0.2f; - -@implementation FLRUCachePolicy - -- (id)initWithMaxSize:(NSUInteger)maxSize { - self = [super init]; - if (self != nil) { - self->_maxSize = maxSize; - } - return self; -} - -- (BOOL)shouldPruneCacheWithSize:(NSUInteger)cacheSize - numberOfTrackedQueries:(NSUInteger)numTrackedQueries { - return cacheSize > self.maxSize || - numTrackedQueries > kFMaxNumberOfPrunableQueriesToKeep; -} - -- (BOOL)shouldCheckCacheSize:(NSUInteger)serverUpdatesSinceLastCheck { - return serverUpdatesSinceLastCheck > kFServerUpdatesBetweenCacheSizeChecks; -} - -- (float)percentOfQueriesToPruneAtOnce { - return kFPercentOfQueriesToPruneAtOnce; -} - -- (NSUInteger)maxNumberOfQueriesToKeep { - return kFMaxNumberOfPrunableQueriesToKeep; -} - -@end - -@implementation FNoCachePolicy - -+ (FNoCachePolicy *)noCachePolicy { - return [[FNoCachePolicy alloc] init]; -} - -- (BOOL)shouldPruneCacheWithSize:(NSUInteger)cacheSize - numberOfTrackedQueries:(NSUInteger)numTrackedQueries { - return NO; -} - -- (BOOL)shouldCheckCacheSize:(NSUInteger)serverUpdatesSinceLastCheck { - return NO; -} - -- (float)percentOfQueriesToPruneAtOnce { - return 0; -} - -- (NSUInteger)maxNumberOfQueriesToKeep { - return NSUIntegerMax; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FLevelDBStorageEngine.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FLevelDBStorageEngine.h deleted file mode 100644 index 6d32b98..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FLevelDBStorageEngine.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import "FCompoundWrite.h" -#import "FNode.h" -#import "FPath.h" -#import "FQuerySpec.h" -#import "FStorageEngine.h" - -@class FCacheNode; -@class FTrackedQuery; -@class FPruneForest; -@class FRepoInfo; - -@interface FLevelDBStorageEngine : NSObject <FStorageEngine> - -+ (NSString *)firebaseDir; - -- (id)initWithPath:(NSString *)path; - -- (void)runLegacyMigration:(FRepoInfo *)info; -- (void)purgeEverything; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FLevelDBStorageEngine.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FLevelDBStorageEngine.m deleted file mode 100644 index 77a8303..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FLevelDBStorageEngine.m +++ /dev/null @@ -1,990 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import "FLevelDBStorageEngine.h" - -#import "APLevelDB.h" -#import "FEmptyNode.h" -#import "FPendingPut.h" // For legacy migration -#import "FPruneForest.h" -#import "FQueryParams.h" -#import "FSnapshotUtilities.h" -#import "FTrackedQuery.h" -#import "FUtilities.h" -#import "FWriteRecord.h" -#import <FirebaseCore/FIRLogger.h> - -@interface FLevelDBStorageEngine () - -@property(nonatomic, strong) NSString *basePath; -@property(nonatomic, strong) APLevelDB *writesDB; -@property(nonatomic, strong) APLevelDB *serverCacheDB; - -@end - -// WARNING: If you change this, you need to write a migration script -static NSString *const kFPersistenceVersion = @"1"; - -static NSString *const kFServerDBPath = @"server_data"; -static NSString *const kFWritesDBPath = @"writes"; - -static NSString *const kFUserWriteId = @"id"; -static NSString *const kFUserWritePath = @"path"; -static NSString *const kFUserWriteOverwrite = @"o"; -static NSString *const kFUserWriteMerge = @"m"; - -static NSString *const kFTrackedQueryId = @"id"; -static NSString *const kFTrackedQueryPath = @"path"; -static NSString *const kFTrackedQueryParams = @"p"; -static NSString *const kFTrackedQueryLastUse = @"lu"; -static NSString *const kFTrackedQueryIsComplete = @"c"; -static NSString *const kFTrackedQueryIsActive = @"a"; - -static NSString *const kFServerCachePrefix = @"/server_cache/"; -// '~' is the last non-control character in the ASCII table until 127 -// We wan't the entire range of thing stored in the DB -static NSString *const kFServerCacheRangeEnd = @"/server_cache~"; -static NSString *const kFTrackedQueriesPrefix = @"/tracked_queries/"; -static NSString *const kFTrackedQueryKeysPrefix = @"/tracked_query_keys/"; - -// Failed to load JSON because a valid JSON turns out to be NaN while -// deserializing -static const NSInteger kFNanFailureCode = 3840; - -static NSString *writeRecordKey(NSUInteger writeId) { - return [NSString stringWithFormat:@"%lu", (unsigned long)(writeId)]; -} - -static NSString *serverCacheKey(FPath *path) { - return [NSString stringWithFormat:@"%@%@", kFServerCachePrefix, - ([path toStringWithTrailingSlash])]; -} - -static NSString *trackedQueryKey(NSUInteger trackedQueryId) { - return [NSString stringWithFormat:@"%@%lu", kFTrackedQueriesPrefix, - (unsigned long)trackedQueryId]; -} - -static NSString *trackedQueryKeysKeyPrefix(NSUInteger trackedQueryId) { - return [NSString stringWithFormat:@"%@%lu/", kFTrackedQueryKeysPrefix, - (unsigned long)trackedQueryId]; -} - -static NSString *trackedQueryKeysKey(NSUInteger trackedQueryId, NSString *key) { - return [NSString stringWithFormat:@"%@%lu/%@", kFTrackedQueryKeysPrefix, - (unsigned long)trackedQueryId, key]; -} - -@implementation FLevelDBStorageEngine -#pragma mark - Constructors - -- (id)initWithPath:(NSString *)dbPath { - self = [super init]; - if (self) { - self.basePath = [[FLevelDBStorageEngine firebaseDir] - stringByAppendingPathComponent:dbPath]; - /* For reference: - serverDataDB = [aPersistence createDbByName:@"server_data"]; - FPangolinDB *completenessDb = [aPersistence - createDbByName:@"server_complete"]; - */ - [FLevelDBStorageEngine ensureDir:self.basePath markAsDoNotBackup:YES]; - [self runMigration]; - [self openDatabases]; - } - return self; -} - -- (void)runMigration { - // Currently we're at version 1, so all we need to do is write that to a - // file - NSString *versionFile = - [self.basePath stringByAppendingPathComponent:@"version"]; - NSError *error; - NSString *oldVersion = - [NSString stringWithContentsOfFile:versionFile - encoding:NSUTF8StringEncoding - error:&error]; - if (!oldVersion) { - // This is probably fine, we don't have a version file yet - BOOL success = [kFPersistenceVersion writeToFile:versionFile - atomically:NO - encoding:NSUTF8StringEncoding - error:&error]; - if (!success) { - FFWarn(@"I-RDB076001", @"Failed to write version for database: %@", - error); - } - } else if ([oldVersion isEqualToString:kFPersistenceVersion]) { - // Everythings fine no need for migration - } else { - // If we add more versions in the future, we need to run migration here - [NSException raise:NSInternalInconsistencyException - format:@"Unrecognized database version: %@", oldVersion]; - } -} - -- (void)runLegacyMigration:(FRepoInfo *)info { - NSArray *dirPaths = NSSearchPathForDirectoriesInDomains( - NSDocumentDirectory, NSUserDomainMask, YES); - NSString *documentsDir = [dirPaths objectAtIndex:0]; - NSString *firebaseDir = - [documentsDir stringByAppendingPathComponent:@"firebase"]; - NSString *repoHashString = - [NSString stringWithFormat:@"%@_%@", info.host, info.namespace]; - NSString *legacyBaseDir = - [NSString stringWithFormat:@"%@/1/%@/v1", firebaseDir, repoHashString]; - if ([[NSFileManager defaultManager] fileExistsAtPath:legacyBaseDir]) { - FFWarn(@"I-RDB076002", @"Legacy database found, migrating..."); - // We only need to migrate writes - NSError *error = nil; - APLevelDB *writes = [APLevelDB - levelDBWithPath:[legacyBaseDir stringByAppendingPathComponent: - @"outstanding_puts"] - error:&error]; - if (writes != nil) { - __block NSUInteger numberOfWritesRestored = 0; - // Maybe we could use write batches, but what the heck, I'm sure - // it'll go fine :P - [writes enumerateKeysAndValuesAsData:^(NSString *key, NSData *data, - BOOL *stop) { - id pendingPut = [NSKeyedUnarchiver unarchiveObjectWithData:data]; - if ([pendingPut isKindOfClass:[FPendingPut class]]) { - FPendingPut *put = pendingPut; - id<FNode> newNode = - [FSnapshotUtilities nodeFrom:put.data - priority:put.priority]; - [self saveUserOverwrite:newNode - atPath:put.path - writeId:[key integerValue]]; - numberOfWritesRestored++; - } else if ([pendingPut - isKindOfClass:[FPendingPutPriority class]]) { - // This is for backwards compatibility. Older clients will - // save FPendingPutPriority. New ones will need to read it and - // translate. - FPendingPutPriority *putPriority = pendingPut; - FPath *priorityPath = - [putPriority.path childFromString:@".priority"]; - id<FNode> newNode = - [FSnapshotUtilities nodeFrom:putPriority.priority - priority:nil]; - [self saveUserOverwrite:newNode - atPath:priorityPath - writeId:[key integerValue]]; - numberOfWritesRestored++; - } else if ([pendingPut isKindOfClass:[FPendingUpdate class]]) { - FPendingUpdate *update = pendingPut; - FCompoundWrite *merge = [FCompoundWrite - compoundWriteWithValueDictionary:update.data]; - [self saveUserMerge:merge - atPath:update.path - writeId:[key integerValue]]; - numberOfWritesRestored++; - } else { - FFWarn(@"I-RDB076003", - @"Failed to migrate legacy write, meh!"); - } - }]; - FFWarn(@"I-RDB076004", @"Migrated %lu writes", - (unsigned long)numberOfWritesRestored); - [writes close]; - FFWarn(@"I-RDB076005", @"Deleting legacy database..."); - BOOL success = - [[NSFileManager defaultManager] removeItemAtPath:legacyBaseDir - error:&error]; - if (!success) { - FFWarn(@"I-RDB076006", @"Failed to delete legacy database: %@", - error); - } else { - FFWarn(@"I-RDB076007", @"Finished migrating legacy database."); - } - } else { - FFWarn(@"I-RDB076008", @"Failed to migrate old database: %@", - error); - } - } -} - -- (void)openDatabases { - self.serverCacheDB = [self createDB:kFServerDBPath]; - self.writesDB = [self createDB:kFWritesDBPath]; -} - -- (void)purgeDatabase:(NSString *)dbPath { - NSString *path = [self.basePath stringByAppendingPathComponent:dbPath]; - NSError *error; - FFWarn(@"I-RDB076009", @"Deleting database at path %@", path); - BOOL success = [[NSFileManager defaultManager] removeItemAtPath:path - error:&error]; - if (!success) { - [NSException raise:NSInternalInconsistencyException - format:@"Failed to delete database files: %@", error]; - } -} - -- (void)purgeEverything { - [self close]; - [@[ kFServerDBPath, kFWritesDBPath ] - enumerateObjectsUsingBlock:^(NSString *dbPath, NSUInteger idx, - BOOL *stop) { - [self purgeDatabase:dbPath]; - }]; - - [self openDatabases]; -} - -- (void)close { - // autoreleasepool will cause deallocation which will close the DB - @autoreleasepool { - [self.serverCacheDB close]; - self.serverCacheDB = nil; - [self.writesDB close]; - self.writesDB = nil; - } -} - -+ (NSString *)firebaseDir { -#if TARGET_OS_IOS || TARGET_OS_TV - NSArray *dirPaths = NSSearchPathForDirectoriesInDomains( - NSDocumentDirectory, NSUserDomainMask, YES); - NSString *documentsDir = [dirPaths objectAtIndex:0]; - return [documentsDir stringByAppendingPathComponent:@"firebase"]; -#elif TARGET_OS_OSX - return [NSHomeDirectory() stringByAppendingPathComponent:@".firebase"]; -#endif -} - -- (APLevelDB *)createDB:(NSString *)dbName { - NSError *err = nil; - NSString *path = [self.basePath stringByAppendingPathComponent:dbName]; - APLevelDB *db = [APLevelDB levelDBWithPath:path error:&err]; - - if (err) { - FFWarn(@"I-RDB076036", - @"Failed to read database persistence file '%@': %@", dbName, - [err localizedDescription]); - err = nil; - - // Delete the database and try again. - [self purgeDatabase:dbName]; - db = [APLevelDB levelDBWithPath:path error:&err]; - - if (err) { - NSString *reason = [NSString - stringWithFormat:@"Error initializing persistence: %@", - [err description]]; - @throw [NSException - exceptionWithName:@"FirebaseDatabasePersistenceFailure" - reason:reason - userInfo:nil]; - } - } - - return db; -} - -- (void)saveUserOverwrite:(id<FNode>)node - atPath:(FPath *)path - writeId:(NSUInteger)writeId { - NSDictionary *write = @{ - kFUserWriteId : @(writeId), - kFUserWritePath : [path toStringWithTrailingSlash], - kFUserWriteOverwrite : [node valForExport:YES] - }; - NSError *error = nil; - NSData *data = [NSJSONSerialization dataWithJSONObject:write - options:0 - error:&error]; - NSAssert(data, @"Failed to serialize user overwrite: %@, (Error: %@)", - write, error); - [self.writesDB setData:data forKey:writeRecordKey(writeId)]; -} - -- (void)saveUserMerge:(FCompoundWrite *)merge - atPath:(FPath *)path - writeId:(NSUInteger)writeId { - NSDictionary *write = @{ - kFUserWriteId : @(writeId), - kFUserWritePath : [path toStringWithTrailingSlash], - kFUserWriteMerge : [merge valForExport:YES] - }; - NSError *error = nil; - NSData *data = [NSJSONSerialization dataWithJSONObject:write - options:0 - error:&error]; - NSAssert(data, @"Failed to serialize user merge: %@ (Error: %@)", write, - error); - [self.writesDB setData:data forKey:writeRecordKey(writeId)]; -} - -- (void)removeUserWrite:(NSUInteger)writeId { - [self.writesDB removeKey:writeRecordKey(writeId)]; -} - -- (void)removeAllUserWrites { - __block NSUInteger count = 0; - NSDate *start = [NSDate date]; - id<APLevelDBWriteBatch> batch = [self.writesDB beginWriteBatch]; - [self.writesDB enumerateKeys:^(NSString *key, BOOL *stop) { - [batch removeKey:key]; - count++; - }]; - BOOL success = [batch commit]; - if (!success) { - FFWarn(@"I-RDB076010", @"Failed to remove all users writes on disk!"); - } else { - FFDebug(@"I-RDB076011", @"Removed %lu writes in %fms", - (unsigned long)count, [start timeIntervalSinceNow] * -1000); - } -} - -- (NSArray *)userWrites { - NSDate *date = [NSDate date]; - NSMutableArray *writes = [NSMutableArray array]; - [self.writesDB enumerateKeysAndValuesAsData:^(NSString *key, NSData *data, - BOOL *stop) { - NSError *error = nil; - NSDictionary *writeJSON = [NSJSONSerialization JSONObjectWithData:data - options:0 - error:&error]; - if (writeJSON == nil) { - if (error.code == kFNanFailureCode) { - FFWarn(@"I-RDB076012", - @"Failed to deserialize write (%@), likely because of out " - @"of range doubles (Error: %@)", - [[NSString alloc] initWithData:data - encoding:NSUTF8StringEncoding], - error); - FFWarn(@"I-RDB076013", @"Removing failed write with key %@", key); - [self.writesDB removeKey:key]; - } else { - [NSException raise:NSInternalInconsistencyException - format:@"Failed to deserialize write: %@", error]; - } - } else { - NSInteger writeId = - ((NSNumber *)writeJSON[kFUserWriteId]).integerValue; - FPath *path = [FPath pathWithString:writeJSON[kFUserWritePath]]; - FWriteRecord *writeRecord; - if (writeJSON[kFUserWriteMerge] != nil) { - // It's a merge - FCompoundWrite *merge = [FCompoundWrite - compoundWriteWithValueDictionary:writeJSON[kFUserWriteMerge]]; - writeRecord = [[FWriteRecord alloc] initWithPath:path - merge:merge - writeId:writeId]; - } else { - // It's an overwrite - NSAssert(writeJSON[kFUserWriteOverwrite] != nil, - @"Persisted write did not contain merge or overwrite!"); - id<FNode> node = - [FSnapshotUtilities nodeFrom:writeJSON[kFUserWriteOverwrite]]; - writeRecord = [[FWriteRecord alloc] initWithPath:path - overwrite:node - writeId:writeId - visible:YES]; - } - [writes addObject:writeRecord]; - } - }]; - // Make sure writes are sorted - [writes sortUsingComparator:^NSComparisonResult(FWriteRecord *one, - FWriteRecord *two) { - if (one.writeId < two.writeId) { - return NSOrderedAscending; - } else if (one.writeId > two.writeId) { - return NSOrderedDescending; - } else { - return NSOrderedSame; - } - }]; - FFDebug(@"I-RDB076014", @"Loaded %lu writes in %fms", - (unsigned long)writes.count, [date timeIntervalSinceNow] * -1000); - return writes; -} - -- (id<FNode>)serverCacheAtPath:(FPath *)path { - NSDate *start = [NSDate date]; - id data = [self internalNestedDataForPath:path]; - id<FNode> node = [FSnapshotUtilities nodeFrom:data]; - FFDebug(@"I-RDB076015", @"Loaded node with %d children at %@ in %fms", - [node numChildren], path, [start timeIntervalSinceNow] * -1000); - return node; -} - -- (id<FNode>)serverCacheForKeys:(NSSet *)keys atPath:(FPath *)path { - NSDate *start = [NSDate date]; - __block id<FNode> node = [FEmptyNode emptyNode]; - [keys enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) { - id data = [self internalNestedDataForPath:[path childFromString:key]]; - node = [node updateImmediateChild:key - withNewChild:[FSnapshotUtilities nodeFrom:data]]; - }]; - FFDebug(@"I-RDB076016", - @"Loaded node with %d children for %lu keys at %@ in %fms", - [node numChildren], (unsigned long)keys.count, path, - [start timeIntervalSinceNow] * -1000); - return node; -} - -- (void)updateServerCache:(id<FNode>)node - atPath:(FPath *)path - merge:(BOOL)merge { - NSDate *start = [NSDate date]; - id<APLevelDBWriteBatch> batch = [self.serverCacheDB beginWriteBatch]; - // Remove any leaf nodes that might be higher up - [self removeAllLeafNodesOnPath:path batch:batch]; - __block NSUInteger counter = 0; - if (merge) { - // remove any children that exist - [node enumerateChildrenUsingBlock:^(NSString *childKey, - id<FNode> childNode, BOOL *stop) { - FPath *childPath = [path childFromString:childKey]; - [self removeAllWithPrefix:serverCacheKey(childPath) - batch:batch - database:self.serverCacheDB]; - [self saveNodeInternal:childNode - atPath:childPath - batch:batch - counter:&counter]; - }]; - } else { - // remove everything - [self removeAllWithPrefix:serverCacheKey(path) - batch:batch - database:self.serverCacheDB]; - [self saveNodeInternal:node atPath:path batch:batch counter:&counter]; - } - BOOL success = [batch commit]; - if (!success) { - FFWarn(@"I-RDB076017", @"Failed to update server cache on disk!"); - } else { - FFDebug(@"I-RDB076018", @"Saved %lu leaf nodes for overwrite in %fms", - (unsigned long)counter, [start timeIntervalSinceNow] * -1000); - } -} - -- (void)updateServerCacheWithMerge:(FCompoundWrite *)merge - atPath:(FPath *)path { - NSDate *start = [NSDate date]; - __block NSUInteger counter = 0; - id<APLevelDBWriteBatch> batch = [self.serverCacheDB beginWriteBatch]; - // Remove any leaf nodes that might be higher up - [self removeAllLeafNodesOnPath:path batch:batch]; - [merge enumerateWrites:^(FPath *relativePath, id<FNode> node, BOOL *stop) { - FPath *childPath = [path child:relativePath]; - [self removeAllWithPrefix:serverCacheKey(childPath) - batch:batch - database:self.serverCacheDB]; - [self saveNodeInternal:node - atPath:childPath - batch:batch - counter:&counter]; - }]; - BOOL success = [batch commit]; - if (!success) { - FFWarn(@"I-RDB076019", @"Failed to update server cache on disk!"); - } else { - FFDebug(@"I-RDB076020", @"Saved %lu leaf nodes for merge in %fms", - (unsigned long)counter, [start timeIntervalSinceNow] * -1000); - } -} - -- (void)saveNodeInternal:(id<FNode>)node - atPath:(FPath *)path - batch:(id<APLevelDBWriteBatch>)batch - counter:(NSUInteger *)counter { - id data = [node valForExport:YES]; - if (data != nil && ![data isKindOfClass:[NSNull class]]) { - [self internalSetNestedData:data - forKey:serverCacheKey(path) - withBatch:batch - counter:counter]; - } -} - -- (NSUInteger)serverCacheEstimatedSizeInBytes { - // Use the exact size, because for pruning the approximate size can lead to - // weird situations where we prune everything because no compaction is ever - // run - return [self.serverCacheDB exactSizeFrom:kFServerCachePrefix - to:kFServerCacheRangeEnd]; -} - -- (void)pruneCache:(FPruneForest *)pruneForest atPath:(FPath *)path { - // TODO: be more intelligent, don't scan entire database... - - __block NSUInteger pruned = 0; - __block NSUInteger kept = 0; - NSDate *start = [NSDate date]; - - NSString *prefix = serverCacheKey(path); - id<APLevelDBWriteBatch> batch = [self.serverCacheDB beginWriteBatch]; - - [self.serverCacheDB - enumerateKeysWithPrefix:prefix - usingBlock:^(NSString *dbKey, BOOL *stop) { - NSString *pathStr = - [dbKey substringFromIndex:prefix.length]; - FPath *relativePath = [[FPath alloc] initWith:pathStr]; - if ([pruneForest shouldPruneUnkeptDescendantsAtPath: - relativePath]) { - pruned++; - [batch removeKey:dbKey]; - } else { - kept++; - } - }]; - BOOL success = [batch commit]; - if (!success) { - FFWarn(@"I-RDB076021", @"Failed to prune cache on disk!"); - } else { - FFDebug(@"I-RDB076022", @"Pruned %lu paths, kept %lu paths in %fms", - (unsigned long)pruned, (unsigned long)kept, - [start timeIntervalSinceNow] * -1000); - } -} - -#pragma mark - Tracked Queries - -- (NSArray *)loadTrackedQueries { - NSDate *date = [NSDate date]; - NSMutableArray *trackedQueries = [NSMutableArray array]; - [self.serverCacheDB - enumerateKeysWithPrefix:kFTrackedQueriesPrefix - asData:^(NSString *key, NSData *data, BOOL *stop) { - NSError *error = nil; - NSDictionary *queryJSON = - [NSJSONSerialization JSONObjectWithData:data - options:0 - error:&error]; - if (queryJSON == nil) { - if (error.code == kFNanFailureCode) { - FFWarn( - @"I-RDB076023", - @"Failed to deserialize tracked query " - @"(%@), likely because of out of range " - @"doubles (Error: %@)", - [[NSString alloc] - initWithData:data - encoding:NSUTF8StringEncoding], - error); - FFWarn(@"I-RDB076024", - @"Removing failed tracked query with " - @"key %@", - key); - [self.serverCacheDB removeKey:key]; - } else { - [NSException - raise:NSInternalInconsistencyException - format:@"Failed to deserialize tracked " - @"query: %@", - error]; - } - } else { - NSUInteger queryId = - ((NSNumber *)queryJSON[kFTrackedQueryId]) - .unsignedIntegerValue; - FPath *path = - [FPath pathWithString: - queryJSON[kFTrackedQueryPath]]; - FQueryParams *params = [FQueryParams - fromQueryObject:queryJSON - [kFTrackedQueryParams]]; - FQuerySpec *query = - [[FQuerySpec alloc] initWithPath:path - params:params]; - BOOL isComplete = - [queryJSON[kFTrackedQueryIsComplete] - boolValue]; - BOOL isActive = - [queryJSON[kFTrackedQueryIsActive] - boolValue]; - NSTimeInterval lastUse = - [queryJSON[kFTrackedQueryLastUse] - doubleValue]; - - FTrackedQuery *trackedQuery = - [[FTrackedQuery alloc] - initWithId:queryId - query:query - lastUse:lastUse - isActive:isActive - isComplete:isComplete]; - - [trackedQueries addObject:trackedQuery]; - } - }]; - FFDebug(@"I-RDB076025", @"Loaded %lu tracked queries in %fms", - (unsigned long)trackedQueries.count, - [date timeIntervalSinceNow] * -1000); - return trackedQueries; -} - -- (void)removeTrackedQuery:(NSUInteger)queryId { - NSDate *start = [NSDate date]; - id<APLevelDBWriteBatch> batch = [self.serverCacheDB beginWriteBatch]; - [batch removeKey:trackedQueryKey(queryId)]; - __block NSUInteger keyCount = 0; - [self.serverCacheDB - enumerateKeysWithPrefix:trackedQueryKeysKeyPrefix(queryId) - usingBlock:^(NSString *key, BOOL *stop) { - [batch removeKey:key]; - keyCount++; - }]; - - BOOL success = [batch commit]; - if (!success) { - FFWarn(@"I-RDB076026", @"Failed to remove tracked query on disk!"); - } else { - FFDebug(@"I-RDB076027", - @"Removed query with id %lu (and removed %lu keys) in %fms", - (unsigned long)queryId, (unsigned long)keyCount, - [start timeIntervalSinceNow] * -1000); - } -} - -- (void)saveTrackedQuery:(FTrackedQuery *)query { - NSDate *start = [NSDate date]; - NSDictionary *trackedQuery = @{ - kFTrackedQueryId : @(query.queryId), - kFTrackedQueryPath : [query.query.path toStringWithTrailingSlash], - kFTrackedQueryParams : [query.query.params wireProtocolParams], - kFTrackedQueryLastUse : @(query.lastUse), - kFTrackedQueryIsComplete : @(query.isComplete), - kFTrackedQueryIsActive : @(query.isActive) - }; - NSError *error = nil; - NSData *data = [NSJSONSerialization dataWithJSONObject:trackedQuery - options:0 - error:&error]; - NSAssert(data, @"Failed to serialize tracked query (Error: %@)", error); - [self.serverCacheDB setData:data forKey:trackedQueryKey(query.queryId)]; - FFDebug(@"I-RDB076028", @"Saved tracked query %lu in %fms", - (unsigned long)query.queryId, [start timeIntervalSinceNow] * -1000); -} - -- (void)setTrackedQueryKeys:(NSSet *)keys forQueryId:(NSUInteger)queryId { - NSDate *start = [NSDate date]; - __block NSUInteger removed = 0; - __block NSUInteger added = 0; - id<APLevelDBWriteBatch> batch = [self.serverCacheDB beginWriteBatch]; - NSMutableSet *seenKeys = [NSMutableSet set]; - // First, delete any keys that might be stored and are not part of the - // current keys - [self.serverCacheDB - enumerateKeysWithPrefix:trackedQueryKeysKeyPrefix(queryId) - asStrings:^(NSString *dbKey, NSString *actualKey, - BOOL *stop) { - if ([keys containsObject:actualKey]) { - // Already in DB - [seenKeys addObject:actualKey]; - } else { - // Not part of set, delete key - [batch removeKey:dbKey]; - removed++; - } - }]; - - // Next add any keys that are missing in the database - [keys enumerateObjectsUsingBlock:^(NSString *childKey, BOOL *stop) { - if (![seenKeys containsObject:childKey]) { - [batch setString:childKey - forKey:trackedQueryKeysKey(queryId, childKey)]; - added++; - } - }]; - BOOL success = [batch commit]; - if (!success) { - FFWarn(@"I-RDB076029", @"Failed to set tracked queries on disk!"); - } else { - FFDebug(@"I-RDB076030", - @"Set %lu tracked keys (%lu added, %lu removed) for query %lu " - @"in %fms", - (unsigned long)keys.count, (unsigned long)added, - (unsigned long)removed, (unsigned long)queryId, - [start timeIntervalSinceNow] * -1000); - } -} - -- (void)updateTrackedQueryKeysWithAddedKeys:(NSSet *)added - removedKeys:(NSSet *)removed - forQueryId:(NSUInteger)queryId { - NSDate *start = [NSDate date]; - id<APLevelDBWriteBatch> batch = [self.serverCacheDB beginWriteBatch]; - [removed enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) { - [batch removeKey:trackedQueryKeysKey(queryId, key)]; - }]; - [added enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) { - [batch setString:key forKey:trackedQueryKeysKey(queryId, key)]; - }]; - BOOL success = [batch commit]; - if (!success) { - FFWarn(@"I-RDB076031", @"Failed to update tracked queries on disk!"); - } else { - FFDebug(@"I-RDB076032", - @"Added %lu tracked keys, removed %lu for query %lu in %fms", - (unsigned long)added.count, (unsigned long)removed.count, - (unsigned long)queryId, [start timeIntervalSinceNow] * -1000); - } -} - -- (NSSet *)trackedQueryKeysForQuery:(NSUInteger)queryId { - NSDate *start = [NSDate date]; - NSMutableSet *set = [NSMutableSet set]; - [self.serverCacheDB - enumerateKeysWithPrefix:trackedQueryKeysKeyPrefix(queryId) - asStrings:^(NSString *dbKey, NSString *actualKey, - BOOL *stop) { - [set addObject:actualKey]; - }]; - FFDebug(@"I-RDB076033", @"Loaded %lu tracked keys for query %lu in %fms", - (unsigned long)set.count, (unsigned long)queryId, - [start timeIntervalSinceNow] * -1000); - return set; -} - -#pragma mark - Internal methods - -- (void)removeAllLeafNodesOnPath:(FPath *)path - batch:(id<APLevelDBWriteBatch>)batch { - while (!path.isEmpty) { - [batch removeKey:serverCacheKey(path)]; - path = [path parent]; - } - // Make sure to delete any nodes at the root - [batch removeKey:serverCacheKey([FPath empty])]; -} - -- (void)removeAllWithPrefix:(NSString *)prefix - batch:(id<APLevelDBWriteBatch>)batch - database:(APLevelDB *)database { - assert(prefix != nil); - - [database enumerateKeysWithPrefix:prefix - usingBlock:^(NSString *key, BOOL *stop) { - [batch removeKey:key]; - }]; -} - -#pragma mark - Internal helper methods - -- (void)internalSetNestedData:(id)value - forKey:(NSString *)key - withBatch:(id<APLevelDBWriteBatch>)batch - counter:(NSUInteger *)counter { - if ([value isKindOfClass:[NSDictionary class]]) { - NSDictionary *dictionary = value; - [dictionary enumerateKeysAndObjectsUsingBlock:^(id childKey, id obj, - BOOL *stop) { - assert(obj != nil); - NSString *childPath = - [NSString stringWithFormat:@"%@%@/", key, childKey]; - [self internalSetNestedData:obj - forKey:childPath - withBatch:batch - counter:counter]; - }]; - } else { - NSData *data = [self serializePrimitive:value]; - [batch setData:data forKey:key]; - (*counter)++; - } -} - -- (id)internalNestedDataForPath:(FPath *)path { - NSAssert(path != nil, @"Path was nil!"); - - NSString *baseKey = serverCacheKey(path); - - // HACK to make sure iter is freed now to avoid race conditions (if self.db - // is deleted before iter, you get an access violation). - @autoreleasepool { - APLevelDBIterator *iter = - [APLevelDBIterator iteratorWithLevelDB:self.serverCacheDB]; - - [iter seekToKey:baseKey]; - if (iter.key == nil || ![iter.key hasPrefix:baseKey]) { - // No data. - return nil; - } else { - return [self internalNestedDataFromIterator:iter - andKeyPrefix:baseKey]; - } - } -} - -- (id)internalNestedDataFromIterator:(APLevelDBIterator *)iterator - andKeyPrefix:(NSString *)prefix { - NSString *key = iterator.key; - - if ([key isEqualToString:prefix]) { - id result = [self deserializePrimitive:iterator.valueAsData]; - [iterator nextKey]; - return result; - } else { - NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; - while (key != nil && [key hasPrefix:prefix]) { - NSString *relativePath = [key substringFromIndex:prefix.length]; - NSArray *pathPieces = - [relativePath componentsSeparatedByString:@"/"]; - assert(pathPieces.count > 0); - NSString *childName = pathPieces[0]; - NSString *childPath = - [NSString stringWithFormat:@"%@%@/", prefix, childName]; - id childValue = [self internalNestedDataFromIterator:iterator - andKeyPrefix:childPath]; - [dict setValue:childValue forKey:childName]; - - key = iterator.key; - } - return dict; - } -} - -- (NSData *)serializePrimitive:(id)value { - // HACK: The built-in serialization only works on dicts and arrays. So we - // create an array and then strip off the leading / trailing byte (the [ and - // ]). - NSError *error = nil; - NSData *data = [NSJSONSerialization dataWithJSONObject:@[ value ] - options:0 - error:&error]; - NSAssert(data, @"Failed to serialize primitive: %@", error); - - return [data subdataWithRange:NSMakeRange(1, data.length - 2)]; -} - -- (id)fixDoubleParsing:(id)value - __attribute__((no_sanitize("float-cast-overflow"))) { - if ([value isKindOfClass:[NSDecimalNumber class]]) { - // In case the value is an NSDecimalNumber, we may be dealing with - // precisions that are higher than what can be represented in a double. - // In this case it does not suffice to check for integral numbers by - // casting the [value doubleValue] to an int64_t, because this will - // cause the compared values to be rounded to double precision. - // Coupled with a bug in [NSDecimalNumber longLongValue] that triggers - // when converting values with high precision, this would cause - // values of high precision, but with an integral 'doubleValue' - // representation to be converted to bogus values. - // A radar for the NSDecimalNumber issue can be found here: - // http://www.openradar.me/radar?id=5007005597040640 - // Consider the NSDecimalNumber value: 999.9999999999999487 - // This number has a 'doubleValue' of 1000. Using the previous version - // of this method would cause the value to be interpreted to be integral - // and then the resulting value would be based on the longLongValue - // which due to the NSDecimalNumber issue would turn out as -844. - // By using NSDecimal logic to test for integral values, - // 999.9999999999999487 will not be considered integral, and instead - // of triggering the 'longLongValue' issue, it will be returned as - // the 'doubleValue' representation (1000). - // Please note, that even without the NSDecimalNumber issue, the - // 'correct' longLongValue of 999.9999999999999487 is 999 and not 1000, - // so the previous code would cause issues even without the bug - // referenced in the radar. - NSDecimal original = [(NSDecimalNumber *)value decimalValue]; - NSDecimal rounded; - NSDecimalRound(&rounded, &original, 0, NSRoundPlain); - if (NSDecimalCompare(&original, &rounded) != NSOrderedSame) { - NSString *doubleString = [value stringValue]; - return [NSNumber numberWithDouble:[doubleString doubleValue]]; - } else { - return [NSNumber numberWithLongLong:[value longLongValue]]; - } - } else if ([value isKindOfClass:[NSNumber class]]) { - // The parser for double values in JSONSerialization at the root takes - // some short-cuts and delivers wrong results (wrong rounding) for some - // double values, including 2.47. Because we use the exact bytes for - // hashing on the server this will lead to hash mismatches. The parser - // of NSNumber seems to be more in line with what the server expects, so - // we use that here - CFNumberType type = CFNumberGetType((CFNumberRef)value); - if (type == kCFNumberDoubleType || type == kCFNumberFloatType) { - // The NSJSON parser returns all numbers as double values, even - // those that contain no exponent. To make sure that the String - // conversion below doesn't unexpectedly reduce precision, we make - // sure that our number is indeed not an integer. - if ((double)(int64_t)[value doubleValue] != [value doubleValue]) { - NSString *doubleString = [value stringValue]; - return [NSNumber numberWithDouble:[doubleString doubleValue]]; - } else { - return [NSNumber numberWithLongLong:[value longLongValue]]; - } - } - } - return value; -} - -- (id)deserializePrimitive:(NSData *)data { - NSError *error = nil; - id result = - [NSJSONSerialization JSONObjectWithData:data - options:NSJSONReadingAllowFragments - error:&error]; - if (result != nil) { - return [self fixDoubleParsing:result]; - } else { - if (error.code == kFNanFailureCode) { - FFWarn(@"I-RDB076034", - @"Failed to load primitive %@, likely because doubles where " - @"out of range (Error: %@)", - [[NSString alloc] initWithData:data - encoding:NSUTF8StringEncoding], - error); - return [NSNull null]; - } else { - [NSException raise:NSInternalInconsistencyException - format:@"Failed to deserialiaze primitive: %@", error]; - return nil; - } - } -} - -+ (void)ensureDir:(NSString *)path markAsDoNotBackup:(BOOL)markAsDoNotBackup { - NSError *error; - BOOL success = - [[NSFileManager defaultManager] createDirectoryAtPath:path - withIntermediateDirectories:YES - attributes:nil - error:&error]; - if (!success) { - @throw [NSException - exceptionWithName:@"FailedToCreatePersistenceDir" - reason:@"Failed to create persistence directory." - userInfo:@{@"path" : path}]; - } - - if (markAsDoNotBackup) { - NSURL *firebaseDirURL = [NSURL fileURLWithPath:path]; - success = [firebaseDirURL setResourceValue:@YES - forKey:NSURLIsExcludedFromBackupKey - error:&error]; - if (!success) { - FFWarn( - @"I-RDB076035", - @"Failed to mark firebase database folder as do not backup: %@", - error); - [NSException raise:@"Error marking as do not backup" - format:@"Failed to mark folder %@ as do not backup", - firebaseDirURL]; - } - } -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPendingPut.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPendingPut.h deleted file mode 100644 index 602bf8c..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPendingPut.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FPath.h" -#import <Foundation/Foundation.h> - -// These are all legacy classes and are used to migrate older persistence data -// base to newer ones These classes should not be used in newer code - -@interface FPendingPut : NSObject <NSCoding> - -@property(nonatomic, strong) FPath *path; -@property(nonatomic, strong) id data; -@property(nonatomic, strong) id priority; - -- (id)initWithPath:(FPath *)aPath andData:(id)aData andPriority:aPriority; -- (void)encodeWithCoder:(NSCoder *)aCoder; -- (id)initWithCoder:(NSCoder *)aDecoder; -@end - -@interface FPendingPutPriority : NSObject <NSCoding> - -@property(nonatomic, strong) FPath *path; -@property(nonatomic, strong) id priority; - -- (id)initWithPath:(FPath *)aPath andPriority:(id)aPriority; -- (void)encodeWithCoder:(NSCoder *)aCoder; -- (id)initWithCoder:(NSCoder *)aDecoder; - -@end - -@interface FPendingUpdate : NSObject <NSCoding> - -@property(nonatomic, strong) FPath *path; -@property(nonatomic, strong) NSDictionary *data; - -- (id)initWithPath:(FPath *)aPath andData:(NSDictionary *)aData; -- (void)encodeWithCoder:(NSCoder *)aCoder; -- (id)initWithCoder:(NSCoder *)aDecoder; -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPendingPut.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPendingPut.m deleted file mode 100644 index c519599..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPendingPut.m +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FPendingPut.h" - -@implementation FPendingPut - -@synthesize path; -@synthesize data; - -- (id)initWithPath:(FPath *)aPath andData:(id)aData andPriority:(id)aPriority { - self = [super init]; - if (self) { - self.path = aPath; - self.data = aData; - self.priority = aPriority; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - [aCoder encodeObject:[self.path description] forKey:@"path"]; - [aCoder encodeObject:self.data forKey:@"data"]; - [aCoder encodeObject:self.priority forKey:@"priority"]; -} - -- (id)initWithCoder:(NSCoder *)aDecoder { - self = [super init]; - if (self) { - self.path = - [[FPath alloc] initWith:[aDecoder decodeObjectForKey:@"path"]]; - self.data = [aDecoder decodeObjectForKey:@"data"]; - self.priority = [aDecoder decodeObjectForKey:@"priority"]; - } - return self; -} - -@end - -@implementation FPendingPutPriority - -@synthesize path; -@synthesize priority; - -- (id)initWithPath:(FPath *)aPath andPriority:(id)aPriority { - self = [super init]; - if (self) { - self.path = aPath; - self.priority = aPriority; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - [aCoder encodeObject:[self.path description] forKey:@"path"]; - [aCoder encodeObject:self.priority forKey:@"priority"]; -} - -- (id)initWithCoder:(NSCoder *)aDecoder { - self = [super init]; - if (self) { - self.path = - [[FPath alloc] initWith:[aDecoder decodeObjectForKey:@"path"]]; - self.priority = [aDecoder decodeObjectForKey:@"priority"]; - } - return self; -} - -@end - -@implementation FPendingUpdate - -@synthesize path; -@synthesize data; - -- (id)initWithPath:(FPath *)aPath andData:(id)aData { - self = [super init]; - if (self) { - self.path = aPath; - self.data = aData; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - [aCoder encodeObject:[self.path description] forKey:@"path"]; - [aCoder encodeObject:self.data forKey:@"data"]; -} - -- (id)initWithCoder:(NSCoder *)aDecoder { - self = [super init]; - if (self) { - self.path = - [[FPath alloc] initWith:[aDecoder decodeObjectForKey:@"path"]]; - self.data = [aDecoder decodeObjectForKey:@"data"]; - } - return self; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPersistenceManager.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPersistenceManager.h deleted file mode 100644 index 681c56d..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPersistenceManager.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import "FCacheNode.h" -#import "FCachePolicy.h" -#import "FCompoundWrite.h" -#import "FNode.h" -#import "FQuerySpec.h" -#import "FRepoInfo.h" -#import "FStorageEngine.h" - -@interface FPersistenceManager : NSObject - -- (id)initWithStorageEngine:(id<FStorageEngine>)storageEngine - cachePolicy:(id<FCachePolicy>)cachePolicy; -- (void)close; - -- (void)saveUserOverwrite:(id<FNode>)node - atPath:(FPath *)path - writeId:(NSUInteger)writeId; -- (void)saveUserMerge:(FCompoundWrite *)merge - atPath:(FPath *)path - writeId:(NSUInteger)writeId; -- (void)removeUserWrite:(NSUInteger)writeId; -- (void)removeAllUserWrites; -- (NSArray *)userWrites; - -- (FCacheNode *)serverCacheForQuery:(FQuerySpec *)spec; -- (void)updateServerCacheWithNode:(id<FNode>)node forQuery:(FQuerySpec *)spec; -- (void)updateServerCacheWithMerge:(FCompoundWrite *)merge atPath:(FPath *)path; - -- (void)applyUserWrite:(id<FNode>)write toServerCacheAtPath:(FPath *)path; -- (void)applyUserMerge:(FCompoundWrite *)merge - toServerCacheAtPath:(FPath *)path; - -- (void)setQueryComplete:(FQuerySpec *)spec; -- (void)setQueryActive:(FQuerySpec *)spec; -- (void)setQueryInactive:(FQuerySpec *)spec; - -- (void)setTrackedQueryKeys:(NSSet *)keys forQuery:(FQuerySpec *)query; -- (void)updateTrackedQueryKeysWithAddedKeys:(NSSet *)added - removedKeys:(NSSet *)removed - forQuery:(FQuerySpec *)query; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPersistenceManager.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPersistenceManager.m deleted file mode 100644 index 8924802..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPersistenceManager.m +++ /dev/null @@ -1,231 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FPersistenceManager.h" -#import "FCacheNode.h" -#import "FClock.h" -#import "FIndexedNode.h" -#import "FLevelDBStorageEngine.h" -#import "FPruneForest.h" -#import "FTrackedQuery.h" -#import "FTrackedQueryManager.h" -#import "FUtilities.h" -#import <FirebaseCore/FIRLogger.h> - -@interface FPersistenceManager () - -@property(nonatomic, strong) id<FStorageEngine> storageEngine; -@property(nonatomic, strong) id<FCachePolicy> cachePolicy; -@property(nonatomic, strong) FTrackedQueryManager *trackedQueryManager; -@property(nonatomic) NSUInteger serverCacheUpdatesSinceLastPruneCheck; - -@end - -@implementation FPersistenceManager - -- (id)initWithStorageEngine:(id<FStorageEngine>)storageEngine - cachePolicy:(id<FCachePolicy>)cachePolicy { - self = [super init]; - if (self != nil) { - self->_storageEngine = storageEngine; - self->_cachePolicy = cachePolicy; - self->_trackedQueryManager = [[FTrackedQueryManager alloc] - initWithStorageEngine:self.storageEngine - clock:[FSystemClock clock]]; - } - return self; -} - -- (void)close { - [self.storageEngine close]; - self.storageEngine = nil; - self.trackedQueryManager = nil; -} - -- (void)saveUserOverwrite:(id<FNode>)node - atPath:(FPath *)path - writeId:(NSUInteger)writeId { - [self.storageEngine saveUserOverwrite:node atPath:path writeId:writeId]; -} - -- (void)saveUserMerge:(FCompoundWrite *)merge - atPath:(FPath *)path - writeId:(NSUInteger)writeId { - [self.storageEngine saveUserMerge:merge atPath:path writeId:writeId]; -} - -- (void)removeUserWrite:(NSUInteger)writeId { - [self.storageEngine removeUserWrite:writeId]; -} - -- (void)removeAllUserWrites { - [self.storageEngine removeAllUserWrites]; -} - -- (NSArray *)userWrites { - return [self.storageEngine userWrites]; -} - -- (FCacheNode *)serverCacheForQuery:(FQuerySpec *)query { - NSSet *trackedKeys; - BOOL complete; - // TODO[offline]: Should we use trackedKeys to find out if this location is - // a child of a complete query? - if ([self.trackedQueryManager isQueryComplete:query]) { - complete = YES; - FTrackedQuery *trackedQuery = - [self.trackedQueryManager findTrackedQuery:query]; - if (!query.loadsAllData && trackedQuery.isComplete) { - trackedKeys = [self.storageEngine - trackedQueryKeysForQuery:trackedQuery.queryId]; - } else { - trackedKeys = nil; - } - } else { - complete = NO; - trackedKeys = - [self.trackedQueryManager knownCompleteChildrenAtPath:query.path]; - } - - id<FNode> node; - if (trackedKeys != nil) { - node = [self.storageEngine serverCacheForKeys:trackedKeys - atPath:query.path]; - } else { - node = [self.storageEngine serverCacheAtPath:query.path]; - } - - FIndexedNode *indexedNode = [FIndexedNode indexedNodeWithNode:node - index:query.index]; - return [[FCacheNode alloc] initWithIndexedNode:indexedNode - isFullyInitialized:complete - isFiltered:(trackedKeys != nil)]; -} - -- (void)updateServerCacheWithNode:(id<FNode>)node forQuery:(FQuerySpec *)query { - BOOL merge = !query.loadsAllData; - [self.storageEngine updateServerCache:node atPath:query.path merge:merge]; - [self setQueryComplete:query]; - [self doPruneCheckAfterServerUpdate]; -} - -- (void)updateServerCacheWithMerge:(FCompoundWrite *)merge - atPath:(FPath *)path { - [self.storageEngine updateServerCacheWithMerge:merge atPath:path]; - [self doPruneCheckAfterServerUpdate]; -} - -- (void)applyUserMerge:(FCompoundWrite *)merge - toServerCacheAtPath:(FPath *)path { - // TODO[offline]: rework this to be more efficient - [merge enumerateWrites:^(FPath *relativePath, id<FNode> node, BOOL *stop) { - [self applyUserWrite:node toServerCacheAtPath:[path child:relativePath]]; - }]; -} - -- (void)applyUserWrite:(id<FNode>)write toServerCacheAtPath:(FPath *)path { - // This is a hack to guess whether we already cached this because we got a - // server data update for this write via an existing active default query. - // If we didn't, then we'll manually cache this and add a tracked query to - // mark it complete and keep it cached. Unfortunately this is just a guess - // and it's possible that we *did* get an update (e.g. via a filtered query) - // and by overwriting the cache here, we'll actually store an incorrect - // value (e.g. in the case that we wrote a ServerValue.TIMESTAMP and the - // server resolved it to a different value). - // TODO[offline]: Consider reworking. - if (![self.trackedQueryManager hasActiveDefaultQueryAtPath:path]) { - [self.storageEngine updateServerCache:write atPath:path merge:NO]; - [self.trackedQueryManager ensureCompleteTrackedQueryAtPath:path]; - } -} - -- (void)setQueryComplete:(FQuerySpec *)query { - if (query.loadsAllData) { - [self.trackedQueryManager setQueriesCompleteAtPath:query.path]; - } else { - [self.trackedQueryManager setQueryComplete:query]; - } -} - -- (void)setQueryActive:(FQuerySpec *)spec { - [self.trackedQueryManager setQueryActive:spec]; -} - -- (void)setQueryInactive:(FQuerySpec *)spec { - [self.trackedQueryManager setQueryInactive:spec]; -} - -- (void)doPruneCheckAfterServerUpdate { - self.serverCacheUpdatesSinceLastPruneCheck++; - if ([self.cachePolicy - shouldCheckCacheSize:self.serverCacheUpdatesSinceLastPruneCheck]) { - FFDebug(@"I-RDB078001", @"Reached prune check threshold. Checking..."); - NSDate *date = [NSDate date]; - self.serverCacheUpdatesSinceLastPruneCheck = 0; - BOOL canPrune = YES; - NSUInteger cacheSize = - [self.storageEngine serverCacheEstimatedSizeInBytes]; - FFDebug(@"I-RDB078002", @"Server cache size: %lu", - (unsigned long)cacheSize); - while (canPrune && - [self.cachePolicy - shouldPruneCacheWithSize:cacheSize - numberOfTrackedQueries:self.trackedQueryManager - .numberOfPrunableQueries]) { - FPruneForest *pruneForest = - [self.trackedQueryManager pruneOldQueries:self.cachePolicy]; - if (pruneForest.prunesAnything) { - [self.storageEngine pruneCache:pruneForest - atPath:[FPath empty]]; - } else { - canPrune = NO; - } - cacheSize = [self.storageEngine serverCacheEstimatedSizeInBytes]; - FFDebug(@"I-RDB078003", @"Cache size after pruning: %lu", - (unsigned long)cacheSize); - } - FFDebug(@"I-RDB078004", @"Pruning round took %fms", - [date timeIntervalSinceNow] * -1000); - } -} - -- (void)setTrackedQueryKeys:(NSSet *)keys forQuery:(FQuerySpec *)query { - NSAssert(!query.loadsAllData, - @"We should only track keys for filtered queries"); - FTrackedQuery *trackedQuery = - [self.trackedQueryManager findTrackedQuery:query]; - NSAssert(trackedQuery.isActive, - @"We only expect tracked keys for currently-active queries."); - [self.storageEngine setTrackedQueryKeys:keys - forQueryId:trackedQuery.queryId]; -} - -- (void)updateTrackedQueryKeysWithAddedKeys:(NSSet *)added - removedKeys:(NSSet *)removed - forQuery:(FQuerySpec *)query { - NSAssert(!query.loadsAllData, - @"We should only track keys for filtered queries"); - FTrackedQuery *trackedQuery = - [self.trackedQueryManager findTrackedQuery:query]; - NSAssert(trackedQuery.isActive, - @"We only expect tracked keys for currently-active queries."); - [self.storageEngine - updateTrackedQueryKeysWithAddedKeys:added - removedKeys:removed - forQueryId:trackedQuery.queryId]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPruneForest.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPruneForest.h deleted file mode 100644 index 9e77217..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPruneForest.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@class FPath; - -@interface FPruneForest : NSObject - -+ (FPruneForest *)empty; - -- (BOOL)prunesAnything; -- (BOOL)shouldPruneUnkeptDescendantsAtPath:(FPath *)path; -- (BOOL)shouldKeepPath:(FPath *)path; -- (BOOL)affectsPath:(FPath *)path; -- (FPruneForest *)child:(NSString *)childKey; -- (FPruneForest *)childAtPath:(FPath *)childKey; -- (FPruneForest *)prunePath:(FPath *)path; -- (FPruneForest *)keepPath:(FPath *)path; -- (FPruneForest *)keepAll:(NSSet *)children atPath:(FPath *)path; -- (FPruneForest *)pruneAll:(NSSet *)children atPath:(FPath *)path; - -- (void)enumarateKeptNodesUsingBlock:(void (^)(FPath *path))block; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPruneForest.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPruneForest.m deleted file mode 100644 index e795c69..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FPruneForest.m +++ /dev/null @@ -1,194 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FPruneForest.h" - -#import "FImmutableTree.h" - -@interface FPruneForest () - -@property(nonatomic, strong) FImmutableTree *pruneForest; - -@end - -@implementation FPruneForest - -static BOOL (^kFPrunePredicate)(id) = ^BOOL(NSNumber *pruneValue) { - return [pruneValue boolValue]; -}; - -static BOOL (^kFKeepPredicate)(id) = ^BOOL(NSNumber *pruneValue) { - return ![pruneValue boolValue]; -}; - -+ (FImmutableTree *)pruneTree { - static dispatch_once_t onceToken; - static FImmutableTree *pruneTree; - dispatch_once(&onceToken, ^{ - pruneTree = [[FImmutableTree alloc] initWithValue:@YES]; - }); - return pruneTree; -} - -+ (FImmutableTree *)keepTree { - static dispatch_once_t onceToken; - static FImmutableTree *keepTree; - dispatch_once(&onceToken, ^{ - keepTree = [[FImmutableTree alloc] initWithValue:@NO]; - }); - return keepTree; -} - -- (id)initWithForest:(FImmutableTree *)tree { - self = [super init]; - if (self != nil) { - self->_pruneForest = tree; - } - return self; -} - -+ (FPruneForest *)empty { - static dispatch_once_t onceToken; - static FPruneForest *forest; - dispatch_once(&onceToken, ^{ - forest = [[FPruneForest alloc] initWithForest:[FImmutableTree empty]]; - }); - return forest; -} - -- (BOOL)prunesAnything { - return [self.pruneForest containsValueMatching:kFPrunePredicate]; -} - -- (BOOL)shouldPruneUnkeptDescendantsAtPath:(FPath *)path { - NSNumber *shouldPrune = [self.pruneForest leafMostValueOnPath:path]; - return shouldPrune != nil && [shouldPrune boolValue]; -} - -- (BOOL)shouldKeepPath:(FPath *)path { - NSNumber *shouldPrune = [self.pruneForest leafMostValueOnPath:path]; - return shouldPrune != nil && ![shouldPrune boolValue]; -} - -- (BOOL)affectsPath:(FPath *)path { - return [self.pruneForest rootMostValueOnPath:path] != nil || - ![[self.pruneForest subtreeAtPath:path] isEmpty]; -} - -- (FPruneForest *)child:(NSString *)childKey { - FImmutableTree *childPruneForest = [self.pruneForest.children get:childKey]; - if (childPruneForest == nil) { - if (self.pruneForest.value != nil) { - childPruneForest = [self.pruneForest.value boolValue] - ? [FPruneForest pruneTree] - : [FPruneForest keepTree]; - } else { - childPruneForest = [FImmutableTree empty]; - } - } else { - if (childPruneForest.value == nil && self.pruneForest.value != nil) { - childPruneForest = [childPruneForest setValue:self.pruneForest.value - atPath:[FPath empty]]; - } - } - return [[FPruneForest alloc] initWithForest:childPruneForest]; -} - -- (FPruneForest *)childAtPath:(FPath *)path { - if (path.isEmpty) { - return self; - } else { - return [[self child:path.getFront] childAtPath:[path popFront]]; - } -} - -- (FPruneForest *)prunePath:(FPath *)path { - if ([self.pruneForest rootMostValueOnPath:path matching:kFKeepPredicate]) { - [NSException raise:NSInvalidArgumentException - format:@"Can't prune path that was kept previously!"]; - } - if ([self.pruneForest rootMostValueOnPath:path matching:kFPrunePredicate]) { - // This path will already be pruned - return self; - } else { - FImmutableTree *newPruneForest = - [self.pruneForest setTree:[FPruneForest pruneTree] atPath:path]; - return [[FPruneForest alloc] initWithForest:newPruneForest]; - } -} - -- (FPruneForest *)keepPath:(FPath *)path { - if ([self.pruneForest rootMostValueOnPath:path matching:kFKeepPredicate]) { - // This path will already be kept - return self; - } else { - FImmutableTree *newPruneForest = - [self.pruneForest setTree:[FPruneForest keepTree] atPath:path]; - return [[FPruneForest alloc] initWithForest:newPruneForest]; - } -} - -- (FPruneForest *)keepAll:(NSSet *)children atPath:(FPath *)path { - if ([self.pruneForest rootMostValueOnPath:path matching:kFKeepPredicate]) { - // This path will already be kept - return self; - } else { - return [self setPruneValue:[FPruneForest keepTree] - forAll:children - atPath:path]; - } -} - -- (FPruneForest *)pruneAll:(NSSet *)children atPath:(FPath *)path { - if ([self.pruneForest rootMostValueOnPath:path matching:kFKeepPredicate]) { - [NSException raise:NSInvalidArgumentException - format:@"Can't prune path that was kept previously!"]; - } - if ([self.pruneForest rootMostValueOnPath:path matching:kFPrunePredicate]) { - // This path will already be pruned - return self; - } else { - return [self setPruneValue:[FPruneForest pruneTree] - forAll:children - atPath:path]; - } -} - -- (FPruneForest *)setPruneValue:(FImmutableTree *)pruneValue - forAll:(NSSet *)children - atPath:(FPath *)path { - FImmutableTree *subtree = [self.pruneForest subtreeAtPath:path]; - __block FImmutableSortedDictionary *childrenDictionary = subtree.children; - [children enumerateObjectsUsingBlock:^(NSString *childKey, BOOL *stop) { - childrenDictionary = [childrenDictionary insertKey:childKey - withValue:pruneValue]; - }]; - FImmutableTree *newSubtree = - [[FImmutableTree alloc] initWithValue:subtree.value - children:childrenDictionary]; - return [[FPruneForest alloc] - initWithForest:[self.pruneForest setTree:newSubtree atPath:path]]; -} - -- (void)enumarateKeptNodesUsingBlock:(void (^)(FPath *))block { - [self.pruneForest forEach:^(FPath *path, id value) { - if (value != nil && ![value boolValue]) { - block(path); - } - }]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FStorageEngine.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FStorageEngine.h deleted file mode 100644 index 5f418b8..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FStorageEngine.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@protocol FNode; -@class FPruneForest; -@class FPath; -@class FCompoundWrite; -@class FQuerySpec; -@class FTrackedQuery; - -@protocol FStorageEngine <NSObject> - -- (void)close; - -- (void)saveUserOverwrite:(id<FNode>)node - atPath:(FPath *)path - writeId:(NSUInteger)writeId; -- (void)saveUserMerge:(FCompoundWrite *)merge - atPath:(FPath *)path - writeId:(NSUInteger)writeId; -- (void)removeUserWrite:(NSUInteger)writeId; -- (void)removeAllUserWrites; -- (NSArray *)userWrites; - -- (id<FNode>)serverCacheAtPath:(FPath *)path; -- (id<FNode>)serverCacheForKeys:(NSSet *)keys atPath:(FPath *)path; -- (void)updateServerCache:(id<FNode>)node - atPath:(FPath *)path - merge:(BOOL)merge; -- (void)updateServerCacheWithMerge:(FCompoundWrite *)merge atPath:(FPath *)path; -- (NSUInteger)serverCacheEstimatedSizeInBytes; - -- (void)pruneCache:(FPruneForest *)pruneForest atPath:(FPath *)path; - -- (NSArray *)loadTrackedQueries; -- (void)removeTrackedQuery:(NSUInteger)queryId; -- (void)saveTrackedQuery:(FTrackedQuery *)query; - -- (void)setTrackedQueryKeys:(NSSet *)keys forQueryId:(NSUInteger)queryId; -- (void)updateTrackedQueryKeysWithAddedKeys:(NSSet *)added - removedKeys:(NSSet *)removed - forQueryId:(NSUInteger)queryId; -- (NSSet *)trackedQueryKeysForQuery:(NSUInteger)queryId; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQuery.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQuery.h deleted file mode 100644 index 7413816..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQuery.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@class FQuerySpec; - -@interface FTrackedQuery : NSObject - -@property(nonatomic, readonly) NSUInteger queryId; -@property(nonatomic, strong, readonly) FQuerySpec *query; -@property(nonatomic, readonly) NSTimeInterval lastUse; -@property(nonatomic, readonly) BOOL isComplete; -@property(nonatomic, readonly) BOOL isActive; - -- (id)initWithId:(NSUInteger)queryId - query:(FQuerySpec *)query - lastUse:(NSTimeInterval)lastUse - isActive:(BOOL)isActive; -- (id)initWithId:(NSUInteger)queryId - query:(FQuerySpec *)query - lastUse:(NSTimeInterval)lastUse - isActive:(BOOL)isActive - isComplete:(BOOL)isComplete; - -- (FTrackedQuery *)updateLastUse:(NSTimeInterval)lastUse; -- (FTrackedQuery *)setComplete; -- (FTrackedQuery *)setActiveState:(BOOL)isActive; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQuery.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQuery.m deleted file mode 100644 index 6ca7ec0..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQuery.m +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTrackedQuery.h" - -#import "FQuerySpec.h" - -@interface FTrackedQuery () - -@property(nonatomic, readwrite) NSUInteger queryId; -@property(nonatomic, strong, readwrite) FQuerySpec *query; -@property(nonatomic, readwrite) NSTimeInterval lastUse; -@property(nonatomic, readwrite) BOOL isComplete; -@property(nonatomic, readwrite) BOOL isActive; - -@end - -@implementation FTrackedQuery - -- (id)initWithId:(NSUInteger)queryId - query:(FQuerySpec *)query - lastUse:(NSTimeInterval)lastUse - isActive:(BOOL)isActive - isComplete:(BOOL)isComplete { - self = [super init]; - if (self != nil) { - self->_queryId = queryId; - self->_query = query; - self->_lastUse = lastUse; - self->_isComplete = isComplete; - self->_isActive = isActive; - } - return self; -} - -- (id)initWithId:(NSUInteger)queryId - query:(FQuerySpec *)query - lastUse:(NSTimeInterval)lastUse - isActive:(BOOL)isActive { - return [self initWithId:queryId - query:query - lastUse:lastUse - isActive:isActive - isComplete:NO]; -} - -- (FTrackedQuery *)updateLastUse:(NSTimeInterval)lastUse { - return [[FTrackedQuery alloc] initWithId:self.queryId - query:self.query - lastUse:lastUse - isActive:self.isActive - isComplete:self.isComplete]; -} - -- (FTrackedQuery *)setComplete { - return [[FTrackedQuery alloc] initWithId:self.queryId - query:self.query - lastUse:self.lastUse - isActive:self.isActive - isComplete:YES]; -} - -- (FTrackedQuery *)setActiveState:(BOOL)isActive { - return [[FTrackedQuery alloc] initWithId:self.queryId - query:self.query - lastUse:self.lastUse - isActive:isActive - isComplete:self.isComplete]; -} - -- (BOOL)isEqual:(id)object { - if (![object isKindOfClass:[FTrackedQuery class]]) { - return NO; - } - FTrackedQuery *other = (FTrackedQuery *)object; - if (self.queryId != other.queryId) - return NO; - if (self.query != other.query && ![self.query isEqual:other.query]) - return NO; - if (self.lastUse != other.lastUse) - return NO; - if (self.isComplete != other.isComplete) - return NO; - if (self.isActive != other.isActive) - return NO; - - return YES; -} - -- (NSUInteger)hash { - NSUInteger hash = self.queryId; - hash = hash * 31 + self.query.hash; - hash = hash * 31 + (self.isActive ? 1 : 0); - hash = hash * 31 + (NSUInteger)self.lastUse; - hash = hash * 31 + (self.isComplete ? 1 : 0); - hash = hash * 31 + (self.isActive ? 1 : 0); - return hash; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQueryManager.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQueryManager.h deleted file mode 100644 index cd7d5a1..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQueryManager.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@protocol FStorageEngine; -@protocol FClock; -@protocol FCachePolicy; -@class FQuerySpec; -@class FPath; -@class FTrackedQuery; -@class FPruneForest; - -@interface FTrackedQueryManager : NSObject - -- (id)initWithStorageEngine:(id<FStorageEngine>)storageEngine - clock:(id<FClock>)clock; - -- (FTrackedQuery *)findTrackedQuery:(FQuerySpec *)query; - -- (BOOL)isQueryComplete:(FQuerySpec *)query; - -- (void)removeTrackedQuery:(FQuerySpec *)query; -- (void)setQueryComplete:(FQuerySpec *)query; -- (void)setQueriesCompleteAtPath:(FPath *)path; -- (void)setQueryActive:(FQuerySpec *)query; -- (void)setQueryInactive:(FQuerySpec *)query; - -- (BOOL)hasActiveDefaultQueryAtPath:(FPath *)path; -- (void)ensureCompleteTrackedQueryAtPath:(FPath *)path; - -- (FPruneForest *)pruneOldQueries:(id<FCachePolicy>)cachePolicy; -- (NSUInteger)numberOfPrunableQueries; -- (NSSet *)knownCompleteChildrenAtPath:(FPath *)path; - -// For testing -- (void)verifyCache; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQueryManager.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQueryManager.m deleted file mode 100644 index 26accaf..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Persistence/FTrackedQueryManager.m +++ /dev/null @@ -1,375 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTrackedQueryManager.h" -#import "FCachePolicy.h" -#import "FClock.h" -#import "FImmutableTree.h" -#import "FLevelDBStorageEngine.h" -#import "FPruneForest.h" -#import "FTrackedQuery.h" -#import "FUtilities.h" -#import <FirebaseCore/FIRLogger.h> - -@interface FTrackedQueryManager () - -@property(nonatomic, strong) FImmutableTree *trackedQueryTree; -@property(nonatomic, strong) id<FStorageEngine> storageEngine; -@property(nonatomic, strong) id<FClock> clock; -@property(nonatomic) NSUInteger currentQueryId; - -@end - -@implementation FTrackedQueryManager - -- (id)initWithStorageEngine:(id<FStorageEngine>)storageEngine - clock:(id<FClock>)clock { - self = [super init]; - if (self != nil) { - self->_storageEngine = storageEngine; - self->_clock = clock; - self->_trackedQueryTree = [FImmutableTree empty]; - - NSTimeInterval lastUse = [clock currentTime]; - - NSArray *trackedQueries = [self.storageEngine loadTrackedQueries]; - [trackedQueries enumerateObjectsUsingBlock:^( - FTrackedQuery *trackedQuery, NSUInteger idx, - BOOL *stop) { - self.currentQueryId = - MAX(trackedQuery.queryId + 1, self.currentQueryId); - if (trackedQuery.isActive) { - trackedQuery = - [[trackedQuery setActiveState:NO] updateLastUse:lastUse]; - FFDebug( - @"I-RDB081001", - @"Setting active query %lu from previous app start inactive", - (unsigned long)trackedQuery.queryId); - [self.storageEngine saveTrackedQuery:trackedQuery]; - } - [self cacheTrackedQuery:trackedQuery]; - }]; - } - return self; -} - -+ (void)assertValidTrackedQuery:(FQuerySpec *)query { - NSAssert(!query.loadsAllData || query.isDefault, - @"Can't have tracked non-default query that loads all data"); -} - -+ (FQuerySpec *)normalizeQuery:(FQuerySpec *)query { - return query.loadsAllData ? [FQuerySpec defaultQueryAtPath:query.path] - : query; -} - -- (FTrackedQuery *)findTrackedQuery:(FQuerySpec *)query { - query = [FTrackedQueryManager normalizeQuery:query]; - NSDictionary *set = [self.trackedQueryTree valueAtPath:query.path]; - return set[query.params]; -} - -- (void)removeTrackedQuery:(FQuerySpec *)query { - query = [FTrackedQueryManager normalizeQuery:query]; - FTrackedQuery *trackedQuery = [self findTrackedQuery:query]; - NSAssert(trackedQuery, @"Tracked query must exist to be removed!"); - - [self.storageEngine removeTrackedQuery:trackedQuery.queryId]; - NSMutableDictionary *trackedQueries = - [self.trackedQueryTree valueAtPath:query.path]; - [trackedQueries removeObjectForKey:query.params]; -} - -- (void)setQueryActive:(FQuerySpec *)query { - [self setQueryActive:YES forQuery:query]; -} - -- (void)setQueryInactive:(FQuerySpec *)query { - [self setQueryActive:NO forQuery:query]; -} - -- (void)setQueryActive:(BOOL)isActive forQuery:(FQuerySpec *)query { - query = [FTrackedQueryManager normalizeQuery:query]; - FTrackedQuery *trackedQuery = [self findTrackedQuery:query]; - - // Regardless of whether it's now active or no langer active, we update the - // lastUse time - NSTimeInterval lastUse = [self.clock currentTime]; - if (trackedQuery != nil) { - trackedQuery = - [[trackedQuery updateLastUse:lastUse] setActiveState:isActive]; - [self.storageEngine saveTrackedQuery:trackedQuery]; - } else { - NSAssert(isActive, @"If we're setting the query to inactive, we should " - @"already be tracking it!"); - trackedQuery = [[FTrackedQuery alloc] initWithId:self.currentQueryId++ - query:query - lastUse:lastUse - isActive:isActive]; - [self.storageEngine saveTrackedQuery:trackedQuery]; - } - - [self cacheTrackedQuery:trackedQuery]; -} - -- (void)setQueryComplete:(FQuerySpec *)query { - query = [FTrackedQueryManager normalizeQuery:query]; - FTrackedQuery *trackedQuery = [self findTrackedQuery:query]; - if (!trackedQuery) { - // We might have removed a query and pruned it before we got the - // complete message from the server... - FFWarn(@"I-RDB081002", - @"Trying to set a query complete that is not tracked!"); - } else if (!trackedQuery.isComplete) { - trackedQuery = [trackedQuery setComplete]; - [self.storageEngine saveTrackedQuery:trackedQuery]; - [self cacheTrackedQuery:trackedQuery]; - } else { - // Nothing to do, already marked complete - } -} - -- (void)setQueriesCompleteAtPath:(FPath *)path { - [[self.trackedQueryTree subtreeAtPath:path] - forEach:^(FPath *childPath, NSDictionary *trackedQueries) { - [trackedQueries enumerateKeysAndObjectsUsingBlock:^( - FQueryParams *parms, FTrackedQuery *trackedQuery, - BOOL *stop) { - if (!trackedQuery.isComplete) { - FTrackedQuery *newTrackedQuery = [trackedQuery setComplete]; - [self.storageEngine saveTrackedQuery:newTrackedQuery]; - [self cacheTrackedQuery:newTrackedQuery]; - } - }]; - }]; -} - -- (BOOL)isQueryComplete:(FQuerySpec *)query { - if ([self isIncludedInDefaultCompleteQuery:query]) { - return YES; - } else if (query.loadsAllData) { - // We didn't find a default complete query, so must not be complete. - return NO; - } else { - NSDictionary *trackedQueries = - [self.trackedQueryTree valueAtPath:query.path]; - return [trackedQueries[query.params] isComplete]; - } -} - -- (BOOL)hasActiveDefaultQueryAtPath:(FPath *)path { - return [self.trackedQueryTree - rootMostValueOnPath:path - matching:^BOOL(NSDictionary *trackedQueries) { - return - [trackedQueries[[FQueryParams defaultInstance]] - isActive]; - }] != nil; -} - -- (void)ensureCompleteTrackedQueryAtPath:(FPath *)path { - FQuerySpec *query = [FQuerySpec defaultQueryAtPath:path]; - if (![self isIncludedInDefaultCompleteQuery:query]) { - FTrackedQuery *trackedQuery = [self findTrackedQuery:query]; - if (trackedQuery == nil) { - trackedQuery = - [[FTrackedQuery alloc] initWithId:self.currentQueryId++ - query:query - lastUse:[self.clock currentTime] - isActive:NO - isComplete:YES]; - } else { - NSAssert(!trackedQuery.isComplete, - @"This should have been handled above!"); - trackedQuery = [trackedQuery setComplete]; - } - [self.storageEngine saveTrackedQuery:trackedQuery]; - [self cacheTrackedQuery:trackedQuery]; - } -} - -- (BOOL)isIncludedInDefaultCompleteQuery:(FQuerySpec *)query { - return - [self.trackedQueryTree - findRootMostMatchingPath:query.path - predicate:^BOOL(NSDictionary *trackedQueries) { - return - [trackedQueries[[FQueryParams defaultInstance]] - isComplete]; - }] != nil; -} - -- (void)cacheTrackedQuery:(FTrackedQuery *)query { - [FTrackedQueryManager assertValidTrackedQuery:query.query]; - NSMutableDictionary *trackedDict = - [self.trackedQueryTree valueAtPath:query.query.path]; - if (trackedDict == nil) { - trackedDict = [NSMutableDictionary dictionary]; - self.trackedQueryTree = - [self.trackedQueryTree setValue:trackedDict - atPath:query.query.path]; - } - trackedDict[query.query.params] = query; -} - -- (NSUInteger)numberOfQueriesToPrune:(id<FCachePolicy>)cachePolicy - prunableCount:(NSUInteger)numPrunable { - NSUInteger numPercent = (NSUInteger)ceilf( - numPrunable * [cachePolicy percentOfQueriesToPruneAtOnce]); - NSUInteger maxToKeep = [cachePolicy maxNumberOfQueriesToKeep]; - NSUInteger numMax = (numPrunable > maxToKeep) ? numPrunable - maxToKeep : 0; - // Make sure we get below number of max queries to prune - return MAX(numMax, numPercent); -} - -- (FPruneForest *)pruneOldQueries:(id<FCachePolicy>)cachePolicy { - NSMutableArray *pruneableQueries = [NSMutableArray array]; - NSMutableArray *unpruneableQueries = [NSMutableArray array]; - [self.trackedQueryTree - forEach:^(FPath *path, NSDictionary *trackedQueries) { - [trackedQueries enumerateKeysAndObjectsUsingBlock:^( - FQueryParams *params, FTrackedQuery *trackedQuery, - BOOL *stop) { - if (!trackedQuery.isActive) { - [pruneableQueries addObject:trackedQuery]; - } else { - [unpruneableQueries addObject:trackedQuery]; - } - }]; - }]; - [pruneableQueries sortUsingComparator:^NSComparisonResult( - FTrackedQuery *q1, FTrackedQuery *q2) { - if (q1.lastUse < q2.lastUse) { - return NSOrderedAscending; - } else if (q1.lastUse > q2.lastUse) { - return NSOrderedDescending; - } else { - return NSOrderedSame; - } - }]; - - __block FPruneForest *pruneForest = [FPruneForest empty]; - NSUInteger numToPrune = - [self numberOfQueriesToPrune:cachePolicy - prunableCount:pruneableQueries.count]; - - // TODO: do in transaction - for (NSUInteger i = 0; i < numToPrune; i++) { - FTrackedQuery *toPrune = pruneableQueries[i]; - pruneForest = [pruneForest prunePath:toPrune.query.path]; - [self removeTrackedQuery:toPrune.query]; - } - - // Keep the rest of the prunable queries - for (NSUInteger i = numToPrune; i < pruneableQueries.count; i++) { - FTrackedQuery *toKeep = pruneableQueries[i]; - pruneForest = [pruneForest keepPath:toKeep.query.path]; - } - - // Also keep unprunable queries - [unpruneableQueries enumerateObjectsUsingBlock:^( - FTrackedQuery *toKeep, NSUInteger idx, BOOL *stop) { - pruneForest = [pruneForest keepPath:toKeep.query.path]; - }]; - - return pruneForest; -} - -- (NSUInteger)numberOfPrunableQueries { - __block NSUInteger count = 0; - [self.trackedQueryTree - forEach:^(FPath *path, NSDictionary *trackedQueries) { - [trackedQueries enumerateKeysAndObjectsUsingBlock:^( - FQueryParams *params, FTrackedQuery *trackedQuery, - BOOL *stop) { - if (!trackedQuery.isActive) { - count++; - } - }]; - }]; - return count; -} - -- (NSSet *)filteredQueryIdsAtPath:(FPath *)path { - NSDictionary *queries = [self.trackedQueryTree valueAtPath:path]; - if (queries) { - NSMutableSet *ids = [NSMutableSet set]; - [queries enumerateKeysAndObjectsUsingBlock:^( - FQueryParams *params, FTrackedQuery *query, BOOL *stop) { - if (!query.query.loadsAllData) { - [ids addObject:@(query.queryId)]; - } - }]; - return ids; - } else { - return [NSSet set]; - } -} - -- (NSSet *)knownCompleteChildrenAtPath:(FPath *)path { - NSAssert(![self isQueryComplete:[FQuerySpec defaultQueryAtPath:path]], - @"Path is fully complete"); - - NSMutableSet *completeChildren = [NSMutableSet set]; - // First, get complete children from any queries at this location. - NSSet *queryIds = [self filteredQueryIdsAtPath:path]; - [queryIds enumerateObjectsUsingBlock:^(NSNumber *queryId, BOOL *stop) { - NSSet *keys = [self.storageEngine - trackedQueryKeysForQuery:[queryId unsignedIntegerValue]]; - [completeChildren unionSet:keys]; - }]; - - // Second, get any complete default queries immediately below us. - [[[self.trackedQueryTree subtreeAtPath:path] children] - enumerateKeysAndObjectsUsingBlock:^( - NSString *childKey, FImmutableTree *childTree, BOOL *stop) { - if ([childTree.value[[FQueryParams defaultInstance]] isComplete]) { - [completeChildren addObject:childKey]; - } - }]; - - return completeChildren; -} - -- (void)verifyCache { - NSArray *storedTrackedQueries = [self.storageEngine loadTrackedQueries]; - NSMutableArray *trackedQueries = [NSMutableArray array]; - - [self.trackedQueryTree forEach:^(FPath *path, NSDictionary *queryDict) { - [trackedQueries addObjectsFromArray:queryDict.allValues]; - }]; - NSComparator comparator = - ^NSComparisonResult(FTrackedQuery *q1, FTrackedQuery *q2) { - if (q1.queryId < q2.queryId) { - return NSOrderedAscending; - } else if (q1.queryId > q2.queryId) { - return NSOrderedDescending; - } else { - return NSOrderedSame; - } - }; - [trackedQueries sortUsingComparator:comparator]; - storedTrackedQueries = - [storedTrackedQueries sortedArrayUsingComparator:comparator]; - - if (![trackedQueries isEqualToArray:storedTrackedQueries]) { - [NSException - raise:NSInternalInconsistencyException - format:@"Tracked queries and queries stored on disk don't match"]; - } -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDataEventType.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDataEventType.h deleted file mode 100644 index 3aecd81..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDataEventType.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef Firebase_FIRDataEventType_h -#define Firebase_FIRDataEventType_h - -#import <Foundation/Foundation.h> - -/** - * This enum is the set of events that you can observe at a Firebase Database - * location. - */ -typedef NS_ENUM(NSInteger, FIRDataEventType) { - /// A new child node is added to a location. - FIRDataEventTypeChildAdded, - /// A child node is removed from a location. - FIRDataEventTypeChildRemoved, - /// A child node at a location changes. - FIRDataEventTypeChildChanged, - /// A child node moves relative to the other child nodes at a location. - FIRDataEventTypeChildMoved, - /// Any data changes at a location or, recursively, at any child node. - FIRDataEventTypeValue -} NS_SWIFT_NAME(DataEventType); - -#endif diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDataSnapshot.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDataSnapshot.h deleted file mode 100644 index e88febb..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDataSnapshot.h +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -@class FIRDatabaseReference; - -/** - * A FIRDataSnapshot contains data from a Firebase Database location. Any time - * you read Firebase data, you receive the data as a FIRDataSnapshot. - * - * FIRDataSnapshots are passed to the blocks you attach with - * observeEventType:withBlock: or observeSingleEvent:withBlock:. They are - * efficiently-generated immutable copies of the data at a Firebase Database - * location. They can't be modified and will never change. To modify data at a - * location, use a FIRDatabaseReference (e.g. with setValue:). - */ -NS_SWIFT_NAME(DataSnapshot) -@interface FIRDataSnapshot : NSObject - -#pragma mark - Navigating and inspecting a snapshot - -/** - * Gets a FIRDataSnapshot for the location at the specified relative path. - * The relative path can either be a simple child key (e.g. 'fred') - * or a deeper slash-separated path (e.g. 'fred/name/first'). If the child - * location has no data, an empty FIRDataSnapshot is returned. - * - * @param childPathString A relative path to the location of child data. - * @return The FIRDataSnapshot for the child location. - */ -- (FIRDataSnapshot *)childSnapshotForPath:(NSString *)childPathString; - -/** - * Return YES if the specified child exists. - * - * @param childPathString A relative path to the location of a potential child. - * @return YES if data exists at the specified childPathString, else NO. - */ -- (BOOL)hasChild:(NSString *)childPathString; - -/** - * Return YES if the DataSnapshot has any children. - * - * @return YES if this snapshot has any children, else NO. - */ -- (BOOL)hasChildren; - -/** - * Return YES if the DataSnapshot contains a non-null value. - * - * @return YES if this snapshot contains a non-null value, else NO. - */ -- (BOOL)exists; - -#pragma mark - Data export - -/** - * Returns the raw value at this location, coupled with any metadata, such as - * priority. - * - * Priorities, where they exist, are accessible under the ".priority" key in - * instances of NSDictionary. For leaf locations with priorities, the value will - * be under the ".value" key. - */ -- (id __nullable)valueInExportFormat; - -#pragma mark - Properties - -/** - * Returns the contents of this data snapshot as native types. - * - * Data types returned: - * + NSDictionary - * + NSArray - * + NSNumber (also includes booleans) - * + NSString - * - * @return The data as a native object. - */ -@property(strong, readonly, nonatomic, nullable) id value; - -/** - * Gets the number of children for this DataSnapshot. - * - * @return An integer indicating the number of children. - */ -@property(readonly, nonatomic) NSUInteger childrenCount; - -/** - * Gets a FIRDatabaseReference for the location that this data came from. - * - * @return A FIRDatabaseReference instance for the location of this data. - */ -@property(nonatomic, readonly, strong) FIRDatabaseReference *ref; - -/** - * The key of the location that generated this FIRDataSnapshot. - * - * @return An NSString containing the key for the location of this - * FIRDataSnapshot. - */ -@property(strong, readonly, nonatomic) NSString *key; - -/** - * An iterator for snapshots of the child nodes in this snapshot. - * You can use the native for..in syntax: - * - * for (FIRDataSnapshot* child in snapshot.children) { - * ... - * } - * - * @return An NSEnumerator of the children. - */ -@property(strong, readonly, nonatomic) - NSEnumerator<FIRDataSnapshot *> *children; - -/** - * The priority of the data in this FIRDataSnapshot. - * - * @return The priority as a string, or nil if no priority was set. - */ -@property(strong, readonly, nonatomic, nullable) id priority; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabase.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabase.h deleted file mode 100644 index 02af8c7..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabase.h +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRDatabaseReference.h" -#import <Foundation/Foundation.h> - -@class FIRApp; - -NS_ASSUME_NONNULL_BEGIN - -/** - * The entry point for accessing a Firebase Database. You can get an instance - * by calling [FIRDatabase database]. To access a location in the database and - * read or write data, use [FIRDatabase reference]. - */ -NS_SWIFT_NAME(Database) -@interface FIRDatabase : NSObject - -/** - * The NSObject initializer that has been marked as unavailable. Use the - * `database` method instead - * - * @return An instancetype instance - */ -- (instancetype)init - __attribute__((unavailable("use the database method instead"))); - -/** - * Gets the instance of FIRDatabase for the default FIRApp. - * - * @return A FIRDatabase instance. - */ -+ (FIRDatabase *)database NS_SWIFT_NAME(database()); - -/** - * Gets a FirebaseDatabase instance for the specified URL. - * - * @param url The URL to the Firebase Database instance you want to access. - * @return A FIRDatabase instance. - */ -+ (FIRDatabase *)databaseWithURL:(NSString *)url NS_SWIFT_NAME(database(url:)); - -/** - * Gets a FirebaseDatabase instance for the specified URL, using the specified - * FirebaseApp. - * - * @param app The FIRApp to get a FIRDatabase for. - * @param url The URL to the Firebase Database instance you want to access. - * @return A FIRDatabase instance. - */ -// clang-format off -+ (FIRDatabase *)databaseForApp:(FIRApp *)app - URL:(NSString *)url NS_SWIFT_NAME(database(app:url:)); -// clang-format on - -/** - * Gets an instance of FIRDatabase for a specific FIRApp. - * - * @param app The FIRApp to get a FIRDatabase for. - * @return A FIRDatabase instance. - */ -+ (FIRDatabase *)databaseForApp:(FIRApp *)app NS_SWIFT_NAME(database(app:)); - -/** The FIRApp instance to which this FIRDatabase belongs. */ -@property(weak, readonly, nonatomic) FIRApp *app; - -/** - * Gets a FIRDatabaseReference for the root of your Firebase Database. - */ -- (FIRDatabaseReference *)reference; - -/** - * Gets a FIRDatabaseReference for the provided path. - * - * @param path Path to a location in your Firebase Database. - * @return A FIRDatabaseReference pointing to the specified path. - */ -- (FIRDatabaseReference *)referenceWithPath:(NSString *)path; - -/** - * Gets a FIRDatabaseReference for the provided URL. The URL must be a URL to a - * path within this Firebase Database. To create a FIRDatabaseReference to a - * different database, create a FIRApp} with a FIROptions object configured with - * the appropriate database URL. - * - * @param databaseUrl A URL to a path within your database. - * @return A FIRDatabaseReference for the provided URL. - */ -- (FIRDatabaseReference *)referenceFromURL:(NSString *)databaseUrl; - -/** - * The Firebase Database client automatically queues writes and sends them to - * the server at the earliest opportunity, depending on network connectivity. In - * some cases (e.g. offline usage) there may be a large number of writes waiting - * to be sent. Calling this method will purge all outstanding writes so they are - * abandoned. - * - * All writes will be purged, including transactions and onDisconnect writes. - * The writes will be rolled back locally, perhaps triggering events for - * affected event listeners, and the client will not (re-)send them to the - * Firebase Database backend. - */ -- (void)purgeOutstandingWrites; - -/** - * Shuts down our connection to the Firebase Database backend until goOnline is - * called. - */ -- (void)goOffline; - -/** - * Resumes our connection to the Firebase Database backend after a previous - * goOffline call. - */ -- (void)goOnline; - -/** - * The Firebase Database client will cache synchronized data and keep track of - * all writes you've initiated while your application is running. It seamlessly - * handles intermittent network connections and re-sends write operations when - * the network connection is restored. - * - * However by default your write operations and cached data are only stored - * in-memory and will be lost when your app restarts. By setting this value to - * `YES`, the data will be persisted to on-device (disk) storage and will thus - * be available again when the app is restarted (even when there is no network - * connectivity at that time). Note that this property must be set before - * creating your first Database reference and only needs to be called once per - * application. - * - */ -@property(nonatomic) BOOL persistenceEnabled NS_SWIFT_NAME(isPersistenceEnabled) - ; - -/** - * By default the Firebase Database client will use up to 10MB of disk space to - * cache data. If the cache grows beyond this size, the client will start - * removing data that hasn't been recently used. If you find that your - * application caches too little or too much data, call this method to change - * the cache size. This property must be set before creating your first - * FIRDatabaseReference and only needs to be called once per application. - * - * Note that the specified cache size is only an approximation and the size on - * disk may temporarily exceed it at times. Cache sizes smaller than 1 MB or - * greater than 100 MB are not supported. - */ -@property(nonatomic) NSUInteger persistenceCacheSizeBytes; - -/** - * Sets the dispatch queue on which all events are raised. The default queue is - * the main queue. - * - * Note that this must be set before creating your first Database reference. - */ -@property(nonatomic, strong) dispatch_queue_t callbackQueue; - -/** - * Enables verbose diagnostic logging. - * - * @param enabled YES to enable logging, NO to disable. - */ -+ (void)setLoggingEnabled:(BOOL)enabled; - -/** Retrieve the Firebase Database SDK version. */ -+ (NSString *)sdkVersion; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabaseQuery.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabaseQuery.h deleted file mode 100644 index 82057aa..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabaseQuery.h +++ /dev/null @@ -1,395 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRDataEventType.h" -#import "FIRDataSnapshot.h" -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -/** - * A FIRDatabaseHandle is used to identify listeners of Firebase Database - * events. These handles are returned by observeEventType: and can later be - * passed to removeObserverWithHandle: to stop receiving updates. - */ -typedef NSUInteger FIRDatabaseHandle NS_SWIFT_NAME(DatabaseHandle); - -/** - * A FIRDatabaseQuery instance represents a query over the data at a particular - * location. - * - * You create one by calling one of the query methods (queryOrderedByChild:, - * queryStartingAtValue:, etc.) on a FIRDatabaseReference. The query methods can - * be chained to further specify the data you are interested in observing - */ -NS_SWIFT_NAME(DatabaseQuery) -@interface FIRDatabaseQuery : NSObject - -#pragma mark - Attach observers to read data - -/** - * observeEventType:withBlock: is used to listen for data changes at a - * particular location. This is the primary way to read data from the Firebase - * Database. Your block will be triggered for the initial data and again - * whenever the data changes. - * - * Use removeObserverWithHandle: to stop receiving updates. - * - * @param eventType The type of event to listen for. - * @param block The block that should be called with initial data and updates. - * It is passed the data as a FIRDataSnapshot. - * @return A handle used to unregister this block later using - * removeObserverWithHandle: - */ -- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType - withBlock: - (void (^)(FIRDataSnapshot *snapshot))block; - -/** - * observeEventType:andPreviousSiblingKeyWithBlock: is used to listen for data - * changes at a particular location. This is the primary way to read data from - * the Firebase Database. Your block will be triggered for the initial data and - * again whenever the data changes. In addition, for FIRDataEventTypeChildAdded, - * FIRDataEventTypeChildMoved, and FIRDataEventTypeChildChanged events, your - * block will be passed the key of the previous node by priority order. - * - * Use removeObserverWithHandle: to stop receiving updates. - * - * @param eventType The type of event to listen for. - * @param block The block that should be called with initial data and updates. - * It is passed the data as a FIRDataSnapshot and the previous child's key. - * @return A handle used to unregister this block later using - * removeObserverWithHandle: - */ -- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType - andPreviousSiblingKeyWithBlock: - (void (^)(FIRDataSnapshot *snapshot, - NSString *__nullable prevKey))block; - -/** - * observeEventType:withBlock: is used to listen for data changes at a - * particular location. This is the primary way to read data from the Firebase - * Database. Your block will be triggered for the initial data and again - * whenever the data changes. - * - * The cancelBlock will be called if you will no longer receive new events due - * to no longer having permission. - * - * Use removeObserverWithHandle: to stop receiving updates. - * - * @param eventType The type of event to listen for. - * @param block The block that should be called with initial data and updates. - * It is passed the data as a FIRDataSnapshot. - * @param cancelBlock The block that should be called if this client no longer - * has permission to receive these events - * @return A handle used to unregister this block later using - * removeObserverWithHandle: - */ -- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType - withBlock:(void (^)(FIRDataSnapshot *snapshot))block - withCancelBlock: - (nullable void (^)(NSError *error))cancelBlock; - -/** - * observeEventType:andPreviousSiblingKeyWithBlock: is used to listen for data - * changes at a particular location. This is the primary way to read data from - * the Firebase Database. Your block will be triggered for the initial data and - * again whenever the data changes. In addition, for FIRDataEventTypeChildAdded, - * FIRDataEventTypeChildMoved, and FIRDataEventTypeChildChanged events, your - * block will be passed the key of the previous node by priority order. - * - * The cancelBlock will be called if you will no longer receive new events due - * to no longer having permission. - * - * Use removeObserverWithHandle: to stop receiving updates. - * - * @param eventType The type of event to listen for. - * @param block The block that should be called with initial data and updates. - * It is passed the data as a FIRDataSnapshot and the previous child's key. - * @param cancelBlock The block that should be called if this client no longer - * has permission to receive these events - * @return A handle used to unregister this block later using - * removeObserverWithHandle: - */ -- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType - andPreviousSiblingKeyWithBlock: - (void (^)(FIRDataSnapshot *snapshot, - NSString *__nullable prevKey))block - withCancelBlock: - (nullable void (^)(NSError *error))cancelBlock; - -/** - * This is equivalent to observeEventType:withBlock:, except the block is - * immediately canceled after the initial data is returned. - * - * @param eventType The type of event to listen for. - * @param block The block that should be called. It is passed the data as a - * FIRDataSnapshot. - */ -- (void)observeSingleEventOfType:(FIRDataEventType)eventType - withBlock:(void (^)(FIRDataSnapshot *snapshot))block; - -/** - * This is equivalent to observeEventType:withBlock:, except the block is - * immediately canceled after the initial data is returned. In addition, for - * FIRDataEventTypeChildAdded, FIRDataEventTypeChildMoved, and - * FIRDataEventTypeChildChanged events, your block will be passed the key of the - * previous node by priority order. - * - * @param eventType The type of event to listen for. - * @param block The block that should be called. It is passed the data as a - * FIRDataSnapshot and the previous child's key. - */ -- (void)observeSingleEventOfType:(FIRDataEventType)eventType - andPreviousSiblingKeyWithBlock: - (void (^)(FIRDataSnapshot *snapshot, - NSString *__nullable prevKey))block; - -/** - * This is equivalent to observeEventType:withBlock:, except the block is - * immediately canceled after the initial data is returned. - * - * The cancelBlock will be called if you do not have permission to read data at - * this location. - * - * @param eventType The type of event to listen for. - * @param block The block that should be called. It is passed the data as a - * FIRDataSnapshot. - * @param cancelBlock The block that will be called if you don't have permission - * to access this data - */ -- (void)observeSingleEventOfType:(FIRDataEventType)eventType - withBlock:(void (^)(FIRDataSnapshot *snapshot))block - withCancelBlock:(nullable void (^)(NSError *error))cancelBlock; - -/** - * This is equivalent to observeEventType:withBlock:, except the block is - * immediately canceled after the initial data is returned. In addition, for - * FIRDataEventTypeChildAdded, FIRDataEventTypeChildMoved, and - * FIRDataEventTypeChildChanged events, your block will be passed the key of the - * previous node by priority order. - * - * The cancelBlock will be called if you do not have permission to read data at - * this location. - * - * @param eventType The type of event to listen for. - * @param block The block that should be called. It is passed the data as a - * FIRDataSnapshot and the previous child's key. - * @param cancelBlock The block that will be called if you don't have permission - * to access this data - */ -- (void)observeSingleEventOfType:(FIRDataEventType)eventType - andPreviousSiblingKeyWithBlock:(void (^)(FIRDataSnapshot *snapshot, - NSString *__nullable prevKey))block - withCancelBlock: - (nullable void (^)(NSError *error))cancelBlock; - -#pragma mark - Detaching observers - -/** - * Detach a block previously attached with observeEventType:withBlock:. - * - * @param handle The handle returned by the call to observeEventType:withBlock: - * which we are trying to remove. - */ -- (void)removeObserverWithHandle:(FIRDatabaseHandle)handle; - -/** - * Detach all blocks previously attached to this Firebase Database location with - * observeEventType:withBlock: - */ -- (void)removeAllObservers; - -/** - * By calling `keepSynced:YES` on a location, the data for that location will - * automatically be downloaded and kept in sync, even when no listeners are - * attached for that location. Additionally, while a location is kept synced, it - * will not be evicted from the persistent disk cache. - * - * @param keepSynced Pass YES to keep this location synchronized, pass NO to - * stop synchronization. - */ -- (void)keepSynced:(BOOL)keepSynced; - -#pragma mark - Querying and limiting - -/** - * queryLimitedToFirst: is used to generate a reference to a limited view of the - * data at this location. The FIRDatabaseQuery instance returned by - * queryLimitedToFirst: will respond to at most the first limit child nodes. - * - * @param limit The upper bound, inclusive, for the number of child nodes to - * receive events for - * @return A FIRDatabaseQuery instance, limited to at most limit child nodes. - */ -- (FIRDatabaseQuery *)queryLimitedToFirst:(NSUInteger)limit; - -/** - * queryLimitedToLast: is used to generate a reference to a limited view of the - * data at this location. The FIRDatabaseQuery instance returned by - * queryLimitedToLast: will respond to at most the last limit child nodes. - * - * @param limit The upper bound, inclusive, for the number of child nodes to - * receive events for - * @return A FIRDatabaseQuery instance, limited to at most limit child nodes. - */ -- (FIRDatabaseQuery *)queryLimitedToLast:(NSUInteger)limit; - -/** - * queryOrderBy: is used to generate a reference to a view of the data that's - * been sorted by the values of a particular child key. This method is intended - * to be used in combination with queryStartingAtValue:, queryEndingAtValue:, or - * queryEqualToValue:. - * - * @param key The child key to use in ordering data visible to the returned - * FIRDatabaseQuery - * @return A FIRDatabaseQuery instance, ordered by the values of the specified - * child key. - */ -- (FIRDatabaseQuery *)queryOrderedByChild:(NSString *)key; - -/** - * queryOrderedByKey: is used to generate a reference to a view of the data - * that's been sorted by child key. This method is intended to be used in - * combination with queryStartingAtValue:, queryEndingAtValue:, or - * queryEqualToValue:. - * - * @return A FIRDatabaseQuery instance, ordered by child keys. - */ -- (FIRDatabaseQuery *)queryOrderedByKey; - -/** - * queryOrderedByValue: is used to generate a reference to a view of the data - * that's been sorted by child value. This method is intended to be used in - * combination with queryStartingAtValue:, queryEndingAtValue:, or - * queryEqualToValue:. - * - * @return A FIRDatabaseQuery instance, ordered by child value. - */ -- (FIRDatabaseQuery *)queryOrderedByValue; - -/** - * queryOrderedByPriority: is used to generate a reference to a view of the data - * that's been sorted by child priority. This method is intended to be used in - * combination with queryStartingAtValue:, queryEndingAtValue:, or - * queryEqualToValue:. - * - * @return A FIRDatabaseQuery instance, ordered by child priorities. - */ -- (FIRDatabaseQuery *)queryOrderedByPriority; - -/** - * queryStartingAtValue: is used to generate a reference to a limited view of - * the data at this location. The FIRDatabaseQuery instance returned by - * queryStartingAtValue: will respond to events at nodes with a value greater - * than or equal to startValue. - * - * @param startValue The lower bound, inclusive, for the value of data visible - * to the returned FIRDatabaseQuery - * @return A FIRDatabaseQuery instance, limited to data with value greater than - * or equal to startValue - */ -- (FIRDatabaseQuery *)queryStartingAtValue:(nullable id)startValue; - -/** - * queryStartingAtValue:childKey: is used to generate a reference to a limited - * view of the data at this location. The FIRDatabaseQuery instance returned by - * queryStartingAtValue:childKey will respond to events at nodes with a value - * greater than startValue, or equal to startValue and with a key greater than - * or equal to childKey. This is most useful when implementing pagination in a - * case where multiple nodes can match the startValue. - * - * @param startValue The lower bound, inclusive, for the value of data visible - * to the returned FIRDatabaseQuery - * @param childKey The lower bound, inclusive, for the key of nodes with value - * equal to startValue - * @return A FIRDatabaseQuery instance, limited to data with value greater than - * or equal to startValue - */ -- (FIRDatabaseQuery *)queryStartingAtValue:(nullable id)startValue - childKey:(nullable NSString *)childKey; - -/** - * queryEndingAtValue: is used to generate a reference to a limited view of the - * data at this location. The FIRDatabaseQuery instance returned by - * queryEndingAtValue: will respond to events at nodes with a value less than or - * equal to endValue. - * - * @param endValue The upper bound, inclusive, for the value of data visible to - * the returned FIRDatabaseQuery - * @return A FIRDatabaseQuery instance, limited to data with value less than or - * equal to endValue - */ -- (FIRDatabaseQuery *)queryEndingAtValue:(nullable id)endValue; - -/** - * queryEndingAtValue:childKey: is used to generate a reference to a limited - * view of the data at this location. The FIRDatabaseQuery instance returned by - * queryEndingAtValue:childKey will respond to events at nodes with a value less - * than endValue, or equal to endValue and with a key less than or equal to - * childKey. This is most useful when implementing pagination in a case where - * multiple nodes can match the endValue. - * - * @param endValue The upper bound, inclusive, for the value of data visible to - * the returned FIRDatabaseQuery - * @param childKey The upper bound, inclusive, for the key of nodes with value - * equal to endValue - * @return A FIRDatabaseQuery instance, limited to data with value less than or - * equal to endValue - */ -- (FIRDatabaseQuery *)queryEndingAtValue:(nullable id)endValue - childKey:(nullable NSString *)childKey; - -/** - * queryEqualToValue: is used to generate a reference to a limited view of the - * data at this location. The FIRDatabaseQuery instance returned by - * queryEqualToValue: will respond to events at nodes with a value equal to the - * supplied argument. - * - * @param value The value that the data returned by this FIRDatabaseQuery will - * have - * @return A FIRDatabaseQuery instance, limited to data with the supplied value. - */ -- (FIRDatabaseQuery *)queryEqualToValue:(nullable id)value; - -/** - * queryEqualToValue:childKey: is used to generate a reference to a limited view - * of the data at this location. The FIRDatabaseQuery instance returned by - * queryEqualToValue:childKey will respond to events at nodes with a value equal - * to the supplied argument and with their key equal to childKey. There will be - * at most one node that matches because child keys are unique. - * - * @param value The value that the data returned by this FIRDatabaseQuery will - * have - * @param childKey The name of nodes with the right value - * @return A FIRDatabaseQuery instance, limited to data with the supplied value - * and the key. - */ -- (FIRDatabaseQuery *)queryEqualToValue:(nullable id)value - childKey:(nullable NSString *)childKey; - -#pragma mark - Properties - -/** - * Gets a FIRDatabaseReference for the location of this query. - * - * @return A FIRDatabaseReference for the location of this query. - */ -@property(nonatomic, readonly, strong) FIRDatabaseReference *ref; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabaseReference.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabaseReference.h deleted file mode 100644 index c80b2f8..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabaseReference.h +++ /dev/null @@ -1,861 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRDataSnapshot.h" -#import "FIRDatabase.h" -#import "FIRDatabaseQuery.h" -#import "FIRMutableData.h" -#import "FIRServerValue.h" -#import "FIRTransactionResult.h" -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -@class FIRDatabase; - -/** - * A FIRDatabaseReference represents a particular location in your Firebase - * Database and can be used for reading or writing data to that Firebase - * Database location. - * - * This class is the starting point for all Firebase Database operations. After - * you've obtained your first FIRDatabaseReference via [FIRDatabase reference], - * you can use it to read data (ie. observeEventType:withBlock:), write data - * (ie. setValue:), and to create new FIRDatabaseReferences (ie. child:). - */ -NS_SWIFT_NAME(DatabaseReference) -@interface FIRDatabaseReference : FIRDatabaseQuery - -#pragma mark - Getting references to children locations - -/** - * Gets a FIRDatabaseReference for the location at the specified relative path. - * The relative path can either be a simple child key (e.g. 'fred') or a - * deeper slash-separated path (e.g. 'fred/name/first'). - * - * @param pathString A relative path from this location to the desired child - * location. - * @return A FIRDatabaseReference for the specified relative path. - */ -- (FIRDatabaseReference *)child:(NSString *)pathString; - -/** - * childByAutoId generates a new child location using a unique key and returns a - * FIRDatabaseReference to it. This is useful when the children of a Firebase - * Database location represent a list of items. - * - * The unique key generated by childByAutoId: is prefixed with a - * client-generated timestamp so that the resulting list will be - * chronologically-sorted. - * - * @return A FIRDatabaseReference for the generated location. - */ -- (FIRDatabaseReference *)childByAutoId; - -#pragma mark - Writing data - -/** Write data to this Firebase Database location. - -This will overwrite any data at this location and all child locations. - -Data types that can be set are: - -- NSString -- @"Hello World" -- NSNumber (also includes boolean) -- @YES, @43, @4.333 -- NSDictionary -- @{@"key": @"value", @"nested": @{@"another": @"value"} } -- NSArray - -The effect of the write will be visible immediately and the corresponding -events will be triggered. Synchronization of the data to the Firebase Database -servers will also be started. - -Passing null for the new value is equivalent to calling remove:; -all data at this location or any child location will be deleted. - -Note that setValue: will remove any priority stored at this location, so if -priority is meant to be preserved, you should use setValue:andPriority: instead. - -@param value The value to be written. - */ -- (void)setValue:(nullable id)value; - -/** - * The same as setValue: with a block that gets triggered after the write - * operation has been committed to the Firebase Database servers. - * - * @param value The value to be written. - * @param block The block to be called after the write has been committed to the - * Firebase Database servers. - */ -- (void)setValue:(nullable id)value - withCompletionBlock: - (void (^)(NSError *__nullable error, FIRDatabaseReference *ref))block; - -/** - * The same as setValue: with an additional priority to be attached to the data - * being written. Priorities are used to order items. - * - * @param value The value to be written. - * @param priority The priority to be attached to that data. - */ -- (void)setValue:(nullable id)value andPriority:(nullable id)priority; - -/** - * The same as setValue:andPriority: with a block that gets triggered after the - * write operation has been committed to the Firebase Database servers. - * - * @param value The value to be written. - * @param priority The priority to be attached to that data. - * @param block The block to be called after the write has been committed to the - * Firebase Database servers. - */ -- (void)setValue:(nullable id)value - andPriority:(nullable id)priority - withCompletionBlock: - (void (^)(NSError *__nullable error, FIRDatabaseReference *ref))block; - -/** - * Remove the data at this Firebase Database location. Any data at child - * locations will also be deleted. - * - * The effect of the delete will be visible immediately and the corresponding - * events will be triggered. Synchronization of the delete to the Firebase - * Database servers will also be started. - * - * remove: is equivalent to calling setValue:nil - */ -- (void)removeValue; - -/** - * The same as remove: with a block that gets triggered after the remove - * operation has been committed to the Firebase Database servers. - * - * @param block The block to be called after the remove has been committed to - * the Firebase Database servers. - */ -- (void)removeValueWithCompletionBlock: - (void (^)(NSError *__nullable error, FIRDatabaseReference *ref))block; - -/** - * Sets a priority for the data at this Firebase Database location. - * Priorities can be used to provide a custom ordering for the children at a - * location (if no priorities are specified, the children are ordered by key). - * - * You cannot set a priority on an empty location. For this reason - * setValue:andPriority: should be used when setting initial data with a - * specific priority and setPriority: should be used when updating the priority - * of existing data. - * - * Children are sorted based on this priority using the following rules: - * - * Children with no priority come first. - * Children with a number as their priority come next. They are sorted - * numerically by priority (small to large). Children with a string as their - * priority come last. They are sorted lexicographically by priority. Whenever - * two children have the same priority (including no priority), they are sorted - * by key. Numeric keys come first (sorted numerically), followed by the - * remaining keys (sorted lexicographically). - * - * Note that priorities are parsed and ordered as IEEE 754 double-precision - * floating-point numbers. Keys are always stored as strings and are treated as - * numbers only when they can be parsed as a 32-bit integer - * - * @param priority The priority to set at the specified location. - */ -- (void)setPriority:(nullable id)priority; - -/** - * The same as setPriority: with a block that is called once the priority has - * been committed to the Firebase Database servers. - * - * @param priority The priority to set at the specified location. - * @param block The block that is triggered after the priority has been written - * on the servers. - */ -- (void)setPriority:(nullable id)priority - withCompletionBlock: - (void (^)(NSError *__nullable error, FIRDatabaseReference *ref))block; - -/** - * Updates the values at the specified paths in the dictionary without - * overwriting other keys at this location. - * - * @param values A dictionary of the keys to change and their new values - */ -- (void)updateChildValues:(NSDictionary *)values; - -/** - * The same as update: with a block that is called once the update has been - * committed to the Firebase Database servers - * - * @param values A dictionary of the keys to change and their new values - * @param block The block that is triggered after the update has been written on - * the Firebase Database servers - */ -- (void)updateChildValues:(NSDictionary *)values - withCompletionBlock: - (void (^)(NSError *__nullable error, FIRDatabaseReference *ref))block; - -#pragma mark - Attaching observers to read data - -/** - * observeEventType:withBlock: is used to listen for data changes at a - * particular location. This is the primary way to read data from the Firebase - * Database. Your block will be triggered for the initial data and again - * whenever the data changes. - * - * Use removeObserverWithHandle: to stop receiving updates. - * @param eventType The type of event to listen for. - * @param block The block that should be called with initial data and updates. - * It is passed the data as a FIRDataSnapshot. - * @return A handle used to unregister this block later using - * removeObserverWithHandle: - */ -- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType - withBlock: - (void (^)(FIRDataSnapshot *snapshot))block; - -/** - * observeEventType:andPreviousSiblingKeyWithBlock: is used to listen for data - * changes at a particular location. This is the primary way to read data from - * the Firebase Database. Your block will be triggered for the initial data and - * again whenever the data changes. In addition, for FIRDataEventTypeChildAdded, - * FIRDataEventTypeChildMoved, and FIRDataEventTypeChildChanged events, your - * block will be passed the key of the previous node by priority order. - * - * Use removeObserverWithHandle: to stop receiving updates. - * - * @param eventType The type of event to listen for. - * @param block The block that should be called with initial data and updates. - * It is passed the data as a FIRDataSnapshot and the previous child's key. - * @return A handle used to unregister this block later using - * removeObserverWithHandle: - */ -- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType - andPreviousSiblingKeyWithBlock: - (void (^)(FIRDataSnapshot *snapshot, - NSString *__nullable prevKey))block; - -/** - * observeEventType:withBlock: is used to listen for data changes at a - * particular location. This is the primary way to read data from the Firebase - * Database. Your block will be triggered for the initial data and again - * whenever the data changes. - * - * The cancelBlock will be called if you will no longer receive new events due - * to no longer having permission. - * - * Use removeObserverWithHandle: to stop receiving updates. - * - * @param eventType The type of event to listen for. - * @param block The block that should be called with initial data and updates. - * It is passed the data as a FIRDataSnapshot. - * @param cancelBlock The block that should be called if this client no longer - * has permission to receive these events - * @return A handle used to unregister this block later using - * removeObserverWithHandle: - */ -- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType - withBlock:(void (^)(FIRDataSnapshot *snapshot))block - withCancelBlock: - (nullable void (^)(NSError *error))cancelBlock; - -/** - * observeEventType:andPreviousSiblingKeyWithBlock: is used to listen for data - * changes at a particular location. This is the primary way to read data from - * the Firebase Database. Your block will be triggered for the initial data and - * again whenever the data changes. In addition, for FIRDataEventTypeChildAdded, - * FIRDataEventTypeChildMoved, and FIRDataEventTypeChildChanged events, your - * block will be passed the key of the previous node by priority order. - * - * The cancelBlock will be called if you will no longer receive new events due - * to no longer having permission. - * - * Use removeObserverWithHandle: to stop receiving updates. - * - * @param eventType The type of event to listen for. - * @param block The block that should be called with initial data and updates. - * It is passed the data as a FIRDataSnapshot and the previous child's key. - * @param cancelBlock The block that should be called if this client no longer - * has permission to receive these events - * @return A handle used to unregister this block later using - * removeObserverWithHandle: - */ -- (FIRDatabaseHandle)observeEventType:(FIRDataEventType)eventType - andPreviousSiblingKeyWithBlock: - (void (^)(FIRDataSnapshot *snapshot, - NSString *__nullable prevKey))block - withCancelBlock: - (nullable void (^)(NSError *error))cancelBlock; - -/** - * This is equivalent to observeEventType:withBlock:, except the block is - * immediately canceled after the initial data is returned. - * - * @param eventType The type of event to listen for. - * @param block The block that should be called. It is passed the data as a - * FIRDataSnapshot. - */ -- (void)observeSingleEventOfType:(FIRDataEventType)eventType - withBlock:(void (^)(FIRDataSnapshot *snapshot))block; - -/** - * This is equivalent to observeEventType:withBlock:, except the block is - * immediately canceled after the initial data is returned. In addition, for - * FIRDataEventTypeChildAdded, FIRDataEventTypeChildMoved, and - * FIRDataEventTypeChildChanged events, your block will be passed the key of the - * previous node by priority order. - * - * @param eventType The type of event to listen for. - * @param block The block that should be called. It is passed the data as a - * FIRDataSnapshot and the previous child's key. - */ -- (void)observeSingleEventOfType:(FIRDataEventType)eventType - andPreviousSiblingKeyWithBlock: - (void (^)(FIRDataSnapshot *snapshot, - NSString *__nullable prevKey))block; - -/** - * This is equivalent to observeEventType:withBlock:, except the block is - * immediately canceled after the initial data is returned. - * - * The cancelBlock will be called if you do not have permission to read data at - * this location. - * - * @param eventType The type of event to listen for. - * @param block The block that should be called. It is passed the data as a - * FIRDataSnapshot. - * @param cancelBlock The block that will be called if you don't have permission - * to access this data - */ -- (void)observeSingleEventOfType:(FIRDataEventType)eventType - withBlock:(void (^)(FIRDataSnapshot *snapshot))block - withCancelBlock:(nullable void (^)(NSError *error))cancelBlock; - -/** - * This is equivalent to observeEventType:withBlock:, except the block is - * immediately canceled after the initial data is returned. In addition, for - * FIRDataEventTypeChildAdded, FIRDataEventTypeChildMoved, and - * FIRDataEventTypeChildChanged events, your block will be passed the key of the - * previous node by priority order. - * - * The cancelBlock will be called if you do not have permission to read data at - * this location. - * - * @param eventType The type of event to listen for. - * @param block The block that should be called. It is passed the data as a - * FIRDataSnapshot and the previous child's key. - * @param cancelBlock The block that will be called if you don't have permission - * to access this data - */ -- (void)observeSingleEventOfType:(FIRDataEventType)eventType - andPreviousSiblingKeyWithBlock:(void (^)(FIRDataSnapshot *snapshot, - NSString *__nullable prevKey))block - withCancelBlock: - (nullable void (^)(NSError *error))cancelBlock; - -#pragma mark - Detaching observers - -/** - * Detach a block previously attached with observeEventType:withBlock:. - * - * @param handle The handle returned by the call to observeEventType:withBlock: - * which we are trying to remove. - */ -- (void)removeObserverWithHandle:(FIRDatabaseHandle)handle; - -/** - * By calling `keepSynced:YES` on a location, the data for that location will - * automatically be downloaded and kept in sync, even when no listeners are - * attached for that location. Additionally, while a location is kept synced, it - * will not be evicted from the persistent disk cache. - * - * @param keepSynced Pass YES to keep this location synchronized, pass NO to - * stop synchronization. - */ -- (void)keepSynced:(BOOL)keepSynced; - -/** - * Removes all observers at the current reference, but does not remove any - * observers at child references. removeAllObservers must be called again for - * each child reference where a listener was established to remove the - * observers. - */ -- (void)removeAllObservers; - -#pragma mark - Querying and limiting - -/** - * queryLimitedToFirst: is used to generate a reference to a limited view of the - * data at this location. The FIRDatabaseQuery instance returned by - * queryLimitedToFirst: will respond to at most the first limit child nodes. - * - * @param limit The upper bound, inclusive, for the number of child nodes to - * receive events for - * @return A FIRDatabaseQuery instance, limited to at most limit child nodes. - */ -- (FIRDatabaseQuery *)queryLimitedToFirst:(NSUInteger)limit; - -/** - * queryLimitedToLast: is used to generate a reference to a limited view of the - * data at this location. The FIRDatabaseQuery instance returned by - * queryLimitedToLast: will respond to at most the last limit child nodes. - * - * @param limit The upper bound, inclusive, for the number of child nodes to - * receive events for - * @return A FIRDatabaseQuery instance, limited to at most limit child nodes. - */ -- (FIRDatabaseQuery *)queryLimitedToLast:(NSUInteger)limit; - -/** - * queryOrderBy: is used to generate a reference to a view of the data that's - * been sorted by the values of a particular child key. This method is intended - * to be used in combination with queryStartingAtValue:, queryEndingAtValue:, or - * queryEqualToValue:. - * - * @param key The child key to use in ordering data visible to the returned - * FIRDatabaseQuery - * @return A FIRDatabaseQuery instance, ordered by the values of the specified - * child key. - */ -- (FIRDatabaseQuery *)queryOrderedByChild:(NSString *)key; - -/** - * queryOrderedByKey: is used to generate a reference to a view of the data - * that's been sorted by child key. This method is intended to be used in - * combination with queryStartingAtValue:, queryEndingAtValue:, or - * queryEqualToValue:. - * - * @return A FIRDatabaseQuery instance, ordered by child keys. - */ -- (FIRDatabaseQuery *)queryOrderedByKey; - -/** - * queryOrderedByPriority: is used to generate a reference to a view of the data - * that's been sorted by child priority. This method is intended to be used in - * combination with queryStartingAtValue:, queryEndingAtValue:, or - * queryEqualToValue:. - * - * @return A FIRDatabaseQuery instance, ordered by child priorities. - */ -- (FIRDatabaseQuery *)queryOrderedByPriority; - -/** - * queryStartingAtValue: is used to generate a reference to a limited view of - * the data at this location. The FIRDatabaseQuery instance returned by - * queryStartingAtValue: will respond to events at nodes with a value greater - * than or equal to startValue. - * - * @param startValue The lower bound, inclusive, for the value of data visible - * to the returned FIRDatabaseQuery - * @return A FIRDatabaseQuery instance, limited to data with value greater than - * or equal to startValue - */ -- (FIRDatabaseQuery *)queryStartingAtValue:(nullable id)startValue; - -/** - * queryStartingAtValue:childKey: is used to generate a reference to a limited - * view of the data at this location. The FIRDatabaseQuery instance returned by - * queryStartingAtValue:childKey will respond to events at nodes with a value - * greater than startValue, or equal to startValue and with a key greater than - * or equal to childKey. - * - * @param startValue The lower bound, inclusive, for the value of data visible - * to the returned FIRDatabaseQuery - * @param childKey The lower bound, inclusive, for the key of nodes with value - * equal to startValue - * @return A FIRDatabaseQuery instance, limited to data with value greater than - * or equal to startValue - */ -- (FIRDatabaseQuery *)queryStartingAtValue:(nullable id)startValue - childKey:(nullable NSString *)childKey; - -/** - * queryEndingAtValue: is used to generate a reference to a limited view of the - * data at this location. The FIRDatabaseQuery instance returned by - * queryEndingAtValue: will respond to events at nodes with a value less than or - * equal to endValue. - * - * @param endValue The upper bound, inclusive, for the value of data visible to - * the returned FIRDatabaseQuery - * @return A FIRDatabaseQuery instance, limited to data with value less than or - * equal to endValue - */ -- (FIRDatabaseQuery *)queryEndingAtValue:(nullable id)endValue; - -/** - * queryEndingAtValue:childKey: is used to generate a reference to a limited - * view of the data at this location. The FIRDatabaseQuery instance returned by - * queryEndingAtValue:childKey will respond to events at nodes with a value less - * than endValue, or equal to endValue and with a key less than or equal to - * childKey. - * - * @param endValue The upper bound, inclusive, for the value of data visible to - * the returned FIRDatabaseQuery - * @param childKey The upper bound, inclusive, for the key of nodes with value - * equal to endValue - * @return A FIRDatabaseQuery instance, limited to data with value less than or - * equal to endValue - */ -- (FIRDatabaseQuery *)queryEndingAtValue:(nullable id)endValue - childKey:(nullable NSString *)childKey; - -/** - * queryEqualToValue: is used to generate a reference to a limited view of the - * data at this location. The FIRDatabaseQuery instance returned by - * queryEqualToValue: will respond to events at nodes with a value equal to the - * supplied argument. - * - * @param value The value that the data returned by this FIRDatabaseQuery will - * have - * @return A FIRDatabaseQuery instance, limited to data with the supplied value. - */ -- (FIRDatabaseQuery *)queryEqualToValue:(nullable id)value; - -/** - * queryEqualToValue:childKey: is used to generate a reference to a limited view - * of the data at this location. The FIRDatabaseQuery instance returned by - * queryEqualToValue:childKey will respond to events at nodes with a value equal - * to the supplied argument with a key equal to childKey. There will be at most - * one node that matches because child keys are unique. - * - * @param value The value that the data returned by this FIRDatabaseQuery will - * have - * @param childKey The key of nodes with the right value - * @return A FIRDatabaseQuery instance, limited to data with the supplied value - * and the key. - */ -- (FIRDatabaseQuery *)queryEqualToValue:(nullable id)value - childKey:(nullable NSString *)childKey; - -#pragma mark - Managing presence - -/** - * Ensure the data at this location is set to the specified value when - * the client is disconnected (due to closing the browser, navigating - * to a new page, or network issues). - * - * onDisconnectSetValue: is especially useful for implementing "presence" - * systems, where a value should be changed or cleared when a user disconnects - * so that he appears "offline" to other users. - * - * @param value The value to be set after the connection is lost. - */ -- (void)onDisconnectSetValue:(nullable id)value; - -/** - * Ensure the data at this location is set to the specified value when - * the client is disconnected (due to closing the browser, navigating - * to a new page, or network issues). - * - * The completion block will be triggered when the operation has been - * successfully queued up on the Firebase Database servers - * - * @param value The value to be set after the connection is lost. - * @param block Block to be triggered when the operation has been queued up on - * the Firebase Database servers - */ -- (void)onDisconnectSetValue:(nullable id)value - withCompletionBlock:(void (^)(NSError *__nullable error, - FIRDatabaseReference *ref))block; - -/** - * Ensure the data at this location is set to the specified value and priority - * when the client is disconnected (due to closing the browser, navigating to a - * new page, or network issues). - * - * @param value The value to be set after the connection is lost. - * @param priority The priority to be set after the connection is lost. - */ -- (void)onDisconnectSetValue:(nullable id)value andPriority:(id)priority; - -/** - * Ensure the data at this location is set to the specified value and priority - * when the client is disconnected (due to closing the browser, navigating to a - * new page, or network issues). - * - * The completion block will be triggered when the operation has been - * successfully queued up on the Firebase Database servers - * - * @param value The value to be set after the connection is lost. - * @param priority The priority to be set after the connection is lost. - * @param block Block to be triggered when the operation has been queued up on - * the Firebase Database servers - */ -- (void)onDisconnectSetValue:(nullable id)value - andPriority:(nullable id)priority - withCompletionBlock:(void (^)(NSError *__nullable error, - FIRDatabaseReference *ref))block; - -/** - * Ensure the data at this location is removed when - * the client is disconnected (due to closing the app, navigating - * to a new page, or network issues). - * - * onDisconnectRemoveValue is especially useful for implementing "presence" - * systems. - */ -- (void)onDisconnectRemoveValue; - -/** - * Ensure the data at this location is removed when - * the client is disconnected (due to closing the app, navigating - * to a new page, or network issues). - * - * onDisconnectRemoveValueWithCompletionBlock: is especially useful for - * implementing "presence" systems. - * - * @param block Block to be triggered when the operation has been queued up on - * the Firebase Database servers - */ -- (void)onDisconnectRemoveValueWithCompletionBlock: - (void (^)(NSError *__nullable error, FIRDatabaseReference *ref))block; - -/** - * Ensure the data has the specified child values updated when - * the client is disconnected (due to closing the browser, navigating - * to a new page, or network issues). - * - * - * @param values A dictionary of child node keys and the values to set them to - * after the connection is lost. - */ -- (void)onDisconnectUpdateChildValues:(NSDictionary *)values; - -/** - * Ensure the data has the specified child values updated when - * the client is disconnected (due to closing the browser, navigating - * to a new page, or network issues). - * - * - * @param values A dictionary of child node keys and the values to set them to - * after the connection is lost. - * @param block A block that will be called once the operation has been queued - * up on the Firebase Database servers - */ -- (void)onDisconnectUpdateChildValues:(NSDictionary *)values - withCompletionBlock: - (void (^)(NSError *__nullable error, - FIRDatabaseReference *ref))block; - -/** - * Cancel any operations that are set to run on disconnect. If you previously - * called onDisconnectSetValue:, onDisconnectRemoveValue:, or - * onDisconnectUpdateChildValues:, and no longer want the values updated when - * the connection is lost, call cancelDisconnectOperations: - */ -- (void)cancelDisconnectOperations; - -/** - * Cancel any operations that are set to run on disconnect. If you previously - * called onDisconnectSetValue:, onDisconnectRemoveValue:, or - * onDisconnectUpdateChildValues:, and no longer want the values updated when - * the connection is lost, call cancelDisconnectOperations: - * - * @param block A block that will be triggered once the Firebase Database - * servers have acknowledged the cancel request. - */ -- (void)cancelDisconnectOperationsWithCompletionBlock: - (nullable void (^)(NSError *__nullable error, - FIRDatabaseReference *ref))block; - -#pragma mark - Manual Connection Management - -/** - * Manually disconnect the Firebase Database client from the server and disable - * automatic reconnection. - * - * The Firebase Database client automatically maintains a persistent connection - * to the Firebase Database server, which will remain active indefinitely and - * reconnect when disconnected. However, the goOffline( ) and goOnline( ) - * methods may be used to manually control the client connection in cases where - * a persistent connection is undesirable. - * - * While offline, the Firebase Database client will no longer receive data - * updates from the server. However, all database operations performed locally - * will continue to immediately fire events, allowing your application to - * continue behaving normally. Additionally, each operation performed locally - * will automatically be queued and retried upon reconnection to the Firebase - * Database server. - * - * To reconnect to the Firebase Database server and begin receiving remote - * events, see goOnline( ). Once the connection is reestablished, the Firebase - * Database client will transmit the appropriate data and fire the appropriate - * events so that your client "catches up" automatically. - * - * Note: Invoking this method will impact all Firebase Database connections. - */ -+ (void)goOffline; - -/** - * Manually reestablish a connection to the Firebase Database server and enable - * automatic reconnection. - * - * The Firebase Database client automatically maintains a persistent connection - * to the Firebase Database server, which will remain active indefinitely and - * reconnect when disconnected. However, the goOffline( ) and goOnline( ) - * methods may be used to manually control the client connection in cases where - * a persistent connection is undesirable. - * - * This method should be used after invoking goOffline( ) to disable the active - * connection. Once reconnected, the Firebase Database client will automatically - * transmit the proper data and fire the appropriate events so that your client - * "catches up" automatically. - * - * To disconnect from the Firebase Database server, see goOffline( ). - * - * Note: Invoking this method will impact all Firebase Database connections. - */ -+ (void)goOnline; - -#pragma mark - Transactions - -/** - * Performs an optimistic-concurrency transactional update to the data at this - * location. Your block will be called with a FIRMutableData instance that - * contains the current data at this location. Your block should update this - * data to the value you wish to write to this location, and then return an - * instance of FIRTransactionResult with the new data. - * - * If, when the operation reaches the server, it turns out that this client had - * stale data, your block will be run again with the latest data from the - * server. - * - * When your block is run, you may decide to abort the transaction by returning - * [FIRTransactionResult abort]. - * - * @param block This block receives the current data at this location and must - * return an instance of FIRTransactionResult - */ -- (void)runTransactionBlock: - (FIRTransactionResult * (^)(FIRMutableData *currentData))block; - -/** - * Performs an optimistic-concurrency transactional update to the data at this - * location. Your block will be called with a FIRMutableData instance that - * contains the current data at this location. Your block should update this - * data to the value you wish to write to this location, and then return an - * instance of FIRTransactionResult with the new data. - * - * If, when the operation reaches the server, it turns out that this client had - * stale data, your block will be run again with the latest data from the - * server. - * - * When your block is run, you may decide to abort the transaction by returning - * [FIRTransactionResult abort]. - * - * @param block This block receives the current data at this location and must - * return an instance of FIRTransactionResult - * @param completionBlock This block will be triggered once the transaction is - * complete, whether it was successful or not. It will indicate if there was an - * error, whether or not the data was committed, and what the current value of - * the data at this location is. - */ -- (void)runTransactionBlock: - (FIRTransactionResult * (^)(FIRMutableData *currentData))block - andCompletionBlock: - (void (^)(NSError *__nullable error, BOOL committed, - FIRDataSnapshot *__nullable snapshot))completionBlock; - -/** - * Performs an optimistic-concurrency transactional update to the data at this - * location. Your block will be called with a FIRMutableData instance that - * contains the current data at this location. Your block should update this - * data to the value you wish to write to this location, and then return an - * instance of FIRTransactionResult with the new data. - * - * If, when the operation reaches the server, it turns out that this client had - * stale data, your block will be run again with the latest data from the - * server. - * - * When your block is run, you may decide to abort the transaction by return - * [FIRTransactionResult abort]. - * - * Since your block may be run multiple times, this client could see several - * immediate states that don't exist on the server. You can suppress those - * immediate states until the server confirms the final state of the - * transaction. - * - * @param block This block receives the current data at this location and must - * return an instance of FIRTransactionResult - * @param completionBlock This block will be triggered once the transaction is - * complete, whether it was successful or not. It will indicate if there was an - * error, whether or not the data was committed, and what the current value of - * the data at this location is. - * @param localEvents Set this to NO to suppress events raised for intermediate - * states, and only get events based on the final state of the transaction. - */ -- (void)runTransactionBlock: - (FIRTransactionResult * (^)(FIRMutableData *currentData))block - andCompletionBlock: - (nullable void (^)(NSError *__nullable error, BOOL committed, - FIRDataSnapshot *__nullable snapshot)) - completionBlock - withLocalEvents:(BOOL)localEvents; - -#pragma mark - Retrieving String Representation - -/** - * Gets the absolute URL of this Firebase Database location. - * - * @return The absolute URL of the referenced Firebase Database location. - */ -- (NSString *)description; - -#pragma mark - Properties - -/** - * Gets a FIRDatabaseReference for the parent location. - * If this instance refers to the root of your Firebase Database, it has no - * parent, and therefore parent( ) will return null. - * - * @return A FIRDatabaseReference for the parent location. - */ -@property(strong, readonly, nonatomic, nullable) FIRDatabaseReference *parent; - -/** - * Gets a FIRDatabaseReference for the root location - * - * @return A new FIRDatabaseReference to root location. - */ -@property(strong, readonly, nonatomic) FIRDatabaseReference *root; - -/** - * Gets the last token in a Firebase Database location (e.g. 'fred' in - * https://SampleChat.firebaseIO-demo.com/users/fred) - * - * @return The key of the location this reference points to. - */ -@property(strong, readonly, nonatomic, nullable) NSString *key; - -/** - * Gets the URL for the Firebase Database location referenced by this - * FIRDatabaseReference. - * - * @return The url of the location this reference points to. - */ -@property(strong, readonly, nonatomic) NSString *URL; - -/** - * Gets the FIRDatabase instance associated with this reference. - * - * @return The FIRDatabase object for this reference. - */ -@property(strong, readonly, nonatomic) FIRDatabase *database; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRMutableData.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRMutableData.h deleted file mode 100644 index 9797a67..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRMutableData.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -/** - * A FIRMutableData instance is populated with data from a Firebase Database - * location. When you are using runTransactionBlock:, you will be given an - * instance containing the current data at that location. Your block will be - * responsible for updating that instance to the data you wish to save at that - * location, and then returning using [FIRTransactionResult successWithValue:]. - * - * To modify the data, set its value property to any of the native types support - * by Firebase Database: - * - * + NSNumber (includes BOOL) - * + NSDictionary - * + NSArray - * + NSString - * + nil / NSNull to remove the data - * - * Note that changes made to a child FIRMutableData instance will be visible to - * the parent. - */ -NS_SWIFT_NAME(MutableData) -@interface FIRMutableData : NSObject - -#pragma mark - Inspecting and navigating the data - -/** - * Returns boolean indicating whether this mutable data has children. - * - * @return YES if this data contains child nodes. - */ -- (BOOL)hasChildren; - -/** - * Indicates whether this mutable data has a child at the given path. - * - * @param path A path string, consisting either of a single segment, like - * 'child', or multiple segments, 'a/deeper/child' - * @return YES if this data contains a child at the specified relative path - */ -- (BOOL)hasChildAtPath:(NSString *)path; - -/** - * Used to obtain a FIRMutableData instance that encapsulates the data at the - * given relative path. Note that changes made to the child will be visible to - * the parent. - * - * @param path A path string, consisting either of a single segment, like - * 'child', or multiple segments, 'a/deeper/child' - * @return A FIRMutableData instance containing the data at the given path - */ -- (FIRMutableData *)childDataByAppendingPath:(NSString *)path; - -#pragma mark - Properties - -/** - * To modify the data contained by this instance of FIRMutableData, set this to - * any of the native types supported by Firebase Database: - * - * + NSNumber (includes BOOL) - * + NSDictionary - * + NSArray - * + NSString - * + nil / NSNull to remove the data - * - * Note that setting this value will override the priority at this location. - * - * @return The current data at this location as a native object - */ -@property(strong, nonatomic, nullable) id value; - -/** - * Set this property to update the priority of the data at this location. Can be - * set to the following types: - * - * + NSNumber - * + NSString - * + nil / NSNull to remove the priority - * - * @return The priority of the data at this location - */ -@property(strong, nonatomic, nullable) id priority; - -/** - * @return The number of child nodes at this location - */ -@property(readonly, nonatomic) NSUInteger childrenCount; - -/** - * Used to iterate over the children at this location. You can use the native - * for .. in syntax: - * - * for (FIRMutableData* child in data.children) { - * ... - * } - * - * Note that this enumerator operates on an immutable copy of the child list. - * So, you can modify the instance during iteration, but the new additions will - * not be visible until you get a new enumerator. - */ -@property(readonly, nonatomic, strong) NSEnumerator<FIRMutableData *> *children; - -/** - * @return The key name of this node, or nil if it is the top-most location - */ -@property(readonly, nonatomic, strong, nullable) NSString *key; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRServerValue.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRServerValue.h deleted file mode 100644 index 8a169c7..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRServerValue.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -/** - * Placeholder values you may write into Firebase Database as a value or - * priority that will automatically be populated by the Firebase Database - * server. - */ -NS_SWIFT_NAME(ServerValue) -@interface FIRServerValue : NSObject - -/** - * Placeholder value for the number of milliseconds since the Unix epoch - */ -+ (NSDictionary *)timestamp; - -/** - * Returns a placeholder value that can be used to atomically increment the - * current database value by the provided delta. - * - * The delta must be an long or a double value. If the current value is not an - * integer or double, or if the data does not yet exist, the transformation will - * set the data to the delta value. If either of the delta value or the existing - * data are doubles, both values will be interpreted as doubles. Double - * arithmetic and representation of double values follow IEEE 754 semantics. If - * there is positive/negative integer overflow, the sum is calculated as a a - * double. - * - * @param delta the amount to modify the current value atomically. - * @return a placeholder value for modifying data atomically server-side. - */ -+ (NSDictionary *)increment:(NSNumber *)delta NS_SWIFT_NAME(increment(_:)); - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRTransactionResult.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRTransactionResult.h deleted file mode 100644 index 7f5ccc1..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FIRTransactionResult.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRMutableData.h" -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -/** - * Used for runTransactionBlock:. An FIRTransactionResult instance is a - * container for the results of the transaction. - */ -NS_SWIFT_NAME(TransactionResult) -@interface FIRTransactionResult : NSObject - -/** - * Used for runTransactionBlock:. Indicates that the new value should be saved - * at this location - * - * @param value A FIRMutableData instance containing the new value to be set - * @return An FIRTransactionResult instance that can be used as a return value - * from the block given to runTransactionBlock: - */ -+ (FIRTransactionResult *)successWithValue:(FIRMutableData *)value; - -/** - * Used for runTransactionBlock:. Indicates that the current transaction should - * no longer proceed. - * - * @return An FIRTransactionResult instance that can be used as a return value - * from the block given to runTransactionBlock: - */ -+ (FIRTransactionResult *)abort; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FirebaseDatabase.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FirebaseDatabase.h deleted file mode 100644 index ae6b933..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Public/FirebaseDatabase.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FirebaseDatabase_h -#define FirebaseDatabase_h - -#import "FIRDataEventType.h" -#import "FIRDataSnapshot.h" -#import "FIRDatabase.h" -#import "FIRDatabaseQuery.h" -#import "FIRDatabaseReference.h" -#import "FIRMutableData.h" -#import "FIRServerValue.h" -#import "FIRTransactionResult.h" - -#endif /* FirebaseDatabase_h */ diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FConnection.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FConnection.h deleted file mode 100644 index 7198615..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FConnection.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTypedefs.h" -#import "FWebSocketConnection.h" -#import <Foundation/Foundation.h> - -@protocol FConnectionDelegate; - -@interface FConnection : NSObject <FWebSocketDelegate> - -@property(nonatomic, weak) id<FConnectionDelegate> delegate; - -- (id)initWith:(FRepoInfo *)aRepoInfo - andDispatchQueue:(dispatch_queue_t)queue - lastSessionID:(NSString *)lastSessionID; - -- (void)open; -- (void)close; -- (void)sendRequest:(NSDictionary *)dataMsg sensitive:(BOOL)sensitive; - -// FWebSocketDelegate delegate methods -- (void)onMessage:(FWebSocketConnection *)fwebSocket - withMessage:(NSDictionary *)message; -- (void)onDisconnect:(FWebSocketConnection *)fwebSocket - wasEverConnected:(BOOL)everConnected; - -@end - -typedef enum { - DISCONNECT_REASON_SERVER_RESET = 0, - DISCONNECT_REASON_OTHER = 1 -} FDisconnectReason; - -@protocol FConnectionDelegate <NSObject> - -- (void)onReady:(FConnection *)fconnection - atTime:(NSNumber *)timestamp - sessionID:(NSString *)sessionID; -- (void)onDataMessage:(FConnection *)fconnection - withMessage:(NSDictionary *)message; -- (void)onDisconnect:(FConnection *)fconnection - withReason:(FDisconnectReason)reason; -- (void)onKill:(FConnection *)fconnection withReason:(NSString *)reason; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FConnection.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FConnection.m deleted file mode 100644 index a33ebd7..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FConnection.m +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FConnection.h" -#import "FConstants.h" -#import <FirebaseCore/FIRLogger.h> - -typedef enum { - REALTIME_STATE_CONNECTING = 0, - REALTIME_STATE_CONNECTED = 1, - REALTIME_STATE_DISCONNECTED = 2, -} FConnectionState; - -@interface FConnection () { - FConnectionState state; -} - -@property(nonatomic, strong) FWebSocketConnection *conn; -@property(nonatomic, strong) FRepoInfo *repoInfo; - -@end - -#pragma mark - -#pragma mark FConnection implementation - -@implementation FConnection - -@synthesize delegate; -@synthesize conn; -@synthesize repoInfo; - -#pragma mark - -#pragma mark Initializers - -- (id)initWith:(FRepoInfo *)aRepoInfo - andDispatchQueue:(dispatch_queue_t)queue - lastSessionID:(NSString *)lastSessionID { - self = [super init]; - if (self) { - state = REALTIME_STATE_CONNECTING; - self.repoInfo = aRepoInfo; - self.conn = [[FWebSocketConnection alloc] initWith:self.repoInfo - andQueue:queue - lastSessionID:lastSessionID]; - self.conn.delegate = self; - } - return self; -} - -#pragma mark - -#pragma mark Public method implementation - -- (void)open { - FFLog(@"I-RDB082001", @"Calling open in FConnection"); - [self.conn open]; -} - -- (void)closeWithReason:(FDisconnectReason)reason { - if (state != REALTIME_STATE_DISCONNECTED) { - FFLog(@"I-RDB082002", @"Closing realtime connection."); - state = REALTIME_STATE_DISCONNECTED; - - if (self.conn) { - FFLog(@"I-RDB082003", @"Calling close again."); - [self.conn close]; - self.conn = nil; - } - - [self.delegate onDisconnect:self withReason:reason]; - } -} - -- (void)close { - [self closeWithReason:DISCONNECT_REASON_OTHER]; -} - -- (void)sendRequest:(NSDictionary *)dataMsg sensitive:(BOOL)sensitive { - // since this came from the persistent connection, wrap it in a data message - // envelope - NSDictionary *msg = @{ - kFWPRequestType : kFWPRequestTypeData, - kFWPRequestDataPayload : dataMsg - }; - [self sendData:msg sensitive:sensitive]; -} - -#pragma mark - -#pragma mark Helpers - -- (void)sendData:(NSDictionary *)data sensitive:(BOOL)sensitive { - if (state != REALTIME_STATE_CONNECTED) { - @throw [[NSException alloc] - initWithName:@"InvalidConnectionState" - reason:@"Tried to send data on an unconnected FConnection" - userInfo:nil]; - } else { - if (sensitive) { - FFLog(@"I-RDB082004", @"Sending data (contents hidden)"); - } else { - FFLog(@"I-RDB082005", @"Sending: %@", data); - } - [self.conn send:data]; - } -} - -#pragma mark - -#pragma mark FWebSocketConnectinDelegate implementation - -// Corresponds to onConnectionLost in JS -- (void)onDisconnect:(FWebSocketConnection *)fwebSocket - wasEverConnected:(BOOL)everConnected { - - self.conn = nil; - if (!everConnected && state == REALTIME_STATE_CONNECTING) { - FFLog(@"I-RDB082006", @"Realtime connection failed."); - - // Since we failed to connect at all, clear any cached entry for this - // namespace in case the machine went away - [self.repoInfo clearInternalHostCache]; - } else if (state == REALTIME_STATE_CONNECTED) { - FFLog(@"I-RDB082007", @"Realtime connection lost."); - } - - [self close]; -} - -// Corresponds to onMessageReceived in JS -- (void)onMessage:(FWebSocketConnection *)fwebSocket - withMessage:(NSDictionary *)message { - NSString *rawMessageType = - [message objectForKey:kFWPAsyncServerEnvelopeType]; - if (rawMessageType != nil) { - if ([rawMessageType isEqualToString:kFWPAsyncServerDataMessage]) { - [self onDataMessage:[message - objectForKey:kFWPAsyncServerEnvelopeData]]; - } else if ([rawMessageType - isEqualToString:kFWPAsyncServerControlMessage]) { - [self onControl:[message objectForKey:kFWPAsyncServerEnvelopeData]]; - } else { - FFLog(@"I-RDB082008", @"Unrecognized server packet type: %@", - rawMessageType); - } - } else { - FFLog(@"I-RDB082009", @"Unrecognized raw server packet received: %@", - message); - } -} - -- (void)onDataMessage:(NSDictionary *)message { - // we don't do anything with data messages, just kick them up a level - FFLog(@"I-RDB082010", @"Got data message: %@", message); - [self.delegate onDataMessage:self withMessage:message]; -} - -- (void)onControl:(NSDictionary *)message { - FFLog(@"I-RDB082011", @"Got control message: %@", message); - NSString *type = [message objectForKey:kFWPAsyncServerControlMessageType]; - if ([type isEqualToString:kFWPAsyncServerControlMessageShutdown]) { - NSString *reason = - [message objectForKey:kFWPAsyncServerControlMessageData]; - [self onConnectionShutdownWithReason:reason]; - } else if ([type isEqualToString:kFWPAsyncServerControlMessageReset]) { - NSString *host = - [message objectForKey:kFWPAsyncServerControlMessageData]; - [self onReset:host]; - } else if ([type isEqualToString:kFWPAsyncServerHello]) { - NSDictionary *handshakeData = - [message objectForKey:kFWPAsyncServerControlMessageData]; - [self onHandshake:handshakeData]; - } else { - FFLog(@"I-RDB082012", - @"Unknown control message returned from server: %@", message); - } -} - -- (void)onConnectionShutdownWithReason:(NSString *)reason { - FFLog(@"I-RDB082013", - @"Connection shutdown command received. Shutting down..."); - - [self.delegate onKill:self withReason:reason]; - [self close]; -} - -- (void)onHandshake:(NSDictionary *)handshake { - NSNumber *timestamp = - [handshake objectForKey:kFWPAsyncServerHelloTimestamp]; - // NSString* version = [handshake - // objectForKey:kFWPAsyncServerHelloVersion]; - NSString *host = [handshake objectForKey:kFWPAsyncServerHelloConnectedHost]; - NSString *sessionID = [handshake objectForKey:kFWPAsyncServerHelloSession]; - - self.repoInfo.internalHost = host; - - if (state == REALTIME_STATE_CONNECTING) { - [self.conn start]; - [self onConnection:self.conn readyAtTime:timestamp sessionID:sessionID]; - } -} - -- (void)onConnection:(FWebSocketConnection *)conn - readyAtTime:(NSNumber *)timestamp - sessionID:(NSString *)sessionID { - FFLog(@"I-RDB082014", @"Realtime connection established"); - state = REALTIME_STATE_CONNECTED; - - [self.delegate onReady:self atTime:timestamp sessionID:sessionID]; -} - -- (void)onReset:(NSString *)host { - FFLog( - @"I-RDB082015", - @"Got a reset; killing connection to: %@; Updating internalHost to: %@", - repoInfo.internalHost, host); - self.repoInfo.internalHost = host; - - // Explicitly close the connection with SERVER_RESET so calling code knows - // to reconnect immediately. - [self closeWithReason:DISCONNECT_REASON_SERVER_RESET]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FWebSocketConnection.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FWebSocketConnection.h deleted file mode 100644 index abb7474..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FWebSocketConnection.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FSRWebSocket.h" -#import "FUtilities.h" -#import <Foundation/Foundation.h> - -@protocol FWebSocketDelegate; - -@interface FWebSocketConnection : NSObject <FSRWebSocketDelegate> - -@property(nonatomic, weak) id<FWebSocketDelegate> delegate; - -- (id)initWith:(FRepoInfo *)repoInfo - andQueue:(dispatch_queue_t)queue - lastSessionID:(NSString *)lastSessionID; - -- (void)open; -- (void)close; -- (void)start; -- (void)send:(NSDictionary *)dictionary; - -- (void)webSocket:(FSRWebSocket *)webSocket didReceiveMessage:(id)message; -- (void)webSocketDidOpen:(FSRWebSocket *)webSocket; -- (void)webSocket:(FSRWebSocket *)webSocket didFailWithError:(NSError *)error; -- (void)webSocket:(FSRWebSocket *)webSocket - didCloseWithCode:(NSInteger)code - reason:(NSString *)reason - wasClean:(BOOL)wasClean; - -@end - -@protocol FWebSocketDelegate <NSObject> - -- (void)onMessage:(FWebSocketConnection *)fwebSocket - withMessage:(NSDictionary *)message; -- (void)onDisconnect:(FWebSocketConnection *)fwebSocket - wasEverConnected:(BOOL)everConnected; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FWebSocketConnection.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FWebSocketConnection.m deleted file mode 100644 index edcae09..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Realtime/FWebSocketConnection.m +++ /dev/null @@ -1,346 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// Targetted compilation is ONLY for testing. UIKit is weak-linked in actual -// release build. - -#import <Foundation/Foundation.h> - -#import "FConstants.h" -#import "FIRDatabaseReference.h" -#import "FIRDatabase_Private.h" -#import "FStringUtilities.h" -#import "FWebSocketConnection.h" -#import <FirebaseCore/FIRLogger.h> - -#if TARGET_OS_IOS || TARGET_OS_TV -#import <UIKit/UIKit.h> -#endif - -@interface FWebSocketConnection () { - NSMutableString *frame; - BOOL everConnected; - BOOL isClosed; - NSTimer *keepAlive; -} - -- (void)shutdown; -- (void)onClosed; -- (void)closeIfNeverConnected; - -@property(nonatomic, strong) FSRWebSocket *webSocket; -@property(nonatomic, strong) NSNumber *connectionId; -@property(nonatomic, readwrite) int totalFrames; -@property(nonatomic, readonly) BOOL buffering; -@property(nonatomic, readonly) NSString *userAgent; -@property(nonatomic) dispatch_queue_t dispatchQueue; - -- (void)nop:(NSTimer *)timer; - -@end - -@implementation FWebSocketConnection - -@synthesize delegate; -@synthesize webSocket; -@synthesize connectionId; - -- (id)initWith:(FRepoInfo *)repoInfo - andQueue:(dispatch_queue_t)queue - lastSessionID:(NSString *)lastSessionID { - self = [super init]; - if (self) { - everConnected = NO; - isClosed = NO; - self.connectionId = [FUtilities LUIDGenerator]; - self.totalFrames = 0; - self.dispatchQueue = queue; - frame = nil; - - NSString *connectionUrl = - [repoInfo connectionURLWithLastSessionID:lastSessionID]; - NSString *ua = [self userAgent]; - FFLog(@"I-RDB083001", @"(wsc:%@) Connecting to: %@ as %@", - self.connectionId, connectionUrl, ua); - - NSURLRequest *req = [[NSURLRequest alloc] - initWithURL:[[NSURL alloc] initWithString:connectionUrl]]; - self.webSocket = [[FSRWebSocket alloc] initWithURLRequest:req - queue:queue - andUserAgent:ua]; - [self.webSocket setDelegateDispatchQueue:queue]; - self.webSocket.delegate = self; - } - return self; -} - -- (NSString *)userAgent { - NSString *systemVersion; - NSString *deviceName; - BOOL hasUiDeviceClass = NO; - -// Targetted compilation is ONLY for testing. UIKit is weak-linked in actual -// release build. -#if TARGET_OS_IOS || TARGET_OS_TV - Class uiDeviceClass = NSClassFromString(@"UIDevice"); - if (uiDeviceClass) { - systemVersion = [uiDeviceClass currentDevice].systemVersion; - deviceName = [uiDeviceClass currentDevice].model; - hasUiDeviceClass = YES; - } -#endif - - if (!hasUiDeviceClass) { - NSDictionary *systemVersionDictionary = [NSDictionary - dictionaryWithContentsOfFile: - @"/System/Library/CoreServices/SystemVersion.plist"]; - systemVersion = - [systemVersionDictionary objectForKey:@"ProductVersion"]; - deviceName = [systemVersionDictionary objectForKey:@"ProductName"]; - } - - NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier]; - - // Sanitize '/'s in deviceName and bundleIdentifier for stats - deviceName = [FStringUtilities sanitizedForUserAgent:deviceName]; - bundleIdentifier = - [FStringUtilities sanitizedForUserAgent:bundleIdentifier]; - - // Firebase/5/<semver>_<build date>_<git hash>/<os version>/{device model / - // os (Mac OS X, iPhone, etc.}_<bundle id> - NSString *ua = [NSString - stringWithFormat:@"Firebase/%@/%@/%@/%@_%@", kWebsocketProtocolVersion, - [FIRDatabase buildVersion], systemVersion, deviceName, - bundleIdentifier]; - return ua; -} - -- (BOOL)buffering { - return frame != nil; -} - -#pragma mark - -#pragma mark Public FWebSocketConnection methods - -- (void)open { - FFLog(@"I-RDB083002", @"(wsc:%@) FWebSocketConnection open.", - self.connectionId); - assert(delegate); - everConnected = NO; - // TODO Assert url - [self.webSocket open]; - dispatch_time_t when = dispatch_time( - DISPATCH_TIME_NOW, kWebsocketConnectTimeout * NSEC_PER_SEC); - dispatch_after(when, self.dispatchQueue, ^{ - [self closeIfNeverConnected]; - }); -} - -- (void)close { - FFLog(@"I-RDB083003", @"(wsc:%@) FWebSocketConnection is being closed.", - self.connectionId); - isClosed = YES; - [self.webSocket close]; -} - -- (void)start { - // Start is a no-op for websockets. -} - -- (void)send:(NSDictionary *)dictionary { - - [self resetKeepAlive]; - - NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary - options:kNilOptions - error:nil]; - - NSString *data = [[NSString alloc] initWithData:jsonData - encoding:NSUTF8StringEncoding]; - - NSArray *dataSegs = [FUtilities splitString:data - intoMaxSize:kWebsocketMaxFrameSize]; - - // First send the header so the server knows how many segments are - // forthcoming - if (dataSegs.count > 1) { - [self.webSocket - send:[NSString - stringWithFormat:@"%u", (unsigned int)dataSegs.count]]; - } - - // Then, actually send the segments. - for (NSString *segment in dataSegs) { - [self.webSocket send:segment]; - } -} - -- (void)nop:(NSTimer *)timer { - if (!isClosed) { - FFLog(@"I-RDB083004", @"(wsc:%@) nop", self.connectionId); - [self.webSocket send:@"0"]; - } else { - FFLog(@"I-RDB083005", - @"(wsc:%@) No more websocket; invalidating nop timer.", - self.connectionId); - [timer invalidate]; - } -} - -- (void)handleNewFrameCount:(int)numFrames { - self.totalFrames = numFrames; - frame = [[NSMutableString alloc] initWithString:@""]; - FFLog(@"I-RDB083006", @"(wsc:%@) handleNewFrameCount: %d", - self.connectionId, self.totalFrames); -} - -- (NSString *)extractFrameCount:(NSString *)message { - if ([message length] <= 4) { - int frameCount = [message intValue]; - if (frameCount > 0) { - [self handleNewFrameCount:frameCount]; - return nil; - } - } - [self handleNewFrameCount:1]; - return message; -} - -- (void)appendFrame:(NSString *)message { - [frame appendString:message]; - self.totalFrames = self.totalFrames - 1; - - if (self.totalFrames == 0) { - // Call delegate and pass an immutable version of the frame - NSDictionary *json = [NSJSONSerialization - JSONObjectWithData:[frame dataUsingEncoding:NSUTF8StringEncoding] - options:kNilOptions - error:nil]; - frame = nil; - FFLog(@"I-RDB083007", - @"(wsc:%@) handleIncomingFrame sending complete frame: %d", - self.connectionId, self.totalFrames); - - @autoreleasepool { - [self.delegate onMessage:self withMessage:json]; - } - } -} - -- (void)handleIncomingFrame:(NSString *)message { - [self resetKeepAlive]; - if (self.buffering) { - [self appendFrame:message]; - } else { - NSString *remaining = [self extractFrameCount:message]; - if (remaining) { - [self appendFrame:remaining]; - } - } -} - -#pragma mark - -#pragma mark SRWebSocketDelegate implementation -- (void)webSocket:(FSRWebSocket *)webSocket didReceiveMessage:(id)message { - [self handleIncomingFrame:message]; -} - -- (void)webSocketDidOpen:(FSRWebSocket *)webSocket { - FFLog(@"I-RDB083008", @"(wsc:%@) webSocketDidOpen", self.connectionId); - - everConnected = YES; - - dispatch_async(dispatch_get_main_queue(), ^{ - self->keepAlive = - [NSTimer scheduledTimerWithTimeInterval:kWebsocketKeepaliveInterval - target:self - selector:@selector(nop:) - userInfo:nil - repeats:YES]; - FFLog(@"I-RDB083009", @"(wsc:%@) nop timer kicked off", - self.connectionId); - }); -} - -- (void)webSocket:(FSRWebSocket *)webSocket didFailWithError:(NSError *)error { - FFLog(@"I-RDB083010", @"(wsc:%@) didFailWithError didFailWithError: %@", - self.connectionId, [error description]); - [self onClosed]; -} - -- (void)webSocket:(FSRWebSocket *)webSocket - didCloseWithCode:(NSInteger)code - reason:(NSString *)reason - wasClean:(BOOL)wasClean { - FFLog(@"I-RDB083011", @"(wsc:%@) didCloseWithCode: %ld %@", - self.connectionId, (long)code, reason); - [self onClosed]; -} - -#pragma mark - -#pragma mark Private methods - -/** - * Note that the close / onClosed / shutdown cycle here is a little different - * from the javascript client. In order to properly handle deallocation, no - * close-related action is taken at a higher level until we have received - * notification from the websocket itself that it is closed. Otherwise, we end - * up deallocating this class and the FConnection class before the websocket has - * a change to call some of its delegate methods. So, since close is the - * external close handler, we just set a flag saying not to call our own - * delegate method and close the websocket. That will trigger a callback into - * this class that can then do things like clean up the keepalive timer. - */ - -- (void)closeIfNeverConnected { - if (!everConnected) { - FFLog(@"I-RDB083012", @"(wsc:%@) Websocket timed out on connect", - self.connectionId); - [self.webSocket close]; - } -} - -- (void)shutdown { - isClosed = YES; - - // Call delegate methods - [self.delegate onDisconnect:self wasEverConnected:everConnected]; -} - -- (void)onClosed { - if (!isClosed) { - FFLog(@"I-RDB083013", @"Websocket is closing itself"); - [self shutdown]; - } - self.webSocket = nil; - if (keepAlive.isValid) { - [keepAlive invalidate]; - } -} - -- (void)resetKeepAlive { - NSDate *newTime = - [NSDate dateWithTimeIntervalSinceNow:kWebsocketKeepaliveInterval]; - // Calling setFireDate is actually kinda' expensive, so wait at least 5 - // seconds before updating it. - if ([newTime timeIntervalSinceDate:keepAlive.fireDate] > 5) { - FFLog(@"I-RDB083014", @"(wsc:%@) resetting keepalive, to %@ ; old: %@", - self.connectionId, newTime, [keepAlive fireDate]); - [keepAlive setFireDate:newTime]; - } -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FChildrenNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FChildrenNode.h deleted file mode 100644 index cc3239e..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FChildrenNode.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FImmutableSortedDictionary.h" -#import "FNode.h" -#import "FTypedefs.h" -#import "FTypedefs_Private.h" -#import <Foundation/Foundation.h> - -@class FNamedNode; - -@interface FChildrenNode : NSObject <FNode> - -- (id)initWithChildren:(FImmutableSortedDictionary *)someChildren; -- (id)initWithPriority:(id<FNode>)aPriority - children:(FImmutableSortedDictionary *)someChildren; - -// FChildrenNode specific methods - -- (void)enumerateChildrenAndPriorityUsingBlock:(void (^)(NSString *, id<FNode>, - BOOL *))block; - -- (FNamedNode *)firstChild; -- (FNamedNode *)lastChild; - -@property(nonatomic, strong) FImmutableSortedDictionary *children; -@property(nonatomic, strong) id<FNode> priorityNode; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FChildrenNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FChildrenNode.m deleted file mode 100644 index bd02bf8..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FChildrenNode.m +++ /dev/null @@ -1,418 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FChildrenNode.h" -#import "FConstants.h" -#import "FEmptyNode.h" -#import "FMaxNode.h" -#import "FNamedNode.h" -#import "FPriorityIndex.h" -#import "FSnapshotUtilities.h" -#import "FStringUtilities.h" -#import "FTransformedEnumerator.h" -#import "FUtilities.h" - -@interface FChildrenNode () -@property(nonatomic, strong) NSString *lazyHash; -@end - -@implementation FChildrenNode - -// Note: The only reason we allow nil priority is to for EmptyNode, since we -// can't use EmptyNode as the priority of EmptyNode. We might want to consider -// making EmptyNode its own class instead of an empty ChildrenNode. - -- (id)init { - return [self - initWithPriority:nil - children:[FImmutableSortedDictionary - dictionaryWithComparator:[FUtilities - keyComparator]]]; -} - -- (id)initWithChildren:(FImmutableSortedDictionary *)someChildren { - return [self initWithPriority:nil children:someChildren]; -} - -- (id)initWithPriority:(id<FNode>)aPriority - children:(FImmutableSortedDictionary *)someChildren { - if (someChildren.isEmpty && aPriority != nil && ![aPriority isEmpty]) { - [NSException raise:NSInvalidArgumentException - format:@"Can't create empty node with priority!"]; - } - self = [super init]; - if (self) { - self.children = someChildren; - self.priorityNode = aPriority; - } - return self; -} - -- (NSString *)description { - return [[self valForExport:YES] description]; -} - -#pragma mark - -#pragma mark FNode methods - -- (BOOL)isLeafNode { - return NO; -} - -- (id<FNode>)getPriority { - if (self.priorityNode) { - return self.priorityNode; - } else { - return [FEmptyNode emptyNode]; - } -} - -- (id<FNode>)updatePriority:(id<FNode>)aPriority { - if ([self.children isEmpty]) { - return [FEmptyNode emptyNode]; - } else { - return [[FChildrenNode alloc] initWithPriority:aPriority - children:self.children]; - } -} - -- (id<FNode>)getImmediateChild:(NSString *)childName { - if ([childName isEqualToString:@".priority"]) { - return [self getPriority]; - } else { - id<FNode> child = [self.children objectForKey:childName]; - return (child == nil) ? [FEmptyNode emptyNode] : child; - } -} - -- (id<FNode>)getChild:(FPath *)path { - NSString *front = [path getFront]; - if (front == nil) { - return self; - } else { - return [[self getImmediateChild:front] getChild:[path popFront]]; - } -} - -- (BOOL)hasChild:(NSString *)childName { - return ![self getImmediateChild:childName].isEmpty; -} - -- (id<FNode>)updateImmediateChild:(NSString *)childName - withNewChild:(id<FNode>)newChildNode { - NSAssert(newChildNode != nil, @"Should always be passing nodes."); - - if ([childName isEqualToString:@".priority"]) { - return [self updatePriority:newChildNode]; - } else { - FImmutableSortedDictionary *newChildren; - if (newChildNode.isEmpty) { - newChildren = [self.children removeObjectForKey:childName]; - } else { - newChildren = [self.children setObject:newChildNode - forKey:childName]; - } - if (newChildren.isEmpty) { - return [FEmptyNode emptyNode]; - } else { - return [[FChildrenNode alloc] initWithPriority:self.getPriority - children:newChildren]; - } - } -} - -- (id<FNode>)updateChild:(FPath *)path withNewChild:(id<FNode>)newChildNode { - NSString *front = [path getFront]; - if (front == nil) { - return newChildNode; - } else { - NSAssert(![front isEqualToString:@".priority"] || path.length == 1, - @".priority must be the last token in a path."); - id<FNode> newImmediateChild = - [[self getImmediateChild:front] updateChild:[path popFront] - withNewChild:newChildNode]; - return [self updateImmediateChild:front withNewChild:newImmediateChild]; - } -} - -- (BOOL)isEmpty { - return [self.children isEmpty]; -} - -- (int)numChildren { - return [self.children count]; -} - -- (id)val { - return [self valForExport:NO]; -} - -- (id)valForExport:(BOOL)exp { - if ([self isEmpty]) { - return [NSNull null]; - } - - __block int numKeys = 0; - __block NSInteger maxKey = 0; - __block BOOL allIntegerKeys = YES; - - NSMutableDictionary *obj = - [[NSMutableDictionary alloc] initWithCapacity:[self.children count]]; - [self enumerateChildrenUsingBlock:^(NSString *key, id<FNode> childNode, - BOOL *stop) { - [obj setObject:[childNode valForExport:exp] forKey:key]; - - numKeys++; - - // If we already found a string key, don't bother with any of this - if (!allIntegerKeys) { - return; - } - - // Treat leading zeroes that are not exactly "0" as strings - NSString *firstChar = [key substringWithRange:NSMakeRange(0, 1)]; - if ([firstChar isEqualToString:@"0"] && [key length] > 1) { - allIntegerKeys = NO; - } else { - NSNumber *keyAsNum = [FUtilities intForString:key]; - if (keyAsNum != nil) { - NSInteger keyAsInt = [keyAsNum integerValue]; - if (keyAsInt > maxKey) { - maxKey = keyAsInt; - } - } else { - allIntegerKeys = NO; - } - } - }]; - - if (!exp && allIntegerKeys && maxKey < 2 * numKeys) { - // convert to an array - NSMutableArray *array = - [[NSMutableArray alloc] initWithCapacity:maxKey + 1]; - for (int i = 0; i <= maxKey; ++i) { - NSString *keyString = [NSString stringWithFormat:@"%i", i]; - id child = obj[keyString]; - if (child != nil) { - [array addObject:child]; - } else { - [array addObject:[NSNull null]]; - } - } - return array; - } else { - - if (exp && [self getPriority] != nil && !self.getPriority.isEmpty) { - obj[kPayloadPriority] = [self.getPriority val]; - } - - return obj; - } -} - -- (NSString *)dataHash { - if (self.lazyHash == nil) { - NSMutableString *toHash = [[NSMutableString alloc] init]; - - if (!self.getPriority.isEmpty) { - [toHash appendString:@"priority:"]; - [FSnapshotUtilities - appendHashRepresentationForLeafNode:(FLeafNode *) - self.getPriority - toString:toHash - hashVersion:FDataHashVersionV1]; - [toHash appendString:@":"]; - } - - __block BOOL sawPriority = NO; - [self enumerateChildrenUsingBlock:^(NSString *key, id<FNode> node, - BOOL *stop) { - sawPriority = sawPriority || [[node getPriority] isEmpty]; - *stop = sawPriority; - }]; - if (sawPriority) { - NSMutableArray *array = [NSMutableArray array]; - [self enumerateChildrenUsingBlock:^(NSString *key, id<FNode> node, - BOOL *stop) { - FNamedNode *namedNode = [[FNamedNode alloc] initWithName:key - andNode:node]; - [array addObject:namedNode]; - }]; - [array sortUsingComparator:^NSComparisonResult( - FNamedNode *namedNode1, FNamedNode *namedNode2) { - return - [[FPriorityIndex priorityIndex] compareNamedNode:namedNode1 - toNamedNode:namedNode2]; - }]; - [array enumerateObjectsUsingBlock:^(FNamedNode *namedNode, - NSUInteger idx, BOOL *stop) { - NSString *childHash = [namedNode.node dataHash]; - if (![childHash isEqualToString:@""]) { - [toHash appendFormat:@":%@:%@", namedNode.name, childHash]; - } - }]; - } else { - [self enumerateChildrenUsingBlock:^(NSString *key, id<FNode> node, - BOOL *stop) { - NSString *childHash = [node dataHash]; - if (![childHash isEqualToString:@""]) { - [toHash appendFormat:@":%@:%@", key, childHash]; - } - }]; - } - self.lazyHash = [toHash isEqualToString:@""] - ? @"" - : [FStringUtilities base64EncodedSha1:toHash]; - } - return self.lazyHash; -} - -- (NSComparisonResult)compare:(id<FNode>)other { - // children nodes come last, unless this is actually an empty node, then we - // come first. - if (self.isEmpty) { - if (other.isEmpty) { - return NSOrderedSame; - } else { - return NSOrderedAscending; - } - } else if (other.isLeafNode || other.isEmpty) { - return NSOrderedDescending; - } else if (other == [FMaxNode maxNode]) { - return NSOrderedAscending; - } else { - // Must be another node with children. - return NSOrderedSame; - } -} - -- (BOOL)isEqual:(id<FNode>)other { - if (other == self) { - return YES; - } else if (other == nil) { - return NO; - } else if (other.isLeafNode) { - return NO; - } else if (self.isEmpty && [other isEmpty]) { - // Empty nodes do not have priority - return YES; - } else { - FChildrenNode *otherChildrenNode = other; - if (![self.getPriority isEqual:other.getPriority]) { - return NO; - } else if (self.children.count == otherChildrenNode.children.count) { - __block BOOL equal = YES; - [self enumerateChildrenUsingBlock:^(NSString *key, id<FNode> node, - BOOL *stop) { - id<FNode> child = [otherChildrenNode getImmediateChild:key]; - if (![child isEqual:node]) { - equal = NO; - *stop = YES; - } - }]; - return equal; - } else { - return NO; - } - } -} - -- (NSUInteger)hash { - __block NSUInteger hashCode = 0; - [self enumerateChildrenUsingBlock:^(NSString *key, id<FNode> node, - BOOL *stop) { - hashCode = 31 * hashCode + key.hash; - hashCode = 17 * hashCode + node.hash; - }]; - return 17 * hashCode + self.priorityNode.hash; -} - -- (void)enumerateChildrenAndPriorityUsingBlock:(void (^)(NSString *, id<FNode>, - BOOL *))block { - if ([self.getPriority isEmpty]) { - [self enumerateChildrenUsingBlock:block]; - } else { - __block BOOL passedPriorityKey = NO; - [self enumerateChildrenUsingBlock:^(NSString *key, id<FNode> node, - BOOL *stop) { - if (!passedPriorityKey && - [FUtilities compareKey:key - toKey:@".priority"] == NSOrderedDescending) { - passedPriorityKey = YES; - BOOL stopAfterPriority = NO; - block(@".priority", [self getPriority], &stopAfterPriority); - if (stopAfterPriority) - return; - } - block(key, node, stop); - }]; - } -} - -- (void)enumerateChildrenUsingBlock:(void (^)(NSString *, id<FNode>, - BOOL *))block { - [self.children enumerateKeysAndObjectsUsingBlock:block]; -} - -- (void)enumerateChildrenReverse:(BOOL)reverse - usingBlock: - (void (^)(NSString *, id<FNode>, BOOL *))block { - [self.children enumerateKeysAndObjectsReverse:reverse usingBlock:block]; -} - -- (NSEnumerator *)childEnumerator { - return [[FTransformedEnumerator alloc] - initWithEnumerator:self.children.keyEnumerator - andTransform:^id(NSString *key) { - return [FNamedNode nodeWithName:key - node:[self getImmediateChild:key]]; - }]; -} - -- (NSString *)predecessorChildKey:(NSString *)childKey { - return [self.children getPredecessorKey:childKey]; -} - -#pragma mark - -#pragma mark FChildrenNode specific methods - -- (id)childrenGetter:(id)key { - return [self.children objectForKey:key]; -} - -- (FNamedNode *)firstChild { - NSString *childKey = self.children.minKey; - if (childKey) { - return - [[FNamedNode alloc] initWithName:childKey - andNode:[self getImmediateChild:childKey]]; - } else { - return nil; - } -} - -- (FNamedNode *)lastChild { - NSString *childKey = self.children.maxKey; - if (childKey) { - return - [[FNamedNode alloc] initWithName:childKey - andNode:[self getImmediateChild:childKey]]; - } else { - return nil; - } -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FCompoundWrite.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FCompoundWrite.h deleted file mode 100644 index 47de66f..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FCompoundWrite.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@class FImmutableTree; -@protocol FNode; -@class FPath; - -/** - * This class holds a collection of writes that can be applied to nodes in - * unison. It abstracts away the logic with dealing with priority writes and - * multiple nested writes. At any given path, there is only allowed to be one - * write modifying that path. Any write to an existing path or shadowing an - * existing path will modify that existing write to reflect the write added. - */ -@interface FCompoundWrite : NSObject - -- (id)initWithWriteTree:(FImmutableTree *)tree; - -/** - * Creates a compound write with NSDictionary from path string to object - */ -+ (FCompoundWrite *)compoundWriteWithValueDictionary:(NSDictionary *)dictionary; -/** - * Creates a compound write with NSDictionary from path string to node - */ -+ (FCompoundWrite *)compoundWriteWithNodeDictionary:(NSDictionary *)dictionary; - -+ (FCompoundWrite *)emptyWrite; - -- (FCompoundWrite *)addWrite:(id<FNode>)node atPath:(FPath *)path; -- (FCompoundWrite *)addWrite:(id<FNode>)node atKey:(NSString *)key; -- (FCompoundWrite *)addCompoundWrite:(FCompoundWrite *)node - atPath:(FPath *)path; -- (FCompoundWrite *)removeWriteAtPath:(FPath *)path; -- (id<FNode>)rootWrite; -- (BOOL)hasCompleteWriteAtPath:(FPath *)path; -- (id<FNode>)completeNodeAtPath:(FPath *)path; -- (NSArray *)completeChildren; -- (NSDictionary *)childCompoundWrites; -- (FCompoundWrite *)childCompoundWriteAtPath:(FPath *)path; -- (id<FNode>)applyToNode:(id<FNode>)node; -- (void)enumerateWrites:(void (^)(FPath *path, id<FNode> node, - BOOL *stop))block; - -- (NSDictionary *)valForExport:(BOOL)exportFormat; - -- (BOOL)isEmpty; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FCompoundWrite.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FCompoundWrite.m deleted file mode 100644 index bc40b2b..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FCompoundWrite.m +++ /dev/null @@ -1,304 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FCompoundWrite.h" -#import "FImmutableTree.h" -#import "FNamedNode.h" -#import "FNode.h" -#import "FPath.h" -#import "FSnapshotUtilities.h" - -@interface FCompoundWrite () -@property(nonatomic, strong) FImmutableTree *writeTree; -@end - -@implementation FCompoundWrite - -- (id)initWithWriteTree:(FImmutableTree *)tree { - self = [super init]; - if (self) { - self.writeTree = tree; - } - return self; -} - -+ (FCompoundWrite *)compoundWriteWithValueDictionary: - (NSDictionary *)dictionary { - __block FImmutableTree *writeTree = [FImmutableTree empty]; - [dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *pathString, - id value, BOOL *stop) { - id<FNode> node = [FSnapshotUtilities nodeFrom:value]; - FImmutableTree *tree = [[FImmutableTree alloc] initWithValue:node]; - writeTree = [writeTree setTree:tree - atPath:[[FPath alloc] initWith:pathString]]; - }]; - return [[FCompoundWrite alloc] initWithWriteTree:writeTree]; -} - -+ (FCompoundWrite *)compoundWriteWithNodeDictionary:(NSDictionary *)dictionary { - __block FImmutableTree *writeTree = [FImmutableTree empty]; - [dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *pathString, - id node, BOOL *stop) { - FImmutableTree *tree = [[FImmutableTree alloc] initWithValue:node]; - writeTree = [writeTree setTree:tree - atPath:[[FPath alloc] initWith:pathString]]; - }]; - return [[FCompoundWrite alloc] initWithWriteTree:writeTree]; -} - -+ (FCompoundWrite *)emptyWrite { - static dispatch_once_t pred = 0; - static FCompoundWrite *empty = nil; - dispatch_once(&pred, ^{ - empty = [[FCompoundWrite alloc] - initWithWriteTree:[[FImmutableTree alloc] initWithValue:nil]]; - }); - return empty; -} - -- (FCompoundWrite *)addWrite:(id<FNode>)node atPath:(FPath *)path { - if (path.isEmpty) { - return [[FCompoundWrite alloc] - initWithWriteTree:[[FImmutableTree alloc] initWithValue:node]]; - } else { - FTuplePathValue *rootMost = - [self.writeTree findRootMostValueAndPath:path]; - if (rootMost != nil) { - FPath *relativePath = [FPath relativePathFrom:rootMost.path - to:path]; - id<FNode> value = [rootMost.value updateChild:relativePath - withNewChild:node]; - return [[FCompoundWrite alloc] - initWithWriteTree:[self.writeTree setValue:value - atPath:rootMost.path]]; - } else { - FImmutableTree *subtree = - [[FImmutableTree alloc] initWithValue:node]; - FImmutableTree *newWriteTree = [self.writeTree setTree:subtree - atPath:path]; - return [[FCompoundWrite alloc] initWithWriteTree:newWriteTree]; - } - } -} - -- (FCompoundWrite *)addWrite:(id<FNode>)node atKey:(NSString *)key { - return [self addWrite:node atPath:[[FPath alloc] initWith:key]]; -} - -- (FCompoundWrite *)addCompoundWrite:(FCompoundWrite *)compoundWrite - atPath:(FPath *)path { - __block FCompoundWrite *newWrite = self; - [compoundWrite.writeTree forEach:^(FPath *childPath, id<FNode> value) { - newWrite = [newWrite addWrite:value atPath:[path child:childPath]]; - }]; - return newWrite; -} - -/** - * Will remove a write at the given path and deeper paths. This will - * <em>not</em> modify a write at a higher location, which must be removed by - * calling this method with that path. - * @param path The path at which a write and all deeper writes should be - * removed. - * @return The new FWriteCompound with the removed path. - */ -- (FCompoundWrite *)removeWriteAtPath:(FPath *)path { - if (path.isEmpty) { - return [FCompoundWrite emptyWrite]; - } else { - FImmutableTree *newWriteTree = - [self.writeTree setTree:[FImmutableTree empty] atPath:path]; - return [[FCompoundWrite alloc] initWithWriteTree:newWriteTree]; - } -} - -/** - * Returns whether this FCompoundWrite will fully overwrite a node at a given - * location and can therefore be considered "complete". - * @param path The path to check for - * @return Whether there is a complete write at that path. - */ -- (BOOL)hasCompleteWriteAtPath:(FPath *)path { - return [self completeNodeAtPath:path] != nil; -} - -/** - * Returns a node for a path if and only if the node is a "complete" overwrite - * at that path. This will not aggregate writes from depeer paths, but will - * return child nodes from a more shallow path. - * @param path The path to get a complete write - * @return The node if complete at that path, or nil otherwise. - */ -- (id<FNode>)completeNodeAtPath:(FPath *)path { - FTuplePathValue *rootMost = [self.writeTree findRootMostValueAndPath:path]; - if (rootMost != nil) { - FPath *relativePath = [FPath relativePathFrom:rootMost.path to:path]; - return [rootMost.value getChild:relativePath]; - } else { - return nil; - } -} - -// TODO: change into traversal method... -- (NSArray *)completeChildren { - NSMutableArray *children = [[NSMutableArray alloc] init]; - if (self.writeTree.value != nil) { - id<FNode> node = self.writeTree.value; - [node enumerateChildrenUsingBlock:^(NSString *key, id<FNode> node, - BOOL *stop) { - [children addObject:[[FNamedNode alloc] initWithName:key - andNode:node]]; - }]; - } else { - [self.writeTree.children - enumerateKeysAndObjectsUsingBlock:^( - NSString *childKey, FImmutableTree *childTree, BOOL *stop) { - if (childTree.value != nil) { - [children addObject:[[FNamedNode alloc] - initWithName:childKey - andNode:childTree.value]]; - } - }]; - } - return children; -} - -// TODO: change into enumarate method -- (NSDictionary *)childCompoundWrites { - NSMutableDictionary *dict = [NSMutableDictionary dictionary]; - [self.writeTree.children - enumerateKeysAndObjectsUsingBlock:^( - NSString *key, FImmutableTree *childWrite, BOOL *stop) { - dict[key] = [[FCompoundWrite alloc] initWithWriteTree:childWrite]; - }]; - return dict; -} - -- (FCompoundWrite *)childCompoundWriteAtPath:(FPath *)path { - if (path.isEmpty) { - return self; - } else { - id<FNode> shadowingNode = [self completeNodeAtPath:path]; - if (shadowingNode != nil) { - return [[FCompoundWrite alloc] - initWithWriteTree:[[FImmutableTree alloc] - initWithValue:shadowingNode]]; - } else { - return [[FCompoundWrite alloc] - initWithWriteTree:[self.writeTree subtreeAtPath:path]]; - } - } -} - -- (id<FNode>)applySubtreeWrite:(FImmutableTree *)subtreeWrite - atPath:(FPath *)relativePath - toNode:(id<FNode>)node { - if (subtreeWrite.value != nil) { - // Since a write there is always a leaf, we're done here. - return [node updateChild:relativePath withNewChild:subtreeWrite.value]; - } else { - __block id<FNode> priorityWrite = nil; - __block id<FNode> blockNode = node; - [subtreeWrite.children - enumerateKeysAndObjectsUsingBlock:^( - NSString *childKey, FImmutableTree *childTree, BOOL *stop) { - if ([childKey isEqualToString:@".priority"]) { - // Apply priorities at the end so we don't update priorities - // for either empty nodes or forget to apply priorities to - // empty nodes that are later filled. - NSAssert(childTree.value != nil, - @"Priority writes must always be leaf nodes"); - priorityWrite = childTree.value; - } else { - blockNode = [self - applySubtreeWrite:childTree - atPath:[relativePath childFromString:childKey] - toNode:blockNode]; - } - }]; - // If there was a priority write, we only apply it if the node is not - // empty - if (![blockNode getChild:relativePath].isEmpty && - priorityWrite != nil) { - blockNode = [blockNode - updateChild:[relativePath childFromString:@".priority"] - withNewChild:priorityWrite]; - } - return blockNode; - } -} - -- (void)enumerateWrites:(void (^)(FPath *, id<FNode>, BOOL *))block { - __block BOOL stop = NO; - // TODO: add stop to tree iterator... - [self.writeTree forEach:^(FPath *path, id value) { - if (!stop) { - block(path, value, &stop); - } - }]; -} - -/** - * Applies this FCompoundWrite to a node. The node is returned with all writes - * from this FCompoundWrite applied to the node. - * @param node The node to apply this FCompoundWrite to - * @return The node with all writes applied - */ -- (id<FNode>)applyToNode:(id<FNode>)node { - return [self applySubtreeWrite:self.writeTree - atPath:[FPath empty] - toNode:node]; -} - -/** - * Return true if this CompoundWrite is empty and therefore does not modify any - * nodes. - * @return Whether this CompoundWrite is empty - */ -- (BOOL)isEmpty { - return self.writeTree.isEmpty; -} - -- (id<FNode>)rootWrite { - return self.writeTree.value; -} - -- (BOOL)isEqual:(id)object { - if (![object isKindOfClass:[FCompoundWrite class]]) { - return NO; - } - FCompoundWrite *other = (FCompoundWrite *)object; - return - [[self valForExport:YES] isEqualToDictionary:[other valForExport:YES]]; -} - -- (NSUInteger)hash { - return [[self valForExport:YES] hash]; -} - -- (NSDictionary *)valForExport:(BOOL)exportFormat { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - [self.writeTree forEach:^(FPath *path, id<FNode> value) { - dictionary[path.wireFormat] = [value valForExport:exportFormat]; - }]; - return dictionary; -} - -- (NSString *)description { - return [[self valForExport:YES] description]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FEmptyNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FEmptyNode.h deleted file mode 100644 index d002df0..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FEmptyNode.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FNode.h" -#import <Foundation/Foundation.h> - -@interface FEmptyNode : NSObject - -+ (id<FNode>)emptyNode; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FEmptyNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FEmptyNode.m deleted file mode 100644 index bde3a8a..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FEmptyNode.m +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FEmptyNode.h" -#import "FChildrenNode.h" - -@implementation FEmptyNode - -+ (id<FNode>)emptyNode { - static FChildrenNode *empty = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - empty = [[FChildrenNode alloc] init]; - }); - return empty; -} -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FIndexedNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FIndexedNode.h deleted file mode 100644 index b161dea..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FIndexedNode.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import "FIndex.h" -#import "FNamedNode.h" -#import "FNode.h" - -/** - * Represents a node together with an index. The index and node are updated in - * unison. In the case where the index does not affect the ordering (i.e. the - * ordering is identical to the key ordering) this class uses a fallback index - * to save memory. Everything operating on the index must special case the - * fallback index. - */ -@interface FIndexedNode : NSObject - -@property(nonatomic, strong, readonly) id<FNode> node; - -+ (FIndexedNode *)indexedNodeWithNode:(id<FNode>)node; -+ (FIndexedNode *)indexedNodeWithNode:(id<FNode>)node index:(id<FIndex>)index; - -- (BOOL)hasIndex:(id<FIndex>)index; -- (FIndexedNode *)updateChild:(NSString *)key - withNewChild:(id<FNode>)newChildNode; -- (FIndexedNode *)updatePriority:(id<FNode>)priority; - -- (FNamedNode *)firstChild; -- (FNamedNode *)lastChild; - -- (NSString *)predecessorForChildKey:(NSString *)childKey - childNode:(id<FNode>)childNode - index:(id<FIndex>)index; - -- (void)enumerateChildrenReverse:(BOOL)reverse - usingBlock:(void (^)(NSString *key, id<FNode> node, - BOOL *stop))block; - -- (NSEnumerator *)childEnumerator; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FIndexedNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FIndexedNode.m deleted file mode 100644 index dafe9c3..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FIndexedNode.m +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIndexedNode.h" - -#import "FChildrenNode.h" -#import "FImmutableSortedSet.h" -#import "FIndex.h" -#import "FKeyIndex.h" -#import "FPriorityIndex.h" - -static FImmutableSortedSet *FALLBACK_INDEX; - -@interface FIndexedNode () - -@property(nonatomic, strong) id<FNode> node; -/** - * The indexed set is initialized lazily to prevent creation when it is not - * needed - */ -@property(nonatomic, strong) FImmutableSortedSet *indexed; -@property(nonatomic, strong) id<FIndex> index; - -@end - -@implementation FIndexedNode - -+ (FImmutableSortedSet *)fallbackIndex { - static FImmutableSortedSet *fallbackIndex; - static dispatch_once_t once; - dispatch_once(&once, ^{ - fallbackIndex = [[FImmutableSortedSet alloc] init]; - }); - return fallbackIndex; -} - -+ (FIndexedNode *)indexedNodeWithNode:(id<FNode>)node { - return [[FIndexedNode alloc] initWithNode:node - index:[FPriorityIndex priorityIndex]]; -} - -+ (FIndexedNode *)indexedNodeWithNode:(id<FNode>)node index:(id<FIndex>)index { - return [[FIndexedNode alloc] initWithNode:node index:index]; -} - -- (id)initWithNode:(id<FNode>)node index:(id<FIndex>)index { - // Initialize indexed lazily - return [self initWithNode:node index:index indexed:nil]; -} - -- (id)initWithNode:(id<FNode>)node - index:(id<FIndex>)index - indexed:(FImmutableSortedSet *)indexed { - self = [super init]; - if (self != nil) { - self->_node = node; - self->_index = index; - self->_indexed = indexed; - } - return self; -} - -- (void)ensureIndexed { - if (!self.indexed) { - if ([self.index isEqual:[FKeyIndex keyIndex]]) { - self.indexed = [FIndexedNode fallbackIndex]; - } else { - __block BOOL sawChild = NO; - [self.node enumerateChildrenUsingBlock:^( - NSString *key, id<FNode> node, BOOL *stop) { - sawChild = sawChild || [self.index isDefinedOn:node]; - *stop = sawChild; - }]; - if (sawChild) { - NSMutableDictionary *dict = [NSMutableDictionary dictionary]; - [self.node enumerateChildrenUsingBlock:^( - NSString *key, id<FNode> node, BOOL *stop) { - FNamedNode *namedNode = - [[FNamedNode alloc] initWithName:key andNode:node]; - dict[namedNode] = [NSNull null]; - }]; - // Make sure to assign index here, because the comparator will - // be retained and using self will cause a cycle - id<FIndex> index = self.index; - self.indexed = [FImmutableSortedSet - setWithKeysFromDictionary:dict - comparator:^NSComparisonResult( - FNamedNode *namedNode1, - FNamedNode *namedNode2) { - return [index compareNamedNode:namedNode1 - toNamedNode:namedNode2]; - }]; - } else { - self.indexed = [FIndexedNode fallbackIndex]; - } - } - } -} - -- (BOOL)hasIndex:(id<FIndex>)index { - return [self.index isEqual:index]; -} - -- (FIndexedNode *)updateChild:(NSString *)key - withNewChild:(id<FNode>)newChildNode { - id<FNode> newNode = [self.node updateImmediateChild:key - withNewChild:newChildNode]; - if (self.indexed == [FIndexedNode fallbackIndex] && - ![self.index isDefinedOn:newChildNode]) { - // doesn't affect the index, no need to create an index - return [[FIndexedNode alloc] initWithNode:newNode - index:self.index - indexed:[FIndexedNode fallbackIndex]]; - } else if (!self.indexed || self.indexed == [FIndexedNode fallbackIndex]) { - // No need to index yet, index lazily - return [[FIndexedNode alloc] initWithNode:newNode index:self.index]; - } else { - id<FNode> oldChild = [self.node getImmediateChild:key]; - FImmutableSortedSet *newIndexed = [self.indexed - removeObject:[FNamedNode nodeWithName:key node:oldChild]]; - if (![newChildNode isEmpty]) { - newIndexed = [newIndexed - addObject:[FNamedNode nodeWithName:key node:newChildNode]]; - } - return [[FIndexedNode alloc] initWithNode:newNode - index:self.index - indexed:newIndexed]; - } -} - -- (FIndexedNode *)updatePriority:(id<FNode>)priority { - return - [[FIndexedNode alloc] initWithNode:[self.node updatePriority:priority] - index:self.index - indexed:self.indexed]; -} - -- (FNamedNode *)firstChild { - if (![self.node isKindOfClass:[FChildrenNode class]]) { - return nil; - } else { - [self ensureIndexed]; - if (self.indexed == [FIndexedNode fallbackIndex]) { - return [((FChildrenNode *)self.node) firstChild]; - } else { - return self.indexed.firstObject; - } - } -} - -- (FNamedNode *)lastChild { - if (![self.node isKindOfClass:[FChildrenNode class]]) { - return nil; - } else { - [self ensureIndexed]; - if (self.indexed == [FIndexedNode fallbackIndex]) { - return [((FChildrenNode *)self.node) lastChild]; - } else { - return self.indexed.lastObject; - } - } -} - -- (NSString *)predecessorForChildKey:(NSString *)childKey - childNode:(id<FNode>)childNode - index:(id<FIndex>)index { - if (![self.index isEqual:index]) { - [NSException raise:NSInvalidArgumentException - format:@"Index not available in IndexedNode!"]; - } - [self ensureIndexed]; - if (self.indexed == [FIndexedNode fallbackIndex]) { - return [self.node predecessorChildKey:childKey]; - } else { - FNamedNode *node = [self.indexed - predecessorEntry:[FNamedNode nodeWithName:childKey node:childNode]]; - return node.name; - } -} - -- (void)enumerateChildrenReverse:(BOOL)reverse - usingBlock: - (void (^)(NSString *, id<FNode>, BOOL *))block { - [self ensureIndexed]; - if (self.indexed == [FIndexedNode fallbackIndex]) { - [self.node enumerateChildrenReverse:reverse usingBlock:block]; - } else { - [self.indexed - enumerateObjectsReverse:reverse - usingBlock:^(FNamedNode *namedNode, BOOL *stop) { - block(namedNode.name, namedNode.node, stop); - }]; - } -} - -- (NSEnumerator *)childEnumerator { - [self ensureIndexed]; - if (self.indexed == [FIndexedNode fallbackIndex]) { - return [self.node childEnumerator]; - } else { - return [self.indexed objectEnumerator]; - } -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FLeafNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FLeafNode.h deleted file mode 100644 index 6bd2862..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FLeafNode.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FNode.h" -#import <Foundation/Foundation.h> - -@interface FLeafNode : NSObject <FNode> - -- (id)initWithValue:(id)aValue; -- (id)initWithValue:(id)aValue withPriority:(id<FNode>)aPriority; - -@property(nonatomic, strong) id value; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FLeafNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FLeafNode.m deleted file mode 100644 index e741fd9..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FLeafNode.m +++ /dev/null @@ -1,266 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FLeafNode.h" -#import "FChildrenNode.h" -#import "FConstants.h" -#import "FEmptyNode.h" -#import "FImmutableSortedDictionary.h" -#import "FSnapshotUtilities.h" -#import "FStringUtilities.h" -#import "FUtilities.h" - -@interface FLeafNode () -@property(nonatomic, strong) id<FNode> priorityNode; -@property(nonatomic, strong) NSString *lazyHash; - -@end - -@implementation FLeafNode - -@synthesize value; -@synthesize priorityNode; - -- (id)initWithValue:(id)aValue { - self = [super init]; - if (self) { - self.value = aValue; - self.priorityNode = [FEmptyNode emptyNode]; - } - return self; -} - -- (id)initWithValue:(id)aValue withPriority:(id<FNode>)aPriority { - self = [super init]; - if (self) { - self.value = aValue; - [FSnapshotUtilities validatePriorityNode:aPriority]; - self.priorityNode = aPriority; - } - return self; -} - -#pragma mark - -#pragma mark FNode methods - -- (BOOL)isLeafNode { - return YES; -} - -- (id<FNode>)getPriority { - return self.priorityNode; -} - -- (id<FNode>)updatePriority:(id<FNode>)aPriority { - return [[FLeafNode alloc] initWithValue:self.value withPriority:aPriority]; -} - -- (id<FNode>)getImmediateChild:(NSString *)childName { - if ([childName isEqualToString:@".priority"]) { - return self.priorityNode; - } else { - return [FEmptyNode emptyNode]; - } -} - -- (id<FNode>)getChild:(FPath *)path { - if (path.getFront == nil) { - return self; - } else if ([[path getFront] isEqualToString:@".priority"]) { - return [self getPriority]; - } else { - return [FEmptyNode emptyNode]; - } -} - -- (BOOL)hasChild:(NSString *)childName { - return - [childName isEqualToString:@".priority"] && ![self getPriority].isEmpty; -} - -- (NSString *)predecessorChildKey:(NSString *)childKey { - return nil; -} - -- (id<FNode>)updateImmediateChild:(NSString *)childName - withNewChild:(id<FNode>)newChildNode { - if ([childName isEqualToString:@".priority"]) { - return [self updatePriority:newChildNode]; - } else if (newChildNode.isEmpty) { - return self; - } else { - FChildrenNode *childrenNode = [[FChildrenNode alloc] init]; - childrenNode = [childrenNode updateImmediateChild:childName - withNewChild:newChildNode]; - childrenNode = [childrenNode updatePriority:self.priorityNode]; - return childrenNode; - } -} - -- (id<FNode>)updateChild:(FPath *)path withNewChild:(id<FNode>)newChildNode { - NSString *front = [path getFront]; - if (front == nil) { - return newChildNode; - } else if (newChildNode.isEmpty && ![front isEqualToString:@".priority"]) { - return self; - } else { - NSAssert(![front isEqualToString:@".priority"] || path.length == 1, - @".priority must be the last token in a path."); - return [self updateImmediateChild:front - withNewChild:[[FEmptyNode emptyNode] - updateChild:[path popFront] - withNewChild:newChildNode]]; - } -} - -- (id)val { - return [self valForExport:NO]; -} - -- (id)valForExport:(BOOL)exp { - if (exp && !self.getPriority.isEmpty) { - return @{ - kPayloadValue : self.value, - kPayloadPriority : [[self getPriority] val] - }; - } else { - return self.value; - } -} - -- (BOOL)isEqual:(id<FNode>)other { - if (other == self) { - return YES; - } else if (other.isLeafNode) { - FLeafNode *otherLeaf = other; - if ([FUtilities getJavascriptType:self.value] != - [FUtilities getJavascriptType:otherLeaf.value]) { - return NO; - } - return [otherLeaf.value isEqual:self.value] && - [otherLeaf.priorityNode isEqual:self.priorityNode]; - } else { - return NO; - } -} - -- (NSUInteger)hash { - return [self.value hash] * 17 + self.priorityNode.hash; -} - -- (id<FNode>)withIndex:(id<FIndex>)index { - return self; -} - -- (BOOL)isIndexed:(id<FIndex>)index { - return YES; -} - -- (BOOL)isEmpty { - return NO; -} - -- (int)numChildren { - return 0; -} - -- (void)enumerateChildrenUsingBlock:(void (^)(NSString *, id<FNode>, - BOOL *))block { - // Nothing to iterate over -} - -- (void)enumerateChildrenReverse:(BOOL)reverse - usingBlock: - (void (^)(NSString *, id<FNode>, BOOL *))block { - // Nothing to iterate over -} - -- (NSEnumerator *)childEnumerator { - // Nothing to iterate over - return [@[] objectEnumerator]; -} - -- (NSString *)dataHash { - if (self.lazyHash == nil) { - NSMutableString *toHash = [[NSMutableString alloc] init]; - [FSnapshotUtilities - appendHashRepresentationForLeafNode:self - toString:toHash - hashVersion:FDataHashVersionV1]; - - self.lazyHash = [FStringUtilities base64EncodedSha1:toHash]; - } - return self.lazyHash; -} - -- (NSComparisonResult)compare:(id<FNode>)other { - if (other == [FEmptyNode emptyNode]) { - return NSOrderedDescending; - } else if ([other isKindOfClass:[FChildrenNode class]]) { - return NSOrderedAscending; - } else { - NSAssert(other.isLeafNode, @"Compared against unknown type of node."); - return [self compareToLeafNode:(FLeafNode *)other]; - } -} - -+ (NSArray *)valueTypeOrder { - static NSArray *valueOrder = nil; - static dispatch_once_t once; - dispatch_once(&once, ^{ - valueOrder = @[ - kJavaScriptObject, kJavaScriptBoolean, kJavaScriptNumber, - kJavaScriptString - ]; - }); - return valueOrder; -} - -- (NSComparisonResult)compareToLeafNode:(FLeafNode *)other { - NSString *thisLeafType = [FUtilities getJavascriptType:self.value]; - NSString *otherLeafType = [FUtilities getJavascriptType:other.value]; - NSUInteger thisIndex = - [[FLeafNode valueTypeOrder] indexOfObject:thisLeafType]; - NSUInteger otherIndex = - [[FLeafNode valueTypeOrder] indexOfObject:otherLeafType]; - assert(thisIndex >= 0 && otherIndex >= 0); - if (otherIndex == thisIndex) { - // Same type. Compare values. - if (thisLeafType == kJavaScriptObject) { - // Deferred value nodes are all equal, but we should also never get - // to this point... - return NSOrderedSame; - } else if (thisLeafType == kJavaScriptString) { - return [self.value compare:other.value options:NSLiteralSearch]; - } else { - return [self.value compare:other.value]; - } - } else { - return thisIndex > otherIndex ? NSOrderedDescending - : NSOrderedAscending; - } -} - -- (NSString *)description { - return [[self valForExport:YES] description]; -} - -- (void)forEachChildDo:(fbt_bool_nsstring_node)action { - // There are no children, so there is nothing to do. - return; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FNode.h deleted file mode 100644 index ea251b6..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FNode.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FPath.h" -#import "FTypedefs_Private.h" -#import <Foundation/Foundation.h> - -@protocol FIndex; - -@protocol FNode <NSObject> - -- (BOOL)isLeafNode; -- (id<FNode>)getPriority; -- (id<FNode>)updatePriority:(id<FNode>)priority; -- (id<FNode>)getImmediateChild:(NSString *)childKey; -- (id<FNode>)getChild:(FPath *)path; -- (NSString *)predecessorChildKey:(NSString *)childKey; -- (id<FNode>)updateImmediateChild:(NSString *)childKey - withNewChild:(id<FNode>)newChildNode; -- (id<FNode>)updateChild:(FPath *)path withNewChild:(id<FNode>)newChildNode; -- (BOOL)hasChild:(NSString *)childKey; -- (BOOL)isEmpty; -- (int)numChildren; -- (id)val; -- (id)valForExport:(BOOL)exp; -- (NSString *)dataHash; -- (NSComparisonResult)compare:(id<FNode>)other; -- (BOOL)isEqual:(id<FNode>)other; -- (void)enumerateChildrenUsingBlock:(void (^)(NSString *key, id<FNode> node, - BOOL *stop))block; -- (void)enumerateChildrenReverse:(BOOL)reverse - usingBlock:(void (^)(NSString *key, id<FNode> node, - BOOL *stop))block; - -- (NSEnumerator *)childEnumerator; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FSnapshotUtilities.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FSnapshotUtilities.h deleted file mode 100644 index bf44660..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FSnapshotUtilities.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FNode.h" -#import <Foundation/Foundation.h> - -@class FImmutableSortedDictionary; -@class FCompoundWrite; -@class FLeafNode; -@protocol FNode; - -typedef NS_ENUM(NSInteger, FDataHashVersion) { - FDataHashVersionV1, - FDataHashVersionV2, -}; - -@interface FSnapshotUtilities : NSObject - -+ (id<FNode>)nodeFrom:(id)val; -+ (id<FNode>)nodeFrom:(id)val priority:(id)priority; -+ (id<FNode>)nodeFrom:(id)val withValidationFrom:(NSString *)fn; -+ (id<FNode>)nodeFrom:(id)val - priority:(id)priority - withValidationFrom:(NSString *)fn; -+ (FCompoundWrite *)compoundWriteFromDictionary:(NSDictionary *)values - withValidationFrom:(NSString *)fn; -+ (void)validatePriorityNode:(id<FNode>)priorityNode; -+ (void)appendHashRepresentationForLeafNode:(FLeafNode *)val - toString:(NSMutableString *)string - hashVersion:(FDataHashVersion)hashVersion; -+ (void)appendHashV2RepresentationForString:(NSString *)string - toString:(NSMutableString *)mutableString; - -+ (NSUInteger)estimateSerializedNodeSize:(id<FNode>)node; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FSnapshotUtilities.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FSnapshotUtilities.m deleted file mode 100644 index f3f9ed5..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Snapshot/FSnapshotUtilities.m +++ /dev/null @@ -1,394 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FSnapshotUtilities.h" -#import "FChildrenNode.h" -#import "FCompoundWrite.h" -#import "FConstants.h" -#import "FEmptyNode.h" -#import "FLLRBValueNode.h" -#import "FLeafNode.h" -#import "FMaxNode.h" -#import "FNamedNode.h" -#import "FUtilities.h" -#import "FValidation.h" - -@implementation FSnapshotUtilities - -+ (id<FNode>)nodeFrom:(id)val { - return [FSnapshotUtilities nodeFrom:val priority:nil]; -} - -+ (id<FNode>)nodeFrom:(id)val priority:(id)priority { - return [FSnapshotUtilities nodeFrom:val - priority:priority - withValidationFrom:@"nodeFrom:priority:"]; -} - -+ (id<FNode>)nodeFrom:(id)val withValidationFrom:(NSString *)fn { - return [FSnapshotUtilities nodeFrom:val priority:nil withValidationFrom:fn]; -} - -+ (id<FNode>)nodeFrom:(id)val - priority:(id)priority - withValidationFrom:(NSString *)fn { - return [FSnapshotUtilities nodeFrom:val - priority:priority - withValidationFrom:fn - atDepth:0 - path:[[NSMutableArray alloc] init]]; -} - -+ (id<FNode>)nodeFrom:(id)val - priority:(id)aPriority - withValidationFrom:(NSString *)fn - atDepth:(int)depth - path:(NSMutableArray *)path { - @autoreleasepool { - return [FSnapshotUtilities internalNodeFrom:val - priority:aPriority - withValidationFrom:fn - atDepth:depth - path:path]; - } -} - -+ (id<FNode>)internalNodeFrom:(id)val - priority:(id)aPriority - withValidationFrom:(NSString *)fn - atDepth:(int)depth - path:(NSMutableArray *)path { - - if (depth > kFirebaseMaxObjectDepth) { - NSRange range; - range.location = 0; - range.length = 100; - NSString *pathString = - [[path subarrayWithRange:range] componentsJoinedByString:@"."]; - @throw [[NSException alloc] - initWithName:@"InvalidFirebaseData" - reason:[NSString stringWithFormat: - @"(%@) Max object depth exceeded: %@...", - fn, pathString] - userInfo:nil]; - } - - if (val == nil || val == [NSNull null]) { - // Null is a valid type to store - return [FEmptyNode emptyNode]; - } - - [FValidation validateFrom:fn isValidPriorityValue:aPriority withPath:path]; - id<FNode> priority = [FSnapshotUtilities nodeFrom:aPriority]; - - id value = val; - BOOL isLeafNode = NO; - - if ([value isKindOfClass:[NSDictionary class]]) { - NSDictionary *dict = val; - if (dict[kPayloadPriority] != nil) { - id rawPriority = [dict objectForKey:kPayloadPriority]; - [FValidation validateFrom:fn - isValidPriorityValue:rawPriority - withPath:path]; - priority = [FSnapshotUtilities nodeFrom:rawPriority]; - } - - if (dict[kPayloadValue] != nil) { - value = [dict objectForKey:kPayloadValue]; - if ([FValidation validateFrom:fn - isValidLeafValue:value - withPath:path]) { - isLeafNode = YES; - } else { - @throw [[NSException alloc] - initWithName:@"InvalidLeafValueType" - reason:[NSString stringWithFormat: - @"(%@) Invalid data type used " - @"with .value. Can only use " - "NSString and NSNumber or be " - "null. Found %@ instead.", - fn, [[value class] description]] - userInfo:nil]; - } - } - } - - if ([FValidation validateFrom:fn isValidLeafValue:value withPath:path]) { - isLeafNode = YES; - } - - if (isLeafNode) { - return [[FLeafNode alloc] initWithValue:value withPriority:priority]; - } - - // Unlike with JS, we have to handle the dictionary and array cases - // separately. - if ([value isKindOfClass:[NSDictionary class]]) { - NSDictionary *dval = (NSDictionary *)value; - NSMutableDictionary *children = - [NSMutableDictionary dictionaryWithCapacity:dval.count]; - - // Avoid creating a million newPaths by appending to old one - for (id keyId in dval) { - [FValidation validateFrom:fn - validDictionaryKey:keyId - withPath:path]; - NSString *key = (NSString *)keyId; - - if (![key hasPrefix:kPayloadMetadataPrefix]) { - [path addObject:key]; - id<FNode> childNode = [FSnapshotUtilities nodeFrom:dval[key] - priority:nil - withValidationFrom:fn - atDepth:depth + 1 - path:path]; - [path removeLastObject]; - - if (![childNode isEmpty]) { - children[key] = childNode; - } - } - } - - if ([children count] == 0) { - return [FEmptyNode emptyNode]; - } else { - FImmutableSortedDictionary *childrenDict = - [FImmutableSortedDictionary - fromDictionary:children - withComparator:[FUtilities keyComparator]]; - return [[FChildrenNode alloc] initWithPriority:priority - children:childrenDict]; - } - } else if ([value isKindOfClass:[NSArray class]]) { - NSArray *aval = (NSArray *)value; - NSMutableDictionary *children = - [NSMutableDictionary dictionaryWithCapacity:aval.count]; - - for (int i = 0; i < [aval count]; i++) { - NSString *key = [NSString stringWithFormat:@"%i", i]; - [path addObject:key]; - id<FNode> childNode = - [FSnapshotUtilities nodeFrom:[aval objectAtIndex:i] - priority:nil - withValidationFrom:fn - atDepth:depth + 1 - path:path]; - [path removeLastObject]; - - if (![childNode isEmpty]) { - children[key] = childNode; - } - } - - if ([children count] == 0) { - return [FEmptyNode emptyNode]; - } else { - FImmutableSortedDictionary *childrenDict = - [FImmutableSortedDictionary - fromDictionary:children - withComparator:[FUtilities keyComparator]]; - return [[FChildrenNode alloc] initWithPriority:priority - children:childrenDict]; - } - } else { - NSRange range; - range.location = 0; - range.length = MIN(path.count, 50); - NSString *pathString = - [[path subarrayWithRange:range] componentsJoinedByString:@"."]; - - @throw [[NSException alloc] - initWithName:@"InvalidFirebaseData" - reason:[NSString - stringWithFormat: - @"(%@) Cannot store object of type %@ at %@. " - "Can only store objects of type NSNumber, " - "NSString, NSDictionary, and NSArray.", - fn, [[value class] description], pathString] - userInfo:nil]; - } -} - -+ (FCompoundWrite *)compoundWriteFromDictionary:(NSDictionary *)values - withValidationFrom:(NSString *)fn { - FCompoundWrite *compoundWrite = [FCompoundWrite emptyWrite]; - - NSMutableArray *updatePaths = - [NSMutableArray arrayWithCapacity:values.count]; - for (NSString *keyId in values) { - id value = values[keyId]; - [FValidation validateFrom:fn - validUpdateDictionaryKey:keyId - withValue:value]; - - FPath *path = [FPath pathWithString:keyId]; - id<FNode> node = [FSnapshotUtilities nodeFrom:value - withValidationFrom:fn]; - - [updatePaths addObject:path]; - compoundWrite = [compoundWrite addWrite:node atPath:path]; - } - - // Check that the update paths are not descendants of each other. - [updatePaths - sortUsingComparator:^NSComparisonResult(FPath *left, FPath *right) { - return [left compare:right]; - }]; - FPath *prevPath = nil; - for (FPath *path in updatePaths) { - if (prevPath != nil && [prevPath contains:path]) { - @throw [[NSException alloc] - initWithName:@"InvalidFirebaseData" - reason:[NSString stringWithFormat: - @"(%@) Invalid path in object. Path " - @"(%@) is an ancestor of (%@).", - fn, prevPath, path] - userInfo:nil]; - } - prevPath = path; - } - - return compoundWrite; -} - -+ (void)validatePriorityNode:(id<FNode>)priorityNode { - assert(priorityNode != nil); - if (priorityNode.isLeafNode) { - id val = priorityNode.val; - if ([val isKindOfClass:[NSDictionary class]]) { - NSDictionary *valDict __unused = (NSDictionary *)val; - NSAssert(valDict[kServerValueSubKey] != nil, - @"Priority can't be object unless it's a deferred value"); - } else { - NSString *jsType __unused = [FUtilities getJavascriptType:val]; - NSAssert(jsType == kJavaScriptString || jsType == kJavaScriptNumber, - @"Priority of unexpected type."); - } - } else { - NSAssert(priorityNode == [FMaxNode maxNode] || priorityNode.isEmpty, - @"Priority of unexpected type."); - } - // Don't call getPriority() on MAX_NODE to avoid hitting assertion. - NSAssert(priorityNode == [FMaxNode maxNode] || - priorityNode.getPriority.isEmpty, - @"Priority nodes can't have a priority of their own."); -} - -+ (void)appendHashRepresentationForLeafNode:(FLeafNode *)leafNode - toString:(NSMutableString *)string - hashVersion:(FDataHashVersion)hashVersion { - NSAssert(hashVersion == FDataHashVersionV1 || - hashVersion == FDataHashVersionV2, - @"Unknown hash version: %lu", (unsigned long)hashVersion); - if (!leafNode.getPriority.isEmpty) { - [string appendString:@"priority:"]; - [FSnapshotUtilities - appendHashRepresentationForLeafNode:leafNode.getPriority - toString:string - hashVersion:hashVersion]; - [string appendString:@":"]; - } - - NSString *jsType = [FUtilities getJavascriptType:leafNode.val]; - [string appendString:jsType]; - [string appendString:@":"]; - - if (jsType == kJavaScriptBoolean) { - NSString *boolString = - [leafNode.val boolValue] ? kJavaScriptTrue : kJavaScriptFalse; - [string appendString:boolString]; - } else if (jsType == kJavaScriptNumber) { - NSString *numberString = - [FUtilities ieee754StringForNumber:leafNode.val]; - [string appendString:numberString]; - } else if (jsType == kJavaScriptString) { - if (hashVersion == FDataHashVersionV1) { - [string appendString:leafNode.val]; - } else { - NSAssert(hashVersion == FDataHashVersionV2, - @"Invalid hash version found"); - [FSnapshotUtilities appendHashV2RepresentationForString:leafNode.val - toString:string]; - } - } else { - [NSException raise:NSInvalidArgumentException - format:@"Unknown value for hashing: %@", leafNode]; - } -} - -+ (void)appendHashV2RepresentationForString:(NSString *)string - toString:(NSMutableString *)mutableString { - string = [string stringByReplacingOccurrencesOfString:@"\\" - withString:@"\\\\"]; - string = [string stringByReplacingOccurrencesOfString:@"\"" - withString:@"\\\""]; - [mutableString appendString:@"\""]; - [mutableString appendString:string]; - [mutableString appendString:@"\""]; -} - -+ (NSUInteger)estimateLeafNodeSize:(FLeafNode *)leafNode { - NSString *jsType = [FUtilities getJavascriptType:leafNode.val]; - // These values are somewhat arbitrary, but we don't need an exact value so - // prefer performance over exact value - NSUInteger valueSize; - if (jsType == kJavaScriptNumber) { - valueSize = 8; // estimate each float with 8 bytes - } else if (jsType == kJavaScriptBoolean) { - valueSize = 4; // true or false need roughly 4 bytes - } else if (jsType == kJavaScriptString) { - valueSize = 2 + [leafNode.val length]; // add 2 for quotes - } else { - [NSException raise:NSInvalidArgumentException - format:@"Unknown leaf type: %@", leafNode]; - return 0; - } - - if (leafNode.getPriority.isEmpty) { - return valueSize; - } else { - // Account for extra overhead due to the extra JSON object and the - // ".value" and ".priority" keys, colons, comma - NSUInteger leafPriorityOverhead = 2 + 8 + 11 + 2 + 1; - return leafPriorityOverhead + valueSize + - [FSnapshotUtilities estimateLeafNodeSize:leafNode.getPriority]; - } -} - -+ (NSUInteger)estimateSerializedNodeSize:(id<FNode>)node { - if ([node isEmpty]) { - return 4; // null keyword - } else if ([node isLeafNode]) { - return [FSnapshotUtilities estimateLeafNodeSize:node]; - } else { - NSAssert([node isKindOfClass:[FChildrenNode class]], - @"Unexpected node type: %@", [node class]); - __block NSUInteger sum = 1; // opening brackets - [((FChildrenNode *)node) enumerateChildrenAndPriorityUsingBlock:^( - NSString *key, id<FNode> child, - BOOL *stop) { - sum += key.length; - sum += - 4; // quotes around key and colon and (comma or closing bracket) - sum += [FSnapshotUtilities estimateSerializedNodeSize:child]; - }]; - return sum; - } -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FAtomicNumber.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FAtomicNumber.h deleted file mode 100644 index b8668d2..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FAtomicNumber.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@interface FAtomicNumber : NSObject - -- (NSNumber *)getAndIncrement; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FAtomicNumber.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FAtomicNumber.m deleted file mode 100644 index 20cfd8d..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FAtomicNumber.m +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FAtomicNumber.h" - -@interface FAtomicNumber () { - unsigned long number; -} - -@property(nonatomic, strong) NSLock *lock; - -@end - -@implementation FAtomicNumber - -@synthesize lock; - -- (id)init { - self = [super init]; - if (self) { - number = 1; - self.lock = [[NSLock alloc] init]; - } - return self; -} - -- (NSNumber *)getAndIncrement { - NSNumber *result; - - // See: - // http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Conceptual/Multithreading/ThreadSafety/ThreadSafety.html#//apple_ref/doc/uid/10000057i-CH8-SW14 - // to improve, etc. - - [self.lock lock]; - result = [NSNumber numberWithUnsignedLong:number]; - number = number + 1; - [self.lock unlock]; - - return result; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FEventEmitter.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FEventEmitter.h deleted file mode 100644 index fc19ca7..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FEventEmitter.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRDatabaseConfig.h" -#import "FIRDatabaseQuery.h" -#import "FTypedefs_Private.h" - -@interface FEventEmitter : NSObject - -- (id)initWithAllowedEvents:(NSArray *)theAllowedEvents - queue:(dispatch_queue_t)queue; - -- (id)getInitialEventForType:(NSString *)eventType; -- (void)triggerEventType:(NSString *)eventType data:(id)data; - -- (FIRDatabaseHandle)observeEventType:(NSString *)eventType - withBlock:(fbt_void_id)block; -- (void)removeObserverForEventType:(NSString *)eventType - withHandle:(FIRDatabaseHandle)handle; - -- (void)validateEventType:(NSString *)eventType; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FEventEmitter.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FEventEmitter.m deleted file mode 100644 index 7d02239..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FEventEmitter.m +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FEventEmitter.h" -#import "FIRDatabaseQuery_Private.h" -#import "FRepoManager.h" -#import "FUtilities.h" - -@interface FEventListener : NSObject - -@property(nonatomic, copy) fbt_void_id userCallback; -@property(nonatomic) FIRDatabaseHandle handle; - -@end - -@implementation FEventListener - -@synthesize userCallback; -@synthesize handle; - -@end - -@interface FEventEmitter () - -@property(nonatomic, strong) NSArray *allowedEvents; -@property(nonatomic, strong) NSMutableDictionary *listeners; -@property(nonatomic, strong) dispatch_queue_t queue; - -@end - -@implementation FEventEmitter - -@synthesize allowedEvents; -@synthesize listeners; - -- (id)initWithAllowedEvents:(NSArray *)theAllowedEvents - queue:(dispatch_queue_t)queue { - if (theAllowedEvents == nil || [theAllowedEvents count] == 0) { - @throw [NSException - exceptionWithName:@"AllowedEventsValidation" - reason:@"FEventEmitters must be initialized with at " - @"least one valid event." - userInfo:nil]; - } - - self = [super init]; - - if (self) { - self.allowedEvents = [theAllowedEvents copy]; - self.listeners = [[NSMutableDictionary alloc] init]; - self.queue = queue; - } - - return self; -} - -- (id)getInitialEventForType:(NSString *)eventType { - @throw [NSException exceptionWithName:NSInternalInconsistencyException - reason:@"You must override getInitialEvent: " - @"when subclassing FEventEmitter" - userInfo:nil]; -} - -- (void)triggerEventType:(NSString *)eventType data:(id)data { - [self validateEventType:eventType]; - NSMutableDictionary *eventTypeListeners = - [self.listeners objectForKey:eventType]; - for (FEventListener *listener in eventTypeListeners) { - [self triggerListener:listener withData:data]; - } -} - -- (void)triggerListener:(FEventListener *)listener withData:(id)data { - // TODO, should probably get this from FRepo or something although it ends - // up being the same. (Except maybe for testing) - if (listener.userCallback) { - dispatch_async(self.queue, ^{ - listener.userCallback(data); - }); - } -} - -- (FIRDatabaseHandle)observeEventType:(NSString *)eventType - withBlock:(fbt_void_id)block { - [self validateEventType:eventType]; - - // Create listener - FEventListener *listener = [[FEventListener alloc] init]; - listener.handle = [[FUtilities LUIDGenerator] integerValue]; - listener.userCallback = block; // copies block automatically - - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - [self addEventListener:listener forEventType:eventType]; - }); - - return listener.handle; -} - -- (void)addEventListener:(FEventListener *)listener - forEventType:(NSString *)eventType { - // Get or initializer listeners map [FIRDatabaseHandle -> callback block] - // for eventType - NSMutableArray *eventTypeListeners = - [self.listeners objectForKey:eventType]; - if (eventTypeListeners == nil) { - eventTypeListeners = [[NSMutableArray alloc] init]; - [self.listeners setObject:eventTypeListeners forKey:eventType]; - } - - // Add listener and fire the current event for this listener - [eventTypeListeners addObject:listener]; - id initialData = [self getInitialEventForType:eventType]; - [self triggerListener:listener withData:initialData]; -} - -- (void)removeObserverForEventType:(NSString *)eventType - withHandle:(FIRDatabaseHandle)handle { - [self validateEventType:eventType]; - - dispatch_async([FIRDatabaseQuery sharedQueue], ^{ - [self removeEventListenerWithHandle:handle forEventType:eventType]; - }); -} - -- (void)removeEventListenerWithHandle:(FIRDatabaseHandle)handle - forEventType:(NSString *)eventType { - NSMutableArray *eventTypeListeners = - [self.listeners objectForKey:eventType]; - for (FEventListener *listener in [eventTypeListeners copy]) { - if (handle == NSNotFound || handle == listener.handle) { - [eventTypeListeners removeObject:listener]; - } - } -} - -- (void)validateEventType:(NSString *)eventType { - if ([self.allowedEvents indexOfObject:eventType] == NSNotFound) { - @throw [NSException - exceptionWithName:@"InvalidEventType" - reason:[NSString stringWithFormat: - @"%@ is not a valid event type. %@ " - @"is the list of valid events.", - eventType, self.allowedEvents] - userInfo:nil]; - } -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FNextPushId.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FNextPushId.h deleted file mode 100644 index 5a66196..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FNextPushId.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@interface FNextPushId : NSObject - -+ (NSString *)get:(NSTimeInterval)now; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FNextPushId.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FNextPushId.m deleted file mode 100644 index 864e147..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FNextPushId.m +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FNextPushId.h" -#import "FUtilities.h" - -static NSString *const PUSH_CHARS = - @"-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"; - -@implementation FNextPushId - -+ (NSString *)get:(NSTimeInterval)currentTime { - static long long lastPushTime = 0; - static int lastRandChars[12]; - - long long now = (long long)(currentTime * 1000); - - BOOL duplicateTime = now == lastPushTime; - lastPushTime = now; - - unichar timeStampChars[8]; - for (int i = 7; i >= 0; i--) { - timeStampChars[i] = [PUSH_CHARS characterAtIndex:(now % 64)]; - now = (long long)floor(now / 64); - } - - NSMutableString *id = [[NSMutableString alloc] init]; - [id appendString:[NSString stringWithCharacters:timeStampChars length:8]]; - - if (!duplicateTime) { - for (int i = 0; i < 12; i++) { - lastRandChars[i] = (int)floor(arc4random() % 64); - } - } else { - int i = 0; - for (i = 11; i >= 0 && lastRandChars[i] == 63; i--) { - lastRandChars[i] = 0; - } - lastRandChars[i]++; - } - - for (int i = 0; i < 12; i++) { - [id appendFormat:@"%C", [PUSH_CHARS characterAtIndex:lastRandChars[i]]]; - } - - return [NSString stringWithString:id]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FParsedUrl.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FParsedUrl.h deleted file mode 100644 index 1c07284..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FParsedUrl.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FPath.h" -#import "FRepoInfo.h" - -@interface FParsedUrl : NSObject - -@property(nonatomic, strong) FRepoInfo *repoInfo; -@property(nonatomic, strong) FPath *path; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FParsedUrl.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FParsedUrl.m deleted file mode 100644 index eb83330..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FParsedUrl.m +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FParsedUrl.h" - -@implementation FParsedUrl - -@synthesize repoInfo; -@synthesize path; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FStringUtilities.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FStringUtilities.h deleted file mode 100644 index f7d19b6..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FStringUtilities.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@interface FStringUtilities : NSObject - -+ (NSString *)base64EncodedSha1:(NSString *)str; -+ (NSString *)urlDecoded:(NSString *)url; -+ (NSString *)urlEncoded:(NSString *)url; -+ (NSString *)sanitizedForUserAgent:(NSString *)str; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FStringUtilities.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FStringUtilities.m deleted file mode 100644 index 2515257..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FStringUtilities.m +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FStringUtilities.h" -#import "NSData+SRB64Additions.h" -#import <CommonCrypto/CommonDigest.h> - -@implementation FStringUtilities - -// http://stackoverflow.com/questions/3468268/objective-c-sha1 -// http://stackoverflow.com/questions/7310457/ios-objective-c-sha-1-and-base64-problem -+ (NSString *)base64EncodedSha1:(NSString *)str { - const char *cstr = [str cStringUsingEncoding:NSUTF8StringEncoding]; - // NSString reports length in characters, but we want it in bytes, which - // strlen will give us. - unsigned long dataLen = strlen(cstr); - NSData *data = [NSData dataWithBytes:cstr length:dataLen]; - uint8_t digest[CC_SHA1_DIGEST_LENGTH]; - CC_SHA1(data.bytes, (unsigned int)data.length, digest); - NSData *output = [[NSData alloc] initWithBytes:digest - length:CC_SHA1_DIGEST_LENGTH]; - return [FSRUtilities base64EncodedStringFromData:output]; -} - -+ (NSString *)urlDecoded:(NSString *)url { - NSString *replaced = [url stringByReplacingOccurrencesOfString:@"+" - withString:@" "]; - NSString *decoded = [replaced stringByRemovingPercentEncoding]; - // This is kind of a hack, but is generally how the js client works. We - // could run into trouble if some piece is a correctly escaped %-sequence, - // and another isn't. But, that's bad input anyways... - if (decoded) { - return decoded; - } else { - return replaced; - } -} - -+ (NSString *)urlEncoded:(NSString *)url { - // Didn't seem like there was an Apple NSCharacterSet that had our version - // of the encoding So I made my own, following RFC 2396 - // https://www.ietf.org/rfc/rfc2396.txt allowedCharacters = alphanum | "-" | - // "_" | "~" - NSCharacterSet *allowedCharacters = [NSCharacterSet - characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGH" - @"IJKLMNOPQRSTUVWXYZ0123456789-_~"]; - return [url - stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacters]; -} - -+ (NSString *)sanitizedForUserAgent:(NSString *)str { - return - [str stringByReplacingOccurrencesOfString:@"/|_" - withString:@"|" - options:NSRegularExpressionSearch - range:NSMakeRange(0, [str length])]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FTypedefs.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FTypedefs.h deleted file mode 100644 index 56d97ff..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FTypedefs.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#ifndef Firebase_FTypedefs_h -#define Firebase_FTypedefs_h - -/** - * Stub... - */ -@class FIRDataSnapshot; -@class FIRDatabaseReference; -@class FAuthData; -@protocol FNode; - -// fbt = Firebase Block Typedef - -typedef void (^fbt_void_void)(void); -typedef void (^fbt_void_datasnapshot_nsstring)(FIRDataSnapshot *snapshot, - NSString *prevName); -typedef void (^fbt_void_datasnapshot)(FIRDataSnapshot *snapshot); -typedef void (^fbt_void_user)(FAuthData *user); -typedef void (^fbt_void_nsstring_id)(NSString *status, id data); -typedef void (^fbt_void_nserror_id)(NSError *error, id data); -typedef void (^fbt_void_nserror)(NSError *error); -typedef void (^fbt_void_nserror_ref)(NSError *error, FIRDatabaseReference *ref); -typedef void (^fbt_void_nserror_user)(NSError *error, FAuthData *user); -typedef void (^fbt_void_nserror_json)(NSError *error, NSDictionary *json); -typedef void (^fbt_void_nsdictionary)(NSDictionary *data); -typedef id (^fbt_id_node_nsstring)(id<FNode> node, NSString *childName); - -#endif diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FUtilities.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FUtilities.h deleted file mode 100644 index 9458f24..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FUtilities.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <FirebaseCore/FIRLogger.h> -#import <Foundation/Foundation.h> - -#import "FParsedUrl.h" - -@interface FUtilities : NSObject - -+ (NSArray *)splitString:(NSString *)str intoMaxSize:(const unsigned int)size; -+ (NSNumber *)LUIDGenerator; -+ (FParsedUrl *)parseUrl:(NSString *)url; -+ (NSString *)getJavascriptType:(id)obj; -+ (NSError *)errorForStatus:(NSString *)status andReason:(NSString *)reason; -+ (NSNumber *)intForString:(NSString *)string; -+ (NSString *)ieee754StringForNumber:(NSNumber *)val; -+ (void)setLoggingEnabled:(BOOL)enabled; -+ (BOOL)getLoggingEnabled; - -+ (NSString *)minName; -+ (NSString *)maxName; -+ (NSComparisonResult)compareKey:(NSString *)a toKey:(NSString *)b; -+ (NSComparator)stringComparator; -+ (NSComparator)keyComparator; - -+ (double)randomDouble; - -@end - -typedef enum { - FLogLevelDebug = 1, - FLogLevelInfo = 2, - FLogLevelWarn = 3, - FLogLevelError = 4, - FLogLevelNone = 5 -} FLogLevel; - -// Log tags -FOUNDATION_EXPORT NSString *const kFPersistenceLogTag; - -#define FFLog(code, format, ...) FFDebug((code), (format), ##__VA_ARGS__) - -#define FFDebug(code, format, ...) \ - do { \ - if (FFIsLoggingEnabled(FLogLevelDebug)) { \ - FIRLogDebug(kFIRLoggerDatabase, (code), (format), ##__VA_ARGS__); \ - } \ - } while (0) - -#define FFInfo(code, format, ...) \ - do { \ - if (FFIsLoggingEnabled(FLogLevelInfo)) { \ - FIRLogError(kFIRLoggerDatabase, (code), (format), ##__VA_ARGS__); \ - } \ - } while (0) - -#define FFWarn(code, format, ...) \ - do { \ - if (FFIsLoggingEnabled(FLogLevelWarn)) { \ - FIRLogWarning(kFIRLoggerDatabase, (code), (format), \ - ##__VA_ARGS__); \ - } \ - } while (0) - -extern FIRLoggerService kFIRLoggerDatabase; -BOOL FFIsLoggingEnabled(FLogLevel logLevel); -void firebaseUncaughtExceptionHandler(NSException *exception); -void firebaseJobsTroll(void); diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FUtilities.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FUtilities.m deleted file mode 100644 index a24c134..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FUtilities.m +++ /dev/null @@ -1,433 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FUtilities.h" -#import "FAtomicNumber.h" -#import "FConstants.h" -#import "FStringUtilities.h" -#import <FirebaseCore/FIRLogger.h> - -#define ARC4RANDOM_MAX 0x100000000 -#define INTEGER_32_MIN (-2147483648) -#define INTEGER_32_MAX 2147483647 - -#pragma mark - -#pragma mark C functions - -FIRLoggerService kFIRLoggerDatabase = @"[Firebase/Database]"; -static FLogLevel logLevel = FLogLevelInfo; // Default log level is info -static NSMutableDictionary *options = nil; - -BOOL FFIsLoggingEnabled(FLogLevel level) { return level >= logLevel; } - -void firebaseJobsTroll(void) { - FFLog(@"I-RDB095001", - @"password super secret; JFK conspiracy; Hello there! Having fun " - @"digging through Firebase? We're always hiring! jobs@firebase.com"); -} - -#pragma mark - -#pragma mark Private property and singleton specification - -@interface FUtilities () { -} - -@property(nonatomic, strong) FAtomicNumber *localUid; - -+ (FUtilities *)singleton; - -@end - -@implementation FUtilities - -@synthesize localUid; - -- (id)init { - self = [super init]; - if (self) { - self.localUid = [[FAtomicNumber alloc] init]; - } - return self; -} - -// TODO: We really want to be able to set the log level -+ (void)setLoggingEnabled:(BOOL)enabled { - logLevel = enabled ? FLogLevelDebug : FLogLevelInfo; -} - -+ (BOOL)getLoggingEnabled { - return logLevel == FLogLevelDebug; -} - -+ (FUtilities *)singleton { - static dispatch_once_t pred = 0; - __strong static id _sharedObject = nil; - dispatch_once(&pred, ^{ - _sharedObject = [[self alloc] init]; // or some other init method - }); - return _sharedObject; -} - -// Refactor as a category of NSString -+ (NSArray *)splitString:(NSString *)str intoMaxSize:(const unsigned int)size { - if (str.length <= size) { - return [NSArray arrayWithObject:str]; - } - - NSMutableArray *dataSegs = [[NSMutableArray alloc] init]; - for (int c = 0; c < str.length; c += size) { - if (c + size > str.length) { - int rangeStart = c; - unsigned long rangeLength = size - ((c + size) - str.length); - [dataSegs - addObject:[str substringWithRange:NSMakeRange(rangeStart, - rangeLength)]]; - } else { - int rangeStart = c; - int rangeLength = size; - [dataSegs - addObject:[str substringWithRange:NSMakeRange(rangeStart, - rangeLength)]]; - } - } - return dataSegs; -} - -+ (NSNumber *)LUIDGenerator { - FUtilities *f = [FUtilities singleton]; - return [f.localUid getAndIncrement]; -} - -+ (NSString *)decodePath:(NSString *)pathString { - NSMutableArray *decodedPieces = [[NSMutableArray alloc] init]; - NSArray *pieces = [pathString componentsSeparatedByString:@"/"]; - for (NSString *piece in pieces) { - if (piece.length > 0) { - [decodedPieces addObject:[FStringUtilities urlDecoded:piece]]; - } - } - return [NSString - stringWithFormat:@"/%@", [decodedPieces componentsJoinedByString:@"/"]]; -} - -+ (NSString *)extractPathFromUrlString:(NSString *)url { - NSString *path = url; - - NSRange schemeIndex = [path rangeOfString:@"//"]; - if (schemeIndex.location != NSNotFound) { - path = [path substringFromIndex:schemeIndex.location + 2]; - } - - NSUInteger pathIndex = [path rangeOfString:@"/"].location; - if (pathIndex != NSNotFound) { - path = [path substringFromIndex:pathIndex + 1]; - } else { - path = @""; - } - - NSUInteger queryParamIndex = [path rangeOfString:@"?"].location; - if (queryParamIndex != NSNotFound) { - path = [path substringToIndex:queryParamIndex]; - } - - return path; -} - -+ (FParsedUrl *)parseUrl:(NSString *)url { - // For backwards compatibility, support URLs without schemes on iOS. - if (![url containsString:@"://"]) { - url = [@"http://" stringByAppendingString:url]; - } - - NSString *originalPathString = [self extractPathFromUrlString:url]; - - // Sanitize the database URL by removing the path component, which may - // contain invalid URL characters. - NSString *sanitizedUrlWithoutPath = - [url stringByReplacingOccurrencesOfString:originalPathString - withString:@""]; - NSURLComponents *urlComponents = - [NSURLComponents componentsWithString:sanitizedUrlWithoutPath]; - if (!urlComponents) { - [NSException raise:@"Failed to parse database URL" - format:@"Failed to parse database URL: %@", url]; - } - - NSString *host = [urlComponents.host lowercaseString]; - NSString *namespace; - bool secure; - - if (urlComponents.port != nil) { - secure = [urlComponents.scheme isEqualToString:@"https"] || - [urlComponents.scheme isEqualToString:@"wss"]; - host = [host stringByAppendingFormat:@":%@", urlComponents.port]; - } else { - secure = YES; - }; - - NSArray *parts = [urlComponents.host componentsSeparatedByString:@"."]; - if ([parts count] == 3) { - namespace = [parts[0] lowercaseString]; - } else { - // Attempt to extract namespace from "ns" query param. - NSArray *queryItems = urlComponents.queryItems; - for (NSURLQueryItem *item in queryItems) { - if ([item.name isEqualToString:@"ns"]) { - namespace = item.value; - break; - } - } - - if (!namespace) { - namespace = [parts[0] lowercaseString]; - } - } - - NSString *pathString = [self - decodePath:[NSString stringWithFormat:@"/%@", originalPathString]]; - FPath *path = [[FPath alloc] initWith:pathString]; - FRepoInfo *repoInfo = [[FRepoInfo alloc] initWithHost:host - isSecure:secure - withNamespace:namespace]; - - FFLog(@"I-RDB095002", @"---> Parsed (%@) to: (%@,%@); ns=(%@); path=(%@)", - url, [repoInfo description], [repoInfo connectionURL], - repoInfo.namespace, [path description]); - - FParsedUrl *parsedUrl = [[FParsedUrl alloc] init]; - parsedUrl.repoInfo = repoInfo; - parsedUrl.path = path; - - return parsedUrl; -} - -/* - case str: JString => priString + "string:" + str.s; - case bool: JBool => priString + "boolean:" + bool.value; - case double: JDouble => priString + "number:" + double.num; - case int: JInt => priString + "number:" + int.num; - case _ => { - error("Leaf node has value '" + data.value + "' of invalid type '" + - data.value.getClass.toString + "'"); - ""; - } - */ - -+ (NSString *)getJavascriptType:(id)obj { - if ([obj isKindOfClass:[NSDictionary class]]) { - return kJavaScriptObject; - } else if ([obj isKindOfClass:[NSString class]]) { - return kJavaScriptString; - } else if ([obj isKindOfClass:[NSNumber class]]) { - // We used to just compare to @encode(BOOL) as suggested at - // http://stackoverflow.com/questions/2518761/get-type-of-nsnumber, but - // on arm64, @encode(BOOL) returns "B" instead of "c" even though - // objCType still returns 'c' (signed char). So check both. - if (strcmp([obj objCType], @encode(BOOL)) == 0 || - strcmp([obj objCType], @encode(signed char)) == 0) { - return kJavaScriptBoolean; - } else { - return kJavaScriptNumber; - } - } else { - return kJavaScriptNull; - } -} - -+ (NSError *)errorForStatus:(NSString *)status andReason:(NSString *)reason { - static dispatch_once_t pred = 0; - __strong static NSDictionary *errorMap = nil; - __strong static NSDictionary *errorCodes = nil; - dispatch_once(&pred, ^{ - errorMap = @{ - @"permission_denied" : @"Permission Denied", - @"unavailable" : @"Service is unavailable", - kFErrorWriteCanceled : @"Write cancelled by user" - }; - errorCodes = @{ - @"permission_denied" : @1, - @"unavailable" : @2, - kFErrorWriteCanceled : @3 - }; - }); - - if ([status isEqualToString:kFWPResponseForActionStatusOk]) { - return nil; - } else { - NSInteger code; - NSString *desc = nil; - if (reason) { - desc = reason; - } else if ([errorMap objectForKey:status] != nil) { - desc = [errorMap objectForKey:status]; - } else { - desc = status; - } - - if ([errorCodes objectForKey:status] != nil) { - NSNumber *num = [errorCodes objectForKey:status]; - code = [num integerValue]; - } else { - // XXX what to do here? - code = 9999; - } - - return [[NSError alloc] - initWithDomain:kFErrorDomain - code:code - userInfo:@{NSLocalizedDescriptionKey : desc}]; - } -} - -+ (NSNumber *)intForString:(NSString *)string { - static NSCharacterSet *notDigits = nil; - if (!notDigits) { - notDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; - } - if ([string rangeOfCharacterFromSet:notDigits].length == 0) { - NSInteger num; - NSScanner *scanner = [NSScanner scannerWithString:string]; - if ([scanner scanInteger:&num]) { - return [NSNumber numberWithInteger:num]; - } - } - return nil; -} - -+ (NSString *)ieee754StringForNumber:(NSNumber *)val { - double d = [val doubleValue]; - NSData *data = [NSData dataWithBytes:&d length:sizeof(double)]; - NSMutableString *str = [[NSMutableString alloc] init]; - const unsigned char *buffer = (const unsigned char *)[data bytes]; - for (int i = 0; i < data.length; i++) { - unsigned char byte = buffer[7 - i]; - [str appendFormat:@"%02x", byte]; - } - return str; -} - -static inline BOOL tryParseStringToInt(__unsafe_unretained NSString *str, - NSInteger *integer) { - // First do some cheap checks (NOTE: The below checks are significantly - // faster than an equivalent regex :-( ). - NSUInteger length = str.length; - if (length > 11 || length == 0) { - return NO; - } - long long value = 0; - BOOL negative = NO; - NSUInteger i = 0; - if ([str characterAtIndex:0] == '-') { - if (length == 1) { - return NO; - } - negative = YES; - i = 1; - } - for (; i < length; i++) { - unichar c = [str characterAtIndex:i]; - // Must be a digit, or '-' if it's the first char. - if (c < '0' || c > '9') { - return NO; - } else { - int charValue = c - '0'; - value = value * 10 + charValue; - } - } - - value = (negative) ? -value : value; - - if (value < INTEGER_32_MIN || value > INTEGER_32_MAX) { - return NO; - } else { - *integer = (NSInteger)value; - return YES; - } -} - -+ (NSString *)maxName { - static dispatch_once_t once; - static NSString *maxName; - dispatch_once(&once, ^{ - maxName = [[NSString alloc] initWithFormat:@"[MAX_NAME]"]; - }); - return maxName; -} - -+ (NSString *)minName { - static dispatch_once_t once; - static NSString *minName; - dispatch_once(&once, ^{ - minName = [[NSString alloc] initWithFormat:@"[MIN_NAME]"]; - }); - return minName; -} - -+ (NSComparisonResult)compareKey:(NSString *)a toKey:(NSString *)b { - if (a == b) { - return NSOrderedSame; - } else if (a == [FUtilities minName] || b == [FUtilities maxName]) { - return NSOrderedAscending; - } else if (b == [FUtilities minName] || a == [FUtilities maxName]) { - return NSOrderedDescending; - } else { - NSInteger aAsInt, bAsInt; - if (tryParseStringToInt(a, &aAsInt)) { - if (tryParseStringToInt(b, &bAsInt)) { - if (aAsInt > bAsInt) { - return NSOrderedDescending; - } else if (aAsInt < bAsInt) { - return NSOrderedAscending; - } else if (a.length > b.length) { - return NSOrderedDescending; - } else if (a.length < b.length) { - return NSOrderedAscending; - } else { - return NSOrderedSame; - } - } else { - return (NSComparisonResult)NSOrderedAscending; - } - } else if (tryParseStringToInt(b, &bAsInt)) { - return (NSComparisonResult)NSOrderedDescending; - } else { - // Perform literal character by character search to prevent a > b && - // b > a issues. Note that calling -(NSString - // *)decomposedStringWithCanonicalMapping also works. - return [a compare:b options:NSLiteralSearch]; - } - } -} - -+ (NSComparator)keyComparator { - return ^NSComparisonResult(__unsafe_unretained NSString *a, - __unsafe_unretained NSString *b) { - return [FUtilities compareKey:a toKey:b]; - }; -} - -+ (NSComparator)stringComparator { - return ^NSComparisonResult(__unsafe_unretained NSString *a, - __unsafe_unretained NSString *b) { - return [a compare:b]; - }; -} - -+ (double)randomDouble { - return ((double)arc4random() / ARC4RANDOM_MAX); -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FValidation.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FValidation.h deleted file mode 100644 index 276eb26..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FValidation.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRDataEventType.h" -#import "FParsedUrl.h" -#import "FPath.h" -#import "FTypedefs.h" -#import <Foundation/Foundation.h> - -@interface FValidation : NSObject - -+ (void)validateFrom:(NSString *)fn writablePath:(FPath *)path; -+ (void)validateFrom:(NSString *)fn knownEventType:(FIRDataEventType)event; -+ (void)validateFrom:(NSString *)fn validPathString:(NSString *)pathString; -+ (void)validateFrom:(NSString *)fn validRootPathString:(NSString *)pathString; -+ (void)validateFrom:(NSString *)fn validKey:(NSString *)key; -+ (void)validateFrom:(NSString *)fn validURL:(FParsedUrl *)parsedUrl; - -+ (void)validateToken:(NSString *)token; - -// Functions for handling passing errors back -+ (void)handleError:(NSError *)error - withUserCallback:(fbt_void_nserror_id)userCallback; -+ (void)handleError:(NSError *)error - withSuccessCallback:(fbt_void_nserror)userCallback; - -// Functions used for validating while creating snapshots in FSnapshotUtilities -+ (BOOL)validateFrom:(NSString *)fn - isValidLeafValue:(id)value - withPath:(NSArray *)path; -+ (void)validateFrom:(NSString *)fn - validDictionaryKey:(id)keyId - withPath:(NSArray *)path; -+ (void)validateFrom:(NSString *)fn - validUpdateDictionaryKey:(id)keyId - withValue:(id)value; -+ (void)validateFrom:(NSString *)fn - isValidPriorityValue:(id)value - withPath:(NSArray *)path; -+ (BOOL)validatePriorityValue:value; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FValidation.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FValidation.m deleted file mode 100644 index c700b9c..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/FValidation.m +++ /dev/null @@ -1,461 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FValidation.h" -#import "FConstants.h" -#import "FParsedUrl.h" -#import "FTypedefs.h" - -// Have to escape: * ? + [ ( ) { } ^ $ | \ . / -// See: -// https://developer.apple.com/library/mac/#documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html - -NSString *const kInvalidPathCharacters = @"[].#$"; -NSString *const kInvalidKeyCharacters = @"[].#$/"; - -@implementation FValidation - -+ (void)validateFrom:(NSString *)fn writablePath:(FPath *)path { - if ([[path getFront] isEqualToString:kDotInfoPrefix]) { - @throw [[NSException alloc] - initWithName:@"WritablePathValidation" - reason:[NSString - stringWithFormat:@"(%@) failed to path %@: Can't " - @"modify data under %@", - fn, [path description], - kDotInfoPrefix] - userInfo:nil]; - } -} - -+ (void)validateFrom:(NSString *)fn knownEventType:(FIRDataEventType)event { - switch (event) { - case FIRDataEventTypeValue: - case FIRDataEventTypeChildAdded: - case FIRDataEventTypeChildChanged: - case FIRDataEventTypeChildMoved: - case FIRDataEventTypeChildRemoved: - return; - break; - default: - @throw [[NSException alloc] - initWithName:@"KnownEventTypeValidation" - reason:[NSString - stringWithFormat:@"(%@) Unknown event type: %d", - fn, (int)event] - userInfo:nil]; - break; - } -} - -+ (BOOL)isValidPathString:(NSString *)pathString { - static dispatch_once_t token; - static NSCharacterSet *badPathChars = nil; - dispatch_once(&token, ^{ - badPathChars = [NSCharacterSet - characterSetWithCharactersInString:kInvalidPathCharacters]; - }); - return pathString != nil && [pathString length] != 0 && - [pathString rangeOfCharacterFromSet:badPathChars].location == - NSNotFound; -} - -+ (void)validateFrom:(NSString *)fn validPathString:(NSString *)pathString { - if (![self isValidPathString:pathString]) { - @throw [[NSException alloc] - initWithName:@"InvalidPathValidation" - reason:[NSString stringWithFormat: - @"(%@) Must be a non-empty string and " - @"not contain '.' '#' '$' '[' or ']'", - fn] - userInfo:nil]; - } -} - -+ (void)validateFrom:(NSString *)fn validRootPathString:(NSString *)pathString { - static dispatch_once_t token; - static NSRegularExpression *dotInfoRegex = nil; - dispatch_once(&token, ^{ - dotInfoRegex = [NSRegularExpression - regularExpressionWithPattern:@"^\\/*\\.info(\\/|$)" - options:0 - error:nil]; - }); - - NSString *tempPath = pathString; - // HACK: Obj-C regex are kinda' slow. Do a plain string search first before - // bothering with the regex. - if ([pathString rangeOfString:@".info"].location != NSNotFound) { - tempPath = [dotInfoRegex - stringByReplacingMatchesInString:pathString - options:0 - range:NSMakeRange(0, pathString.length) - withTemplate:@"/"]; - } - [self validateFrom:fn validPathString:tempPath]; -} - -+ (BOOL)isValidKey:(NSString *)key { - static dispatch_once_t token; - static NSCharacterSet *badKeyChars = nil; - dispatch_once(&token, ^{ - badKeyChars = [NSCharacterSet - characterSetWithCharactersInString:kInvalidKeyCharacters]; - }); - return key != nil && key.length > 0 && - [key rangeOfCharacterFromSet:badKeyChars].location == NSNotFound; -} - -+ (void)validateFrom:(NSString *)fn validKey:(NSString *)key { - if (![self isValidKey:key]) { - @throw [[NSException alloc] - initWithName:@"InvalidKeyValidation" - reason:[NSString - stringWithFormat: - @"(%@) Must be a non-empty string and not " - @"contain '/' '.' '#' '$' '[' or ']'", - fn] - userInfo:nil]; - } -} - -+ (void)validateFrom:(NSString *)fn validURL:(FParsedUrl *)parsedUrl { - NSString *pathString = [parsedUrl.path description]; - [self validateFrom:fn validRootPathString:pathString]; -} - -#pragma mark - -#pragma mark Authentication validation - -+ (BOOL)stringNonempty:(NSString *)str { - return str != nil && ![str isKindOfClass:[NSNull class]] && str.length > 0; -} - -+ (void)validateToken:(NSString *)token { - if (![FValidation stringNonempty:token]) { - [NSException raise:NSInvalidArgumentException - format:@"Can't have empty string or nil for custom token"]; - } -} - -#pragma mark - -#pragma mark Handling authentication errors - -/** - * This function immediately calls the callback. - * It assumes that it is not on FirebaseWorker thread. - * It assumes it's on a user-controlled thread. - */ -+ (void)handleError:(NSError *)error - withUserCallback:(fbt_void_nserror_id)userCallback { - if (userCallback) { - userCallback(error, nil); - } -} - -/** - * This function immediately calls the callback. - * It assumes that it is not on FirebaseWorker thread. - * It assumes it's on a user-controlled thread. - */ -+ (void)handleError:(NSError *)error - withSuccessCallback:(fbt_void_nserror)userCallback { - if (userCallback) { - userCallback(error); - } -} - -#pragma mark - -#pragma mark Snapshot validation - -+ (BOOL)validateFrom:(NSString *)fn - isValidLeafValue:(id)value - withPath:(NSArray *)path { - if ([value isKindOfClass:[NSString class]]) { - // Try to avoid conversion to bytes if possible - NSString *theString = value; - if ([theString maximumLengthOfBytesUsingEncoding:NSUTF8StringEncoding] > - kFirebaseMaxLeafSize && - [theString lengthOfBytesUsingEncoding:NSUTF8StringEncoding] > - kFirebaseMaxLeafSize) { - NSRange range; - range.location = 0; - range.length = MIN(path.count, 50); - NSString *pathString = - [[path subarrayWithRange:range] componentsJoinedByString:@"."]; - @throw [[NSException alloc] - initWithName:@"InvalidFirebaseData" - reason:[NSString - stringWithFormat:@"(%@) String exceeds max " - @"size of %u utf8 bytes: %@", - fn, (int)kFirebaseMaxLeafSize, - pathString] - userInfo:nil]; - } - return YES; - } - - else if ([value isKindOfClass:[NSNumber class]]) { - // Cannot store NaN, but otherwise can store NSNumbers. - if ([[NSDecimalNumber notANumber] isEqualToNumber:value]) { - NSRange range; - range.location = 0; - range.length = MIN(path.count, 50); - NSString *pathString = - [[path subarrayWithRange:range] componentsJoinedByString:@"."]; - @throw [[NSException alloc] - initWithName:@"InvalidFirebaseData" - reason:[NSString - stringWithFormat: - @"(%@) Cannot store NaN at path: %@.", fn, - pathString] - userInfo:nil]; - } - return YES; - } - - else if ([value isKindOfClass:[NSDictionary class]]) { - NSDictionary *dval = value; - if (dval[kServerValueSubKey] != nil) { - if ([dval count] > 1) { - NSRange range; - range.location = 0; - range.length = MIN(path.count, 50); - NSString *pathString = [[path subarrayWithRange:range] - componentsJoinedByString:@"."]; - @throw [[NSException alloc] - initWithName:@"InvalidFirebaseData" - reason:[NSString stringWithFormat: - @"(%@) Cannot store other keys " - @"with server value keys.%@.", - fn, pathString] - userInfo:nil]; - } - return YES; - } - return NO; - } - - else if (value == [NSNull null] || value == nil) { - // Null is valid type to store at leaf - return YES; - } - - return NO; -} - -+ (NSString *)parseAndValidateKey:(id)keyId - fromFunction:(NSString *)fn - path:(NSArray *)path { - if (![keyId isKindOfClass:[NSString class]]) { - NSRange range; - range.location = 0; - range.length = MIN(path.count, 50); - NSString *pathString = - [[path subarrayWithRange:range] componentsJoinedByString:@"."]; - @throw [[NSException alloc] - initWithName:@"InvalidFirebaseData" - reason:[NSString - stringWithFormat:@"(%@) Non-string keys are not " - @"allowed in object at path: %@", - fn, pathString] - userInfo:nil]; - } - return (NSString *)keyId; -} - -+ (void)validateFrom:(NSString *)fn - validDictionaryKey:(id)keyId - withPath:(NSArray *)path { - NSString *key = [self parseAndValidateKey:keyId fromFunction:fn path:path]; - if (![key isEqualToString:kPayloadPriority] && - ![key isEqualToString:kPayloadValue] && - ![key isEqualToString:kServerValueSubKey] && - ![FValidation isValidKey:key]) { - NSRange range; - range.location = 0; - range.length = MIN(path.count, 50); - NSString *pathString = - [[path subarrayWithRange:range] componentsJoinedByString:@"."]; - @throw [[NSException alloc] - initWithName:@"InvalidFirebaseData" - reason:[NSString stringWithFormat: - @"(%@) Invalid key in object at path: " - @"%@. Keys must be non-empty and cannot " - @"contain '/' '.' '#' '$' '[' or ']'", - fn, pathString] - userInfo:nil]; - } -} - -+ (void)validateFrom:(NSString *)fn - validUpdateDictionaryKey:(id)keyId - withValue:(id)value { - FPath *path = [FPath pathWithString:[self parseAndValidateKey:keyId - fromFunction:fn - path:@[]]]; - __block NSInteger keyNum = 0; - [path enumerateComponentsUsingBlock:^void(NSString *key, BOOL *stop) { - if ([key isEqualToString:kPayloadPriority] && - keyNum == [path length] - 1) { - [self validateFrom:fn isValidPriorityValue:value withPath:@[]]; - } else { - keyNum++; - - if (![FValidation isValidKey:key]) { - @throw [[NSException alloc] - initWithName:@"InvalidFirebaseData" - reason:[NSString - stringWithFormat: - @"(%@) Invalid key in object. Keys must " - @"be non-empty and cannot contain '.' " - @"'#' '$' '[' or ']'", - fn] - userInfo:nil]; - } - } - }]; -} - -+ (void)validateFrom:(NSString *)fn - isValidPriorityValue:(id)value - withPath:(NSArray *)path { - [self validateFrom:fn - isValidPriorityValue:value - withPath:path - throwError:YES]; -} - -/** - * Returns YES if priority is valid. - */ -+ (BOOL)validatePriorityValue:value { - return [self validateFrom:nil - isValidPriorityValue:value - withPath:nil - throwError:NO]; -} - -/** - * Helper for validating priorities. If passed YES for throwError, it'll throw - * descriptive errors on validation problems. Else, it'll just return YES/NO. - */ -+ (BOOL)validateFrom:(NSString *)fn - isValidPriorityValue:(id)value - withPath:(NSArray *)path - throwError:(BOOL)throwError { - if ([value isKindOfClass:[NSNumber class]]) { - if ([[NSDecimalNumber notANumber] isEqualToNumber:value]) { - if (throwError) { - NSRange range; - range.location = 0; - range.length = MIN(path.count, 50); - NSString *pathString = [[path subarrayWithRange:range] - componentsJoinedByString:@"."]; - @throw [[NSException alloc] - initWithName:@"InvalidFirebaseData" - reason:[NSString stringWithFormat: - @"(%@) Cannot store NaN as " - @"priority at path: %@.", - fn, pathString] - userInfo:nil]; - } else { - return NO; - } - } else if (value == (id)kCFBooleanFalse || - value == (id)kCFBooleanTrue) { - if (throwError) { - NSRange range; - range.location = 0; - range.length = MIN(path.count, 50); - NSString *pathString = [[path subarrayWithRange:range] - componentsJoinedByString:@"."]; - @throw [[NSException alloc] - initWithName:@"InvalidFirebaseData" - reason:[NSString stringWithFormat: - @"(%@) Cannot store true/false " - @"as priority at path: %@.", - fn, pathString] - userInfo:nil]; - } else { - return NO; - } - } - } else if ([value isKindOfClass:[NSDictionary class]]) { - NSDictionary *dval = value; - if (dval[kServerValueSubKey] != nil) { - if ([dval count] > 1) { - if (throwError) { - NSRange range; - range.location = 0; - range.length = MIN(path.count, 50); - NSString *pathString = [[path subarrayWithRange:range] - componentsJoinedByString:@"."]; - @throw [[NSException alloc] - initWithName:@"InvalidFirebaseData" - reason:[NSString - stringWithFormat: - @"(%@) Cannot store other keys " - @"with server value keys as " - @"priority at path: %@.", - fn, pathString] - userInfo:nil]; - } else { - return NO; - } - } - } else { - if (throwError) { - NSRange range; - range.location = 0; - range.length = MIN(path.count, 50); - NSString *pathString = [[path subarrayWithRange:range] - componentsJoinedByString:@"."]; - @throw [[NSException alloc] - initWithName:@"InvalidFirebaseData" - reason:[NSString - stringWithFormat: - @"(%@) Cannot store an NSDictionary " - @"as priority at path: %@.", - fn, pathString] - userInfo:nil]; - } else { - return NO; - } - } - } else if ([value isKindOfClass:[NSArray class]]) { - if (throwError) { - NSRange range; - range.location = 0; - range.length = MIN(path.count, 50); - NSString *pathString = - [[path subarrayWithRange:range] componentsJoinedByString:@"."]; - @throw [[NSException alloc] - initWithName:@"InvalidFirebaseData" - reason:[NSString stringWithFormat: - @"(%@) Cannot store an NSArray as " - @"priority at path: %@.", - fn, pathString] - userInfo:nil]; - } else { - return NO; - } - } - - // It's valid! - return YES; -} -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleBoolBlock.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleBoolBlock.h deleted file mode 100644 index f5c0859..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleBoolBlock.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTypedefs.h" -#import <Foundation/Foundation.h> - -@interface FTupleBoolBlock : NSObject - -@property(nonatomic, readwrite) BOOL boolean; -@property(nonatomic, copy) fbt_void_void block; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleBoolBlock.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleBoolBlock.m deleted file mode 100644 index c4cd8bf..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleBoolBlock.m +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTupleBoolBlock.h" - -@implementation FTupleBoolBlock - -@synthesize boolean; -@synthesize block; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.h deleted file mode 100644 index bd8c4a9..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTypedefs_Private.h" -#import <Foundation/Foundation.h> - -@interface FTupleCallbackStatus : NSObject -@property(nonatomic, copy) fbt_void_nsstring_nsstring block; -@property(nonatomic) NSString *status; -@property(nonatomic) NSString *errorReason; -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.m deleted file mode 100644 index 05914bf..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.m +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTupleCallbackStatus.h" - -@implementation FTupleCallbackStatus -@synthesize block; -@synthesize status; -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleFirebase.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleFirebase.h deleted file mode 100644 index 5e41f9e..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleFirebase.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRDatabaseReference.h" -#import <Foundation/Foundation.h> - -@interface FTupleFirebase : NSObject - -@property(nonatomic, strong) FIRDatabaseReference *one; -@property(nonatomic, strong) FIRDatabaseReference *two; -@property(nonatomic, strong) FIRDatabaseReference *three; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleFirebase.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleFirebase.m deleted file mode 100644 index 3956f8b..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleFirebase.m +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTupleFirebase.h" - -@implementation FTupleFirebase - -@synthesize one; -@synthesize two; -@synthesize three; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleNodePath.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleNodePath.h deleted file mode 100644 index 19b5217..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleNodePath.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FNode.h" -#import "FPath.h" -#import <Foundation/Foundation.h> - -@interface FTupleNodePath : NSObject - -@property(nonatomic, strong) FPath *path; -@property(nonatomic, strong) id<FNode> node; - -- (id)initWithNode:(id<FNode>)aNode andPath:(FPath *)aPath; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleNodePath.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleNodePath.m deleted file mode 100644 index 620ae76..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleNodePath.m +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTupleNodePath.h" - -@implementation FTupleNodePath - -@synthesize path; -@synthesize node; - -- (id)initWithNode:(id<FNode>)aNode andPath:(FPath *)aPath { - self = [super init]; - if (self) { - self.path = aPath; - self.node = aNode; - } - return self; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjectNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjectNode.h deleted file mode 100644 index 1717a22..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjectNode.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FNode.h" -#import <Foundation/Foundation.h> - -@interface FTupleObjectNode : NSObject - -- (id)initWithObject:(id)aObj andNode:(id<FNode>)aNode; - -@property(nonatomic, strong) id<FNode> node; -@property(nonatomic, strong) id obj; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjectNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjectNode.m deleted file mode 100644 index 4c533b0..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjectNode.m +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#import "FTupleObjectNode.h" - -@implementation FTupleObjectNode - -@synthesize obj; -@synthesize node; - -- (id)initWithObject:(id)aObj andNode:(id<FNode>)aNode { - self = [super init]; - if (self) { - self.obj = aObj; - self.node = aNode; - } - return self; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjects.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjects.h deleted file mode 100644 index 05b3141..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjects.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@interface FTupleObjects : NSObject - -@property(nonatomic, strong) id objA; -@property(nonatomic, strong) id objB; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjects.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjects.m deleted file mode 100644 index a9e4c88..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleObjects.m +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTupleObjects.h" - -@implementation FTupleObjects - -@synthesize objA; -@synthesize objB; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.h deleted file mode 100644 index e68ab71..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTypedefs_Private.h" -#import <Foundation/Foundation.h> - -@interface FTupleOnDisconnect : NSObject - -@property(strong, nonatomic) NSString *pathString; -@property(strong, nonatomic) NSString *action; -@property(strong, nonatomic) id data; -@property(strong, nonatomic) fbt_void_nsstring_nsstring onComplete; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.m deleted file mode 100644 index bd45822..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.m +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTupleOnDisconnect.h" - -@implementation FTupleOnDisconnect - -@synthesize pathString; -@synthesize action; -@synthesize data; -@synthesize onComplete; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTuplePathValue.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTuplePathValue.h deleted file mode 100644 index b0a515c..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTuplePathValue.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@class FPath; - -@interface FTuplePathValue : NSObject -@property(nonatomic, strong, readonly) FPath *path; -@property(nonatomic, strong, readonly) id value; -- (id)initWithPath:(FPath *)aPath value:(id)aValue; -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTuplePathValue.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTuplePathValue.m deleted file mode 100644 index 91de883..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTuplePathValue.m +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTuplePathValue.h" -#import "FPath.h" - -@interface FTuplePathValue () -@property(nonatomic, strong, readwrite) id value; -@property(nonatomic, strong, readwrite) FPath *path; -@end - -@implementation FTuplePathValue -@synthesize path; -@synthesize value; - -- (id)initWithPath:(FPath *)aPath value:(id)aValue { - self = [super init]; - if (self) { - self.value = aValue; - self.path = aPath; - } - return self; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.h deleted file mode 100644 index 7269c2f..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@interface FTupleRemovedQueriesEvents : NSObject -/** - * `FIRDatabaseQuery`s removed with [SyncPoint removeEventRegistration:] - */ -@property(nonatomic, strong, readonly) NSArray *removedQueries; -/** - * cancel events as FEvent - */ -@property(nonatomic, strong, readonly) NSArray *cancelEvents; - -- (id)initWithRemovedQueries:(NSArray *)removed cancelEvents:(NSArray *)events; -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.m deleted file mode 100644 index 324cfcb..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.m +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTupleRemovedQueriesEvents.h" - -@interface FTupleRemovedQueriesEvents () -@property(nonatomic, strong, readwrite) NSArray *removedQueries; -@property(nonatomic, strong, readwrite) NSArray *cancelEvents; -@end - -@implementation FTupleRemovedQueriesEvents -@synthesize removedQueries; -@synthesize cancelEvents; - -- (id)initWithRemovedQueries:(NSArray *)removed cancelEvents:(NSArray *)events { - self = [super init]; - if (self) { - self.removedQueries = removed; - self.cancelEvents = events; - } - return self; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleSetIdPath.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleSetIdPath.h deleted file mode 100644 index 337f8d6..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleSetIdPath.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FPath.h" -#import <Foundation/Foundation.h> - -@interface FTupleSetIdPath : NSObject - -- (id)initWithSetId:(NSNumber *)aSetId andPath:(FPath *)aPath; - -@property(strong, nonatomic) NSNumber *setId; -@property(strong, nonatomic) FPath *path; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleSetIdPath.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleSetIdPath.m deleted file mode 100644 index 2763c83..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleSetIdPath.m +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTupleSetIdPath.h" - -@implementation FTupleSetIdPath - -@synthesize path; -@synthesize setId; - -- (id)initWithSetId:(NSNumber *)aSetId andPath:(FPath *)aPath { - self = [super init]; - if (self) { - self.setId = aSetId; - self.path = aPath; - } - return self; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleStringNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleStringNode.h deleted file mode 100644 index 0e3d7fa..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleStringNode.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FNode.h" -#import <Foundation/Foundation.h> - -@interface FTupleStringNode : NSObject - -- (id)initWithString:(NSString *)aString andNode:(id<FNode>)aNode; - -@property(nonatomic, strong) id<FNode> node; -@property(nonatomic, strong) NSString *string; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleStringNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleStringNode.m deleted file mode 100644 index d820ef8..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleStringNode.m +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTupleStringNode.h" - -@implementation FTupleStringNode - -@synthesize string; -@synthesize node; - -- (id)initWithString:(NSString *)aString andNode:(id<FNode>)aNode { - self = [super init]; - if (self) { - self.string = aString; - self.node = aNode; - } - return self; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTSN.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTSN.h deleted file mode 100644 index b1052da..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTSN.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTupleStringNode.h" -#import <Foundation/Foundation.h> - -@interface FTupleTSN : NSObject - -@property(nonatomic, strong) FTupleStringNode *from; -@property(nonatomic, strong) FTupleStringNode *to; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTSN.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTSN.m deleted file mode 100644 index 348c319..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTSN.m +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTupleTSN.h" - -@implementation FTupleTSN - -@synthesize from; -@synthesize to; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTransaction.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTransaction.h deleted file mode 100644 index 82f4495..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTransaction.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FPath.h" -#import "FTypedefs.h" -#import "FTypedefs_Private.h" -#import <Foundation/Foundation.h> - -@interface FTupleTransaction : NSObject - -@property(nonatomic, strong) FPath *path; -@property(nonatomic, copy) fbt_transactionresult_mutabledata update; -@property(nonatomic, copy) fbt_void_nserror_bool_datasnapshot onComplete; -@property(nonatomic) FTransactionStatus status; - -/** - * Used when combining transaction at different locations to figure out which - * one goes first. - */ -@property(nonatomic, strong) NSNumber *order; -/** - * Whether to raise local events for this transaction - */ -@property(nonatomic) BOOL applyLocally; - -/** - * Count how many times we've retried the transaction - */ -@property(nonatomic) int retryCount; - -/** - * Function to call to clean up our listener - */ -@property(nonatomic, copy) fbt_void_void unwatcher; - -/** - * Stores why a transaction was aborted - */ -@property(nonatomic, strong, readonly) NSString *abortStatus; -@property(nonatomic, strong, readonly) NSString *abortReason; - -- (void)setAbortStatus:(NSString *)abortStatus reason:(NSString *)reason; -- (NSError *)abortError; - -@property(nonatomic, strong) NSNumber *currentWriteId; - -/** - * Stores the input snapshot, before the update - */ -@property(nonatomic, strong) id<FNode> currentInputSnapshot; - -/** - * Stores the unresolved (for server values) output snapshot, after the update - */ -@property(nonatomic, strong) id<FNode> currentOutputSnapshotRaw; - -/** - * Stores the resolved (for server values) output snapshot, after the update - */ -@property(nonatomic, strong) id<FNode> currentOutputSnapshotResolved; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTransaction.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTransaction.m deleted file mode 100644 index 68977ef..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleTransaction.m +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTupleTransaction.h" -#import "FUtilities.h" - -@interface FTupleTransaction () - -@property(nonatomic, strong) NSString *abortStatus; -@property(nonatomic, strong) NSString *abortReason; - -@end - -@implementation FTupleTransaction - -- (void)setAbortStatus:(NSString *)abortStatus reason:(NSString *)reason { - self.abortStatus = abortStatus; - self.abortReason = reason; -} - -- (NSError *)abortError { - return (self.abortStatus != nil) - ? [FUtilities errorForStatus:self.abortStatus - andReason:self.abortReason] - : nil; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleUserCallback.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleUserCallback.h deleted file mode 100644 index b94eef6..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleUserCallback.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FQueryParams.h" -#import "FTypedefs.h" -#import <Foundation/Foundation.h> - -@interface FTupleUserCallback : NSObject - -- (id)initWithHandle:(NSUInteger)handle; - -@property(nonatomic, copy) - fbt_void_datasnapshot_nsstring datasnapshotPrevnameCallback; -@property(nonatomic, copy) fbt_void_datasnapshot datasnapshotCallback; -@property(nonatomic, copy) fbt_void_nserror cancelCallback; -@property(nonatomic, copy) FQueryParams *queryParams; -@property(nonatomic) NSUInteger handle; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleUserCallback.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleUserCallback.m deleted file mode 100644 index ba5861f..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/Utilities/Tuples/FTupleUserCallback.m +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FTupleUserCallback.h" - -@implementation FTupleUserCallback - -@synthesize datasnapshotCallback; -@synthesize datasnapshotPrevnameCallback; -@synthesize cancelCallback; -@synthesize queryParams; -@synthesize handle; - -- (id)initWithHandle:(NSUInteger)theHandle { - self = [super init]; - if (self) { - self.handle = theHandle; - } - return self; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.h deleted file mode 100644 index 3ab7476..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.h +++ /dev/null @@ -1,21 +0,0 @@ -#import <Foundation/Foundation.h> -#import "FImmutableSortedDictionary.h" - -/** - * This is an array backed implementation of FImmutableSortedDictionary. It uses arrays and linear lookups to achieve - * good memory efficiency while maintaining good performance for small collections. It also uses less allocations than - * a comparable red black tree. To avoid degrading performance with increasing collection size it will automatically - * convert to a FTreeSortedDictionary after an insert call above a certain threshold. - */ -@interface FArraySortedDictionary : FImmutableSortedDictionary - -+ (FArraySortedDictionary *)fromDictionary:(NSDictionary *)dictionary withComparator:(NSComparator)comparator; - -- (id)initWithComparator:(NSComparator)comparator; - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, copy, readonly) NSComparator comparator; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.m deleted file mode 100644 index 15d2d8b..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.m +++ /dev/null @@ -1,266 +0,0 @@ -#import "FArraySortedDictionary.h" -#import "FTreeSortedDictionary.h" - -@interface FArraySortedDictionaryEnumerator : NSEnumerator - -- (id)initWithKeys:(NSArray *)keys startPos:(NSInteger)pos isReverse:(BOOL)reverse; -- (id)nextObject; - -@property (nonatomic) NSInteger pos; -@property (nonatomic) BOOL reverse; -@property (nonatomic, strong) NSArray *keys; - -@end - -@implementation FArraySortedDictionaryEnumerator - -- (id)initWithKeys:(NSArray *)keys startPos:(NSInteger)pos isReverse:(BOOL)reverse -{ - self = [super init]; - if (self != nil) { - self->_pos = pos; - self->_reverse = reverse; - self->_keys = keys; - } - return self; -} - -- (id)nextObject -{ - NSInteger pos = self->_pos; - if (pos >= 0 && pos < self.keys.count) { - if (self.reverse) { - self->_pos--; - } else { - self->_pos++; - } - return self.keys[pos]; - } else { - return nil; - } -} - -@end - -@interface FArraySortedDictionary () - -- (id)initWithComparator:(NSComparator)comparator; - -@property (nonatomic, copy, readwrite) NSComparator comparator; -@property (nonatomic, strong) NSArray *keys; -@property (nonatomic, strong) NSArray *values; - -@end - -@implementation FArraySortedDictionary - -+ (FArraySortedDictionary *)fromDictionary:(NSDictionary *)dictionary withComparator:(NSComparator)comparator -{ - NSMutableArray *keys = [NSMutableArray arrayWithCapacity:dictionary.count]; - [dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - [keys addObject:key]; - }]; - [keys sortUsingComparator:comparator]; - - [keys enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - if (idx > 0) { - if (comparator(keys[idx - 1], obj) != NSOrderedAscending) { - [NSException raise:NSInvalidArgumentException format:@"Can't create FImmutableSortedDictionary with keys with same ordering!"]; - } - } - }]; - - NSMutableArray *values = [NSMutableArray arrayWithCapacity:keys.count]; - NSInteger pos = 0; - for (id key in keys) { - values[pos++] = dictionary[key]; - } - NSAssert(values.count == keys.count, @"We added as many keys as values"); - return [[FArraySortedDictionary alloc] initWithComparator:comparator keys:keys values:values]; -} - -- (id)initWithComparator:(NSComparator)comparator -{ - self = [super init]; - if (self != nil) { - self->_comparator = comparator; - self->_keys = [NSArray array]; - self->_values = [NSArray array]; - } - return self; -} - -- (id)initWithComparator:(NSComparator)comparator keys:(NSArray *)keys values:(NSArray *)values -{ - self = [super init]; - if (self != nil) { - self->_comparator = comparator; - self->_keys = keys; - self->_values = values; - } - return self; -} - -- (NSInteger) findInsertPositionForKey:(id)key -{ - NSInteger newPos = 0; - while (newPos < self.keys.count && self.comparator(self.keys[newPos], key) < NSOrderedSame) { - newPos++; - } - return newPos; -} - -- (NSInteger) findKey:(id)key -{ - if (key == nil) { - return NSNotFound; - } - for (NSInteger pos = 0; pos < self.keys.count; pos++) { - NSComparisonResult result = self.comparator(key, self.keys[pos]); - if (result == NSOrderedSame) { - return pos; - } else if (result == NSOrderedAscending) { - return NSNotFound; - } - } - return NSNotFound; -} - -- (FImmutableSortedDictionary *) insertKey:(id)key withValue:(id)value -{ - NSInteger pos = [self findKey:key]; - - if (pos == NSNotFound) { - /* - * If we're above the threshold we want to convert it to a tree backed implementation to not have - * degrading performance - */ - if (self.count >= SORTED_DICTIONARY_ARRAY_TO_RB_TREE_SIZE_THRESHOLD) { - NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:self.count]; - for (NSInteger i = 0; i < self.keys.count; i++) { - dict[self.keys[i]] = self.values[i]; - } - dict[key] = value; - return [FTreeSortedDictionary fromDictionary:dict withComparator:self.comparator]; - } else { - NSMutableArray *newKeys = [NSMutableArray arrayWithArray:self.keys]; - NSMutableArray *newValues = [NSMutableArray arrayWithArray:self.values]; - NSInteger newPos = [self findInsertPositionForKey:key]; - [newKeys insertObject:key atIndex:newPos]; - [newValues insertObject:value atIndex:newPos]; - return [[FArraySortedDictionary alloc] initWithComparator:self.comparator keys:newKeys values:newValues]; - } - } else { - NSMutableArray *newKeys = [NSMutableArray arrayWithArray:self.keys]; - NSMutableArray *newValues = [NSMutableArray arrayWithArray:self.values]; - newKeys[pos] = key; - newValues[pos] = value; - return [[FArraySortedDictionary alloc] initWithComparator:self.comparator keys:newKeys values:newValues]; - } -} - -- (FImmutableSortedDictionary *) removeKey:(id)key -{ - NSInteger pos = [self findKey:key]; - if (pos == NSNotFound) { - return self; - } else { - NSMutableArray *newKeys = [NSMutableArray arrayWithArray:self.keys]; - NSMutableArray *newValues = [NSMutableArray arrayWithArray:self.values]; - [newKeys removeObjectAtIndex:pos]; - [newValues removeObjectAtIndex:pos]; - return [[FArraySortedDictionary alloc] initWithComparator:self.comparator keys:newKeys values:newValues]; - } -} - -- (id) get:(id)key -{ - NSInteger pos = [self findKey:key]; - if (pos == NSNotFound) { - return nil; - } else { - return self.values[pos]; - } -} - -- (id) getPredecessorKey:(id) key { - NSInteger pos = [self findKey:key]; - if (pos == NSNotFound) { - [NSException raise:NSInternalInconsistencyException format:@"Can't get predecessor key for non-existent key"]; - return nil; - } else if (pos == 0) { - return nil; - } else { - return self.keys[pos - 1]; - } -} - -- (BOOL) isEmpty { - return self.keys.count == 0; -} - -- (int) count -{ - return (int)self.keys.count; -} - -- (id) minKey -{ - return [self.keys firstObject]; -} - -- (id) maxKey -{ - return [self.keys lastObject]; -} - -- (void) enumerateKeysAndObjectsUsingBlock:(void (^)(id, id, BOOL *))block -{ - [self enumerateKeysAndObjectsReverse:NO usingBlock:block]; -} - -- (void) enumerateKeysAndObjectsReverse:(BOOL)reverse usingBlock:(void (^)(id, id, BOOL *))block -{ - if (reverse) { - BOOL stop = NO; - for (NSInteger i = self.keys.count - 1; i >= 0; i--) { - block(self.keys[i], self.values[i], &stop); - if (stop) return; - } - } else { - BOOL stop = NO; - for (NSInteger i = 0; i < self.keys.count; i++) { - block(self.keys[i], self.values[i], &stop); - if (stop) return; - } - } -} - -- (BOOL) contains:(id)key { - return [self findKey:key] != NSNotFound; -} - -- (NSEnumerator *) keyEnumerator { - return [self.keys objectEnumerator]; -} - -- (NSEnumerator *) keyEnumeratorFrom:(id)startKey { - NSInteger startPos = [self findInsertPositionForKey:startKey]; - return [[FArraySortedDictionaryEnumerator alloc] initWithKeys:self.keys startPos:startPos isReverse:NO]; -} - -- (NSEnumerator *) reverseKeyEnumerator { - return [self.keys reverseObjectEnumerator]; -} - -- (NSEnumerator *) reverseKeyEnumeratorFrom:(id)startKey { - NSInteger startPos = [self findInsertPositionForKey:startKey]; - // if there's no exact match, findKeyOrInsertPosition will return the index *after* the closest match, but - // since this is a reverse iterator, we want to start just *before* the closest match. - if (startPos >= self.keys.count || self.comparator(self.keys[startPos], startKey) != NSOrderedSame) { - startPos -= 1; - } - return [[FArraySortedDictionaryEnumerator alloc] initWithKeys:self.keys startPos:startPos isReverse:YES]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.h deleted file mode 100644 index d6687d8..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.h +++ /dev/null @@ -1,54 +0,0 @@ -/** - * @fileoverview Implementation of an immutable SortedMap using a Left-leaning - * Red-Black Tree, adapted from the implementation in Mugs - * (http://mads379.github.com/mugs/) by Mads Hartmann Jensen - * (mads379@gmail.com). - * - * Original paper on Left-leaning Red-Black Trees: - * http://www.cs.princeton.edu/~rs/talks/LLRB/LLRB.pdf - * - * Invariant 1: No red node has a red child - * Invariant 2: Every leaf path has the same number of black nodes - * Invariant 3: Only the left child can be red (left leaning) - */ - -#import <Foundation/Foundation.h> - -/** - * The size threshold where we use a tree backed sorted map instead of an array backed sorted map. - * This is a more or less arbitrary chosen value, that was chosen to be large enough to fit most of object kind - * of Firebase data, but small enough to not notice degradation in performance for inserting and lookups. - * Feel free to empirically determine this constant, but don't expect much gain in real world performance. - */ -#define SORTED_DICTIONARY_ARRAY_TO_RB_TREE_SIZE_THRESHOLD 25 - -@interface FImmutableSortedDictionary : NSObject - -+ (FImmutableSortedDictionary *)dictionaryWithComparator:(NSComparator)comparator; -+ (FImmutableSortedDictionary *)fromDictionary:(NSDictionary *)dictionary withComparator:(NSComparator)comparator; - -- (FImmutableSortedDictionary *) insertKey:(id)aKey withValue:(id)aValue; -- (FImmutableSortedDictionary *) removeKey:(id)aKey; -- (id) get:(id) key; -- (id) getPredecessorKey:(id) key; -- (BOOL) isEmpty; -- (int) count; -- (id) minKey; -- (id) maxKey; -- (void) enumerateKeysAndObjectsUsingBlock:(void(^)(id key, id value, BOOL *stop))block; -- (void) enumerateKeysAndObjectsReverse:(BOOL)reverse usingBlock:(void(^)(id key, id value, BOOL *stop))block; -- (BOOL) contains:(id)key; -- (NSEnumerator *) keyEnumerator; -- (NSEnumerator *) keyEnumeratorFrom:(id)startKey; -- (NSEnumerator *) reverseKeyEnumerator; -- (NSEnumerator *) reverseKeyEnumeratorFrom:(id)startKey; - -#pragma mark - -#pragma mark Methods similar to NSMutableDictionary - -- (FImmutableSortedDictionary *) setObject:(id)anObject forKey:(id)aKey; -- (id) objectForKey:(id)key; -- (FImmutableSortedDictionary *) removeObjectForKey:(id)aKey; - -@end - diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.m deleted file mode 100644 index 659c63b..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.m +++ /dev/null @@ -1,142 +0,0 @@ -#import "FImmutableSortedDictionary.h" -#import "FArraySortedDictionary.h" -#import "FTreeSortedDictionary.h" - -#define THROW_ABSTRACT_METHOD_EXCEPTION(sel) do { \ - @throw [NSException exceptionWithName:NSInternalInconsistencyException \ - reason:[NSString stringWithFormat:@"You must override %@ in a subclass", NSStringFromSelector(sel)] \ - userInfo:nil]; \ -} while(0) - -@implementation FImmutableSortedDictionary - -+ (FImmutableSortedDictionary *)dictionaryWithComparator:(NSComparator)comparator -{ - return [[FArraySortedDictionary alloc] initWithComparator:comparator]; -} - -+ (FImmutableSortedDictionary *)fromDictionary:(NSDictionary *)dictionary withComparator:(NSComparator)comparator -{ - if (dictionary.count <= SORTED_DICTIONARY_ARRAY_TO_RB_TREE_SIZE_THRESHOLD) { - return [FArraySortedDictionary fromDictionary:dictionary withComparator:comparator]; - } else { - return [FTreeSortedDictionary fromDictionary:dictionary withComparator:comparator]; - } -} - -- (FImmutableSortedDictionary *) insertKey:(id)aKey withValue:(id)aValue { - THROW_ABSTRACT_METHOD_EXCEPTION(@selector(insertKey:withValue:)); -} - -- (FImmutableSortedDictionary *) removeKey:(id)aKey { - THROW_ABSTRACT_METHOD_EXCEPTION(@selector(removeKey:)); -} - -- (id) get:(id) key { - THROW_ABSTRACT_METHOD_EXCEPTION(@selector(get:)); -} - -- (id) getPredecessorKey:(id) key { - THROW_ABSTRACT_METHOD_EXCEPTION(@selector(getPredecessorKey:)); -} - -- (BOOL) isEmpty { - THROW_ABSTRACT_METHOD_EXCEPTION(@selector(isEmpty)); -} - -- (int) count { - THROW_ABSTRACT_METHOD_EXCEPTION(@selector((count))); -} - -- (id) minKey { - THROW_ABSTRACT_METHOD_EXCEPTION(@selector(minKey)); -} - -- (id) maxKey { - THROW_ABSTRACT_METHOD_EXCEPTION(@selector(maxKey)); -} - -- (void) enumerateKeysAndObjectsUsingBlock:(void (^)(id, id, BOOL *))block { - THROW_ABSTRACT_METHOD_EXCEPTION(@selector(enumerateKeysAndObjectsUsingBlock:)); -} - -- (void) enumerateKeysAndObjectsReverse:(BOOL)reverse usingBlock:(void (^)(id, id, BOOL *))block { - THROW_ABSTRACT_METHOD_EXCEPTION(@selector(enumerateKeysAndObjectsReverse:usingBlock:)); -} - -- (BOOL) contains:(id)key { - THROW_ABSTRACT_METHOD_EXCEPTION(@selector(contains:)); -} - -- (NSEnumerator *) keyEnumerator { - THROW_ABSTRACT_METHOD_EXCEPTION(@selector(keyEnumerator)); -} - -- (NSEnumerator *) keyEnumeratorFrom:(id)startKey { - THROW_ABSTRACT_METHOD_EXCEPTION(@selector(keyEnumeratorFrom:)); -} - -- (NSEnumerator *) reverseKeyEnumerator { - THROW_ABSTRACT_METHOD_EXCEPTION(@selector(reverseKeyEnumerator)); -} - -- (NSEnumerator *) reverseKeyEnumeratorFrom:(id)startKey { - THROW_ABSTRACT_METHOD_EXCEPTION(@selector(reverseKeyEnumeratorFrom:)); -} - -- (BOOL)isEqual:(id)object { - if (![object isKindOfClass:[FImmutableSortedDictionary class]]) { - return NO; - } - FImmutableSortedDictionary *other = (FImmutableSortedDictionary *)object; - if (self.count != other.count) { - return NO; - } - __block BOOL isEqual = YES; - [self enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) { - id otherValue = [other objectForKey:key]; - isEqual = isEqual && (value == otherValue || [value isEqual:otherValue]); - *stop = !isEqual; - }]; - return isEqual; -} - -- (NSUInteger)hash { - __block NSUInteger hash = 0; - [self enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) { - hash = (hash * 31 + [key hash]) * 17 + [value hash]; - }]; - return hash; -} - -- (NSString *)description { - NSMutableString *str = [[NSMutableString alloc] init]; - __block BOOL first = YES; - [str appendString:@"{ "]; - [self enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) { - if (!first) { - [str appendString:@", "]; - } - first = NO; - [str appendString:[NSString stringWithFormat:@"%@: %@", key, value]]; - }]; - [str appendString:@" }"]; - return str; -} - -#pragma mark - -#pragma mark Methods similar to NSMutableDictionary - -- (FImmutableSortedDictionary *) setObject:(__unsafe_unretained id)anObject forKey:(__unsafe_unretained id)aKey { - return [self insertKey:aKey withValue:anObject]; -} - -- (FImmutableSortedDictionary *) removeObjectForKey:(__unsafe_unretained id)aKey { - return [self removeKey:aKey]; -} - -- (id) objectForKey:(__unsafe_unretained id)key { - return [self get:key]; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.h deleted file mode 100644 index ac15c2f..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.h +++ /dev/null @@ -1,22 +0,0 @@ -#import <Foundation/Foundation.h> - -@interface FImmutableSortedSet : NSObject - -+ (FImmutableSortedSet *)setWithKeysFromDictionary:(NSDictionary *)array comparator:(NSComparator)comparator; - -- (BOOL)containsObject:(id)object; -- (FImmutableSortedSet *)addObject:(id)object; -- (FImmutableSortedSet *)removeObject:(id)object; -- (id)firstObject; -- (id)lastObject; -- (NSUInteger)count; -- (BOOL)isEmpty; - -- (id)predecessorEntry:(id)entry; - -- (void)enumerateObjectsUsingBlock:(void (^)(id obj, BOOL *stop))block; -- (void)enumerateObjectsReverse:(BOOL)reverse usingBlock:(void (^)(id obj, BOOL *stop))block; - -- (NSEnumerator *)objectEnumerator; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.m deleted file mode 100644 index 1953af1..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.m +++ /dev/null @@ -1,115 +0,0 @@ -#import "FImmutableSortedSet.h" -#import "FImmutableSortedDictionary.h" - -@interface FImmutableSortedSet () - -@property (nonatomic, strong) FImmutableSortedDictionary *dictionary; - -@end - -@implementation FImmutableSortedSet - -+ (FImmutableSortedSet *)setWithKeysFromDictionary:(NSDictionary *)dictionary comparator:(NSComparator)comparator -{ - FImmutableSortedDictionary *setDict = [FImmutableSortedDictionary fromDictionary:dictionary withComparator:comparator]; - return [[FImmutableSortedSet alloc] initWithDictionary:setDict]; -} - -- (id)initWithDictionary:(FImmutableSortedDictionary *)dictionary -{ - self = [super init]; - if (self != nil) { - self->_dictionary = dictionary; - } - return self; -} - -- (BOOL)contains:(id)object -{ - return [self.dictionary contains:object]; -} - -- (FImmutableSortedSet *)addObject:(id)object -{ - FImmutableSortedDictionary *newDictionary = [self.dictionary insertKey:object withValue:[NSNull null]]; - if (newDictionary != self.dictionary) { - return [[FImmutableSortedSet alloc] initWithDictionary:newDictionary]; - } else { - return self; - } -} - -- (FImmutableSortedSet *)removeObject:(id)object -{ - FImmutableSortedDictionary *newDictionary = [self.dictionary removeObjectForKey:object]; - if (newDictionary != self.dictionary) { - return [[FImmutableSortedSet alloc] initWithDictionary:newDictionary]; - } else { - return self; - } -} - -- (BOOL)containsObject:(id)object -{ - return [self.dictionary contains:object]; -} - -- (id)firstObject -{ - return [self.dictionary minKey]; -} - -- (id)lastObject -{ - return [self.dictionary maxKey]; -} - -- (id)predecessorEntry:(id)entry -{ - return [self.dictionary getPredecessorKey:entry]; -} - -- (NSUInteger)count -{ - return [self.dictionary count]; -} - -- (BOOL)isEmpty -{ - return [self.dictionary isEmpty]; -} - -- (void)enumerateObjectsUsingBlock:(void (^)(id, BOOL *))block -{ - [self enumerateObjectsReverse:NO usingBlock:block]; -} - -- (void)enumerateObjectsReverse:(BOOL)reverse usingBlock:(void (^)(id, BOOL *))block -{ - [self.dictionary enumerateKeysAndObjectsReverse:reverse usingBlock:^(id key, id value, BOOL *stop) { - block(key, stop); - }]; -} - -- (NSEnumerator *)objectEnumerator -{ - return [self.dictionary keyEnumerator]; -} - -- (NSString *)description -{ - NSMutableString *str = [[NSMutableString alloc] init]; - __block BOOL first = YES; - [str appendString:@"FImmutableSortedSet ( "]; - [self enumerateObjectsUsingBlock:^(id obj, BOOL *stop) { - if (!first) { - [str appendString:@", "]; - } - first = NO; - [str appendString:[NSString stringWithFormat:@"%@", obj]]; - }]; - [str appendString:@" )"]; - return str; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.h deleted file mode 100644 index 833f2a5..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.h +++ /dev/null @@ -1,27 +0,0 @@ -#import <Foundation/Foundation.h> -#import "FLLRBNode.h" - -@interface FLLRBEmptyNode : NSObject <FLLRBNode> - -+ (id)emptyNode; - -- (id)copyWith:(id) aKey withValue:(id) aValue withColor:(FLLRBColor*) aColor withLeft:(id<FLLRBNode>)aLeft withRight:(id<FLLRBNode>)aRight; -- (id<FLLRBNode>) insertKey:(id) aKey forValue:(id)aValue withComparator:(NSComparator)aComparator; -- (id<FLLRBNode>) remove:(id) aKey withComparator:(NSComparator)aComparator; -- (int) count; -- (BOOL) isEmpty; -- (BOOL) inorderTraversal:(BOOL (^)(id key, id value))action; -- (BOOL) reverseTraversal:(BOOL (^)(id key, id value))action; -- (id<FLLRBNode>) min; -- (id) minKey; -- (id) maxKey; -- (BOOL) isRed; -- (int) check; - -@property (nonatomic, strong) id key; -@property (nonatomic, strong) id value; -@property (nonatomic, strong) FLLRBColor* color; -@property (nonatomic, strong) id<FLLRBNode> left; -@property (nonatomic, strong) id<FLLRBNode> right; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.m deleted file mode 100644 index 3ca6f06..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.m +++ /dev/null @@ -1,72 +0,0 @@ -#import "FLLRBEmptyNode.h" -#import "FLLRBValueNode.h" - -@implementation FLLRBEmptyNode - -@synthesize key, value, color, left, right; - -- (NSString *) description { - return [NSString stringWithFormat:@"[key=%@ val=%@ color=%@]", key, value, - (color != nil ? @"true" : @"false")]; -} - -+ (id)emptyNode -{ - static dispatch_once_t pred = 0; - __strong static id _sharedObject = nil; - dispatch_once(&pred, ^{ - _sharedObject = [[self alloc] init]; // or some other init method - }); - return _sharedObject; -} - -- (id)copyWith:(id) aKey withValue:(id) aValue withColor:(FLLRBColor*) aColor withLeft:(id<FLLRBNode>)aLeft withRight:(id<FLLRBNode>)aRight { - return self; -} - -- (id<FLLRBNode>) insertKey:(id) aKey forValue:(id)aValue withComparator:(NSComparator)aComparator { - FLLRBValueNode* result = [[FLLRBValueNode alloc] initWithKey:aKey withValue:aValue withColor:nil withLeft:nil withRight:nil]; - return result; -} - -- (id<FLLRBNode>) remove:(id) key withComparator:(NSComparator)aComparator { - return self; -} - -- (int) count { - return 0; -} - -- (BOOL) isEmpty { - return YES; -} - -- (BOOL) inorderTraversal:(BOOL (^)(id key, id value))action { - return NO; -} - -- (BOOL) reverseTraversal:(BOOL (^)(id key, id value))action { - return NO; -} - -- (id<FLLRBNode>) min { - return self; -} - -- (id) minKey { - return nil; -} - -- (id) maxKey { - return nil; -} - -- (BOOL) isRed { - return NO; -} - -- (int) check { - return 0; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBNode.h deleted file mode 100644 index 09b234c..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBNode.h +++ /dev/null @@ -1,29 +0,0 @@ -#import <Foundation/Foundation.h> - -#define RED @true -#define BLACK @false - -typedef NSNumber FLLRBColor; - -@protocol FLLRBNode <NSObject> - -- (id)copyWith:(id) aKey withValue:(id) aValue withColor:(FLLRBColor*) aColor withLeft:(id<FLLRBNode>)aLeft withRight:(id<FLLRBNode>)aRight; -- (id<FLLRBNode>) insertKey:(id) aKey forValue:(id)aValue withComparator:(NSComparator)aComparator; -- (id<FLLRBNode>) remove:(id) key withComparator:(NSComparator)aComparator; -- (int) count; -- (BOOL) isEmpty; -- (BOOL) inorderTraversal:(BOOL (^)(id key, id value))action; -- (BOOL) reverseTraversal:(BOOL (^)(id key, id value))action; -- (id<FLLRBNode>) min; -- (id) minKey; -- (id) maxKey; -- (BOOL) isRed; -- (int) check; - -@property (nonatomic, strong) id key; -@property (nonatomic, strong) id value; -@property (nonatomic, strong) FLLRBColor* color; -@property (nonatomic, strong) id<FLLRBNode> left; -@property (nonatomic, strong) id<FLLRBNode> right; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.h deleted file mode 100644 index 50438bb..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.h +++ /dev/null @@ -1,29 +0,0 @@ -#import <Foundation/Foundation.h> -#import "FLLRBNode.h" - -@interface FLLRBValueNode : NSObject <FLLRBNode> - - -- (id)initWithKey:(id) key withValue:(id) value withColor:(FLLRBColor*) color withLeft:(id<FLLRBNode>)left withRight:(id<FLLRBNode>)right; -- (id)copyWith:(id) aKey withValue:(id) aValue withColor:(FLLRBColor*) aColor withLeft:(id<FLLRBNode>)aLeft withRight:(id<FLLRBNode>)aRight; -- (id<FLLRBNode>) insertKey:(id) aKey forValue:(id)aValue withComparator:(NSComparator)aComparator; -- (id<FLLRBNode>) remove:(id) aKey withComparator:(NSComparator)aComparator; -- (int) count; -- (BOOL) isEmpty; -- (BOOL) inorderTraversal:(BOOL (^)(id key, id value))action; -- (BOOL) reverseTraversal:(BOOL (^)(id key, id value))action; -- (id<FLLRBNode>) min; -- (id) minKey; -- (id) maxKey; -- (BOOL) isRed; -- (int) check; - -- (BOOL) checkMaxDepth; - -@property (nonatomic, strong) id key; -@property (nonatomic, strong) id value; -@property (nonatomic, strong) FLLRBColor* color; -@property (nonatomic, strong) id<FLLRBNode> left; -@property (nonatomic, strong) id<FLLRBNode> right; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.m deleted file mode 100644 index 831b97f..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.m +++ /dev/null @@ -1,230 +0,0 @@ -#import "FLLRBValueNode.h" -#import "FLLRBEmptyNode.h" - -@implementation FLLRBValueNode - -@synthesize key, value, color, left, right; - -- (NSString *) description { - return [NSString stringWithFormat:@"[key=%@ val=%@ color=%@]", key, value, - (color != nil ? @"true" : @"false")]; -} - -- (id)initWithKey:(__unsafe_unretained id) aKey withValue:(__unsafe_unretained id) aValue withColor:(__unsafe_unretained FLLRBColor*) aColor withLeft:(__unsafe_unretained id<FLLRBNode>)aLeft withRight:(__unsafe_unretained id<FLLRBNode>)aRight -{ - self = [super init]; - if (self) { - self.key = aKey; - self.value = aValue; - self.color = aColor != nil ? aColor : RED; - self.left = aLeft != nil ? aLeft : [FLLRBEmptyNode emptyNode]; - self.right = aRight != nil ? aRight : [FLLRBEmptyNode emptyNode]; - } - return self; -} - -- (id)copyWith:(__unsafe_unretained id) aKey withValue:(__unsafe_unretained id) aValue withColor:(__unsafe_unretained FLLRBColor*) aColor withLeft:(__unsafe_unretained id<FLLRBNode>)aLeft withRight:(__unsafe_unretained id<FLLRBNode>)aRight { - return [[FLLRBValueNode alloc] initWithKey:(aKey != nil) ? aKey : self.key - withValue:(aValue != nil) ? aValue : self.value - withColor:(aColor != nil) ? aColor : self.color - withLeft:(aLeft != nil) ? aLeft : self.left - withRight:(aRight != nil) ? aRight : self.right]; -} - -- (int) count { - return [self.left count] + 1 + [self.right count]; -} - -- (BOOL) isEmpty { - return NO; -} - -/** -* Early terminates if aciton returns YES. -* @return The first truthy value returned by action, or the last falsey value returned by action. -*/ -- (BOOL) inorderTraversal:(BOOL (^)(id key, id value))action { - return [self.left inorderTraversal:action] || - action(self.key, self.value) || - [self.right inorderTraversal:action]; -} - -- (BOOL) reverseTraversal:(BOOL (^)(id key, id value))action { - return [self.right reverseTraversal:action] || - action(self.key, self.value) || - [self.left reverseTraversal:action]; -} - -- (id<FLLRBNode>) min { - if([self.left isEmpty]) { - return self; - } - else { - return [self.left min]; - } -} - -- (id) minKey { - return [[self min] key]; -} - -- (id) maxKey { - if([self.right isEmpty]) { - return self.key; - } - else { - return [self.right maxKey]; - } -} - -- (id<FLLRBNode>) insertKey:(__unsafe_unretained id) aKey forValue:(__unsafe_unretained id)aValue withComparator:(NSComparator)aComparator { - NSComparisonResult cmp = aComparator(aKey, self.key); - FLLRBValueNode* n = self; - - if(cmp == NSOrderedAscending) { - n = [n copyWith:nil withValue:nil withColor:nil withLeft:[n.left insertKey:aKey forValue:aValue withComparator:aComparator] withRight:nil]; - } - else if(cmp == NSOrderedSame) { - n = [n copyWith:nil withValue:aValue withColor:nil withLeft:nil withRight:nil]; - } - else { - n = [n copyWith:nil withValue:nil withColor:nil withLeft:nil withRight:[n.right insertKey:aKey forValue:aValue withComparator:aComparator]]; - } - - return [n fixUp]; -} - -- (id<FLLRBNode>) removeMin { - - if([self.left isEmpty]) { - return [FLLRBEmptyNode emptyNode]; - } - - FLLRBValueNode* n = self; - if(! [n.left isRed] && ! [n.left.left isRed]) { - n = [n moveRedLeft]; - } - - n = [n copyWith:nil withValue:nil withColor:nil withLeft:[(FLLRBValueNode*)n.left removeMin] withRight:nil]; - return [n fixUp]; -} - - -- (id<FLLRBNode>) fixUp { - FLLRBValueNode* n = self; - if([n.right isRed] && ! [n.left isRed]) n = [n rotateLeft]; - if([n.left isRed] && [n.left.left isRed]) n = [n rotateRight]; - if([n.left isRed] && [n.right isRed]) n = [n colorFlip]; - return n; -} - -- (FLLRBValueNode*) moveRedLeft { - FLLRBValueNode* n = [self colorFlip]; - if([n.right.left isRed]) { - n = [n copyWith:nil withValue:nil withColor:nil withLeft:nil withRight:[(FLLRBValueNode*)n.right rotateRight]]; - n = [n rotateLeft]; - n = [n colorFlip]; - } - return n; -} - -- (FLLRBValueNode*) moveRedRight { - FLLRBValueNode* n = [self colorFlip]; - if([n.left.left isRed]) { - n = [n rotateRight]; - n = [n colorFlip]; - } - return n; -} - -- (id<FLLRBNode>) rotateLeft { - id<FLLRBNode> nl = [self copyWith:nil withValue:nil withColor:RED withLeft:nil withRight:self.right.left]; - return [self.right copyWith:nil withValue:nil withColor:self.color withLeft:nl withRight:nil];; -} - -- (id<FLLRBNode>) rotateRight { - id<FLLRBNode> nr = [self copyWith:nil withValue:nil withColor:RED withLeft:self.left.right withRight:nil]; - return [self.left copyWith:nil withValue:nil withColor:self.color withLeft:nil withRight:nr]; -} - -- (id<FLLRBNode>) colorFlip { - id<FLLRBNode> nleft = [self.left copyWith:nil withValue:nil withColor:[NSNumber numberWithBool:![self.left.color boolValue]] withLeft:nil withRight:nil]; - id<FLLRBNode> nright = [self.right copyWith:nil withValue:nil withColor:[NSNumber numberWithBool:![self.right.color boolValue]] withLeft:nil withRight:nil]; - - return [self copyWith:nil withValue:nil withColor:[NSNumber numberWithBool:![self.color boolValue]] withLeft:nleft withRight:nright]; -} - -- (id<FLLRBNode>) remove:(__unsafe_unretained id) aKey withComparator:(NSComparator)comparator { - id<FLLRBNode> smallest; - FLLRBValueNode* n = self; - - if(comparator(aKey, n.key) == NSOrderedAscending) { - if(![n.left isEmpty] && ![n.left isRed] && ![n.left.left isRed]) { - n = [n moveRedLeft]; - } - n = [n copyWith:nil withValue:nil withColor:nil withLeft:[n.left remove:aKey withComparator:comparator] withRight:nil]; - } - else { - if([n.left isRed]) { - n = [n rotateRight]; - } - - if(![n.right isEmpty] && ![n.right isRed] && ![n.right.left isRed]) { - n = [n moveRedRight]; - } - - if(comparator(aKey, n.key) == NSOrderedSame) { - if([n.right isEmpty]) { - return [FLLRBEmptyNode emptyNode]; - } - else { - smallest = [n.right min]; - n = [n copyWith:smallest.key withValue:smallest.value withColor:nil withLeft:nil withRight:[(FLLRBValueNode*)n.right removeMin]]; - } - } - n = [n copyWith:nil withValue:nil withColor:nil withLeft:nil withRight:[n.right remove:aKey withComparator:comparator]]; - } - return [n fixUp]; -} - -- (BOOL) isRed { - return [self.color boolValue]; -} - -- (BOOL) checkMaxDepth { - int blackDepth = [self check]; - if(pow(2.0, blackDepth) <= ([self count] + 1)) { - return YES; - } - else { - return NO; - } -} - -- (int) check { - int blackDepth = 0; - - if([self isRed] && [self.left isRed]) { - @throw [[NSException alloc] initWithName:@"check" reason:@"Red node has a red child" userInfo:nil]; - } - - if([self.right isRed]) { - @throw [[NSException alloc] initWithName:@"check" reason:@"Right child is red" userInfo:nil]; - } - - blackDepth = [self.left check]; -// NSLog(err); - if(blackDepth != [self.right check]) { - NSString* err = [NSString stringWithFormat:@"(%@ -> %@)blackDepth: %d ; self.right check: %d", self.value, [self.color boolValue] ? @"red" : @"black", blackDepth, [self.right check]]; -// return 10; - @throw [[NSException alloc] initWithName:@"check" reason:err userInfo:nil]; - } - else { - int ret = blackDepth + ([self isRed] ? 0 : 1); -// NSLog(@"black depth is: %d; other is: %d, ret is: %d", blackDepth, ([self isRed] ? 0 : 1), ret); - return ret; - } -} - - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.h deleted file mode 100644 index 934ca8b..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.h +++ /dev/null @@ -1,30 +0,0 @@ -/** - * @fileoverview Implementation of an immutable SortedMap using a Left-leaning - * Red-Black Tree, adapted from the implementation in Mugs - * (http://mads379.github.com/mugs/) by Mads Hartmann Jensen - * (mads379@gmail.com). - * - * Original paper on Left-leaning Red-Black Trees: - * http://www.cs.princeton.edu/~rs/talks/LLRB/LLRB.pdf - * - * Invariant 1: No red node has a red child - * Invariant 2: Every leaf path has the same number of black nodes - * Invariant 3: Only the left child can be red (left leaning) - */ - -#import <Foundation/Foundation.h> -#import "FImmutableSortedDictionary.h" -#import "FLLRBNode.h" - -@interface FTreeSortedDictionary : FImmutableSortedDictionary - -@property (nonatomic, copy, readonly) NSComparator comparator; -@property (nonatomic, strong, readonly) id<FLLRBNode> root; - -- (id)initWithComparator:(NSComparator)aComparator; - -// Override methods to return subtype -- (FTreeSortedDictionary *) insertKey:(id)aKey withValue:(id)aValue; -- (FTreeSortedDictionary *) removeKey:(id)aKey; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.m deleted file mode 100644 index e9f0683..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.m +++ /dev/null @@ -1,326 +0,0 @@ -#import "FTreeSortedDictionary.h" -#import "FLLRBEmptyNode.h" -#import "FLLRBValueNode.h" -#import "FTreeSortedDictionaryEnumerator.h" - -typedef void (^fbt_void_nsnumber_int)(NSNumber* color, NSUInteger chunkSize); - -@interface FTreeSortedDictionary () - -@property (nonatomic, strong) id<FLLRBNode> root; -@property (nonatomic, copy, readwrite) NSComparator comparator; - -@end - -@implementation FTreeSortedDictionary - -- (id)initWithComparator:(NSComparator)aComparator { - self = [super init]; - if (self) { - self.root = [FLLRBEmptyNode emptyNode]; - self.comparator = aComparator; - } - return self; -} - -- (id)initWithComparator:(NSComparator)aComparator withRoot:(__unsafe_unretained id<FLLRBNode>)aRoot { - self = [super init]; - if (self) { - self.root = aRoot; - self.comparator = aComparator; - } - return self; -} - -/** - * Returns a copy of the map, with the specified key/value added or replaced. - */ -- (FTreeSortedDictionary *) insertKey:(__unsafe_unretained id)aKey withValue:(__unsafe_unretained id)aValue { - return [[FTreeSortedDictionary alloc] initWithComparator:self.comparator - withRoot:[[self.root insertKey:aKey forValue:aValue withComparator:self.comparator] - copyWith:nil - withValue:nil - withColor:BLACK - withLeft:nil - withRight:nil]]; -} - - -- (FTreeSortedDictionary *) removeKey:(__unsafe_unretained id)aKey { - // Remove is somewhat expensive even if the key doesn't exist (the tree does rebalancing and stuff). So avoid it. - if (![self contains:aKey]) { - return self; - } else { - return [[FTreeSortedDictionary alloc] - initWithComparator:self.comparator - withRoot:[[self.root remove:aKey withComparator:self.comparator] - copyWith:nil - withValue:nil - withColor:BLACK - withLeft:nil - withRight:nil]]; - } -} - -- (id) get:(__unsafe_unretained id) key { - if (key == nil) { - return nil; - } - NSComparisonResult cmp; - id<FLLRBNode> node = self.root; - while(![node isEmpty]) { - cmp = self.comparator(key, node.key); - if(cmp == NSOrderedSame) { - return node.value; - } - else if (cmp == NSOrderedAscending) { - node = node.left; - } - else { - node = node.right; - } - } - return nil; -} - -- (id) getPredecessorKey:(__unsafe_unretained id) key { - NSComparisonResult cmp; - id<FLLRBNode> node = self.root; - id<FLLRBNode> rightParent = nil; - while(![node isEmpty]) { - cmp = self.comparator(key, node.key); - if(cmp == NSOrderedSame) { - if(![node.left isEmpty]) { - node = node.left; - while(! [node.right isEmpty]) { - node = node.right; - } - return node.key; - } - else if (rightParent != nil) { - return rightParent.key; - } - else { - return nil; - } - } - else if (cmp == NSOrderedAscending) { - node = node.left; - } - else if (cmp == NSOrderedDescending) { - rightParent = node; - node = node.right; - } - } - @throw [NSException exceptionWithName:@"NonexistentKey" reason:@"getPredecessorKey called with nonexistent key." userInfo:@{@"key": [key description] }]; -} - -- (BOOL) isEmpty { - return [self.root isEmpty]; -} - -- (int) count { - return [self.root count]; -} - -- (id) minKey { - return [self.root minKey]; -} - -- (id) maxKey { - return [self.root maxKey]; -} - -- (void) enumerateKeysAndObjectsUsingBlock:(void (^)(id, id, BOOL *))block -{ - [self enumerateKeysAndObjectsReverse:NO usingBlock:block]; -} - -- (void) enumerateKeysAndObjectsReverse:(BOOL)reverse usingBlock:(void (^)(id, id, BOOL *))block -{ - if (reverse) { - __block BOOL stop = NO; - [self.root reverseTraversal:^BOOL(id key, id value) { - block(key, value, &stop); - return stop; - }]; - } else { - __block BOOL stop = NO; - [self.root inorderTraversal:^BOOL(id key, id value) { - block(key, value, &stop); - return stop; - }]; - } -} - -- (BOOL) contains:(__unsafe_unretained id)key { - return ([self objectForKey:key] != nil); -} - -- (NSEnumerator *) keyEnumerator { - return [[FTreeSortedDictionaryEnumerator alloc] - initWithImmutableSortedDictionary:self startKey:nil isReverse:NO]; -} - -- (NSEnumerator *) keyEnumeratorFrom:(id)startKey { - return [[FTreeSortedDictionaryEnumerator alloc] - initWithImmutableSortedDictionary:self startKey:startKey isReverse:NO]; -} - -- (NSEnumerator *) reverseKeyEnumerator { - return [[FTreeSortedDictionaryEnumerator alloc] - initWithImmutableSortedDictionary:self startKey:nil isReverse:YES]; -} - -- (NSEnumerator *) reverseKeyEnumeratorFrom:(id)startKey { - return [[FTreeSortedDictionaryEnumerator alloc] - initWithImmutableSortedDictionary:self startKey:startKey isReverse:YES]; -} - - -#pragma mark - -#pragma mark Tree Builder - -// Code to efficiently build a RB Tree -typedef struct _base1_2list { - unsigned int bits; - unsigned short count; - unsigned short current; -} Base1_2List; - -Base1_2List *base1_2List_new(unsigned int length); -void base1_2List_free(Base1_2List* list); -unsigned int log_base2(unsigned int num); -BOOL base1_2List_next(Base1_2List* list); - -unsigned int log_base2(unsigned int num) { - return (unsigned int)(log(num) / log(2)); -} - -/** - * Works like an iterator, so it moves to the next bit. Do not call more than list->count times. - * @return whether or not the next bit is a 1 in base {1,2}. - */ -BOOL base1_2List_next(Base1_2List* list) { - BOOL result = !(list->bits & (0x1 << list->current)); - list->current--; - return result; -} - -static inline unsigned bit_mask(int x) { - return (x >= sizeof(unsigned) * CHAR_BIT) ? (unsigned) -1 : (1U << x) - 1; -} - -/** - * We represent the base{1,2} number as the combination of a binary number and a number of bits that we care about - * We iterate backwards, from most significant bit to least, to build up the llrb nodes. 0 base 2 => 1 base {1,2}, 1 base 2 => 2 base {1,2} - */ -Base1_2List *base1_2List_new(unsigned int length) { - size_t sz = sizeof(Base1_2List); - Base1_2List* list = calloc(1, sz); - // Calculate the number of bits that we care about - list->count = (unsigned short)log_base2(length + 1); - unsigned int mask = bit_mask(list->count); - list->bits = (length + 1) & mask; - list->current = list->count - 1; - return list; -} - - -void base1_2List_free(Base1_2List* list) { - free(list); -} - -+ (id<FLLRBNode>) buildBalancedTree:(NSArray *)keys dictionary:(NSDictionary *)dictionary subArrayStartIndex:(NSUInteger)startIndex length:(NSUInteger)length { - length = MIN(keys.count - startIndex, length); // Bound length by the actual length of the array - if (length == 0) { - return nil; - } else if (length == 1) { - id key = keys[startIndex]; - return [[FLLRBValueNode alloc] initWithKey:key withValue:dictionary[key] withColor:BLACK withLeft:nil withRight:nil]; - } else { - NSUInteger middle = length / 2; - id<FLLRBNode> left = [FTreeSortedDictionary buildBalancedTree:keys dictionary:dictionary subArrayStartIndex:startIndex length:middle]; - id<FLLRBNode> right = [FTreeSortedDictionary buildBalancedTree:keys dictionary:dictionary subArrayStartIndex:(startIndex+middle+1) length:middle]; - id key = keys[startIndex + middle]; - return [[FLLRBValueNode alloc] initWithKey:key withValue:dictionary[key] withColor:BLACK withLeft:left withRight:right]; - } -} - -+ (id<FLLRBNode>) rootFrom12List:(Base1_2List *)base1_2List keyList:(NSArray *)keyList dictionary:(NSDictionary *)dictionary { - __block id<FLLRBNode> root = nil; - __block id<FLLRBNode> node = nil; - __block NSUInteger index = keyList.count; - - fbt_void_nsnumber_int buildPennant = ^(NSNumber* color, NSUInteger chunkSize) { - NSUInteger startIndex = index - chunkSize + 1; - index -= chunkSize; - id key = keyList[index]; - id<FLLRBNode> childTree = [self buildBalancedTree:keyList dictionary:dictionary subArrayStartIndex:startIndex length:(chunkSize - 1)]; - id<FLLRBNode> pennant = [[FLLRBValueNode alloc] initWithKey:key withValue:dictionary[key] withColor:color withLeft:nil withRight:childTree]; - //attachPennant(pennant); - if (node) { - node.left = pennant; - node = pennant; - } else { - root = pennant; - node = pennant; - } - }; - - for (int i = 0; i < base1_2List->count; ++i) { - BOOL isOne = base1_2List_next(base1_2List); - NSUInteger chunkSize = (NSUInteger)pow(2.0, base1_2List->count - (i + 1)); - if (isOne) { - buildPennant(BLACK, chunkSize); - } else { - buildPennant(BLACK, chunkSize); - buildPennant(RED, chunkSize); - } - } - return root; -} - -/** - * Uses the algorithm linked here: - * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.46.1458 - */ - -+ (FImmutableSortedDictionary *)fromDictionary:(NSDictionary *)dictionary withComparator:(NSComparator)comparator -{ - // Steps: - // 0. Sort the array - // 1. Calculate the 1-2 number - // 2. Build From 1-2 number - // 0. for each digit in 1-2 number - // 0. calculate chunk size - // 1. build 1 or 2 pennants of that size - // 2. attach pennants and update node pointer - // 1. return root - NSMutableArray *sortedKeyList = [NSMutableArray arrayWithCapacity:dictionary.count]; - [dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - [sortedKeyList addObject:key]; - }]; - [sortedKeyList sortUsingComparator:comparator]; - - [sortedKeyList enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - if (idx > 0) { - if (comparator(sortedKeyList[idx - 1], obj) != NSOrderedAscending) { - [NSException raise:NSInvalidArgumentException format:@"Can't create FImmutableSortedDictionary with keys with same ordering!"]; - } - } - }]; - - Base1_2List* list = base1_2List_new((unsigned int)sortedKeyList.count); - id<FLLRBNode> root = [self rootFrom12List:list keyList:sortedKeyList dictionary:dictionary]; - base1_2List_free(list); - - if (root != nil) { - return [[FTreeSortedDictionary alloc] initWithComparator:comparator withRoot:root]; - } else { - return [[FTreeSortedDictionary alloc] initWithComparator:comparator]; - } -} - -@end - diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.h deleted file mode 100644 index d79fe8e..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.h +++ /dev/null @@ -1,9 +0,0 @@ -#import <Foundation/Foundation.h> -#import "FTreeSortedDictionary.h" - -@interface FTreeSortedDictionaryEnumerator : NSEnumerator - -- (id)initWithImmutableSortedDictionary:(FTreeSortedDictionary *)aDict startKey:(id)startKey isReverse:(BOOL)reverse; -- (id)nextObject; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.m deleted file mode 100644 index 2aca86e..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.m +++ /dev/null @@ -1,83 +0,0 @@ -#import "FTreeSortedDictionaryEnumerator.h" - -@interface FTreeSortedDictionaryEnumerator() -@property (nonatomic, strong) FTreeSortedDictionary* immutableSortedDictionary; -@property (nonatomic, strong) NSMutableArray* stack; -@property (nonatomic) BOOL isReverse; - -@end - -@implementation FTreeSortedDictionaryEnumerator - -- (id)initWithImmutableSortedDictionary:(FTreeSortedDictionary *)aDict - startKey:(id)startKey isReverse:(BOOL)reverse { - self = [super init]; - if (self) { - self.immutableSortedDictionary = aDict; - self.stack = [[NSMutableArray alloc] init]; - self.isReverse = reverse; - - NSComparator comparator = aDict.comparator; - id<FLLRBNode> node = self.immutableSortedDictionary.root; - - NSInteger cmp; - while(![node isEmpty]) { - cmp = startKey ? comparator(node.key, startKey) : 1; - // flip the comparison if we're going in reverse - if (self.isReverse) cmp *= -1; - - if (cmp < 0) { - // This node is less than our start key. Ignore it. - if (self.isReverse) { - node = node.left; - } else { - node = node.right; - } - } else if (cmp == 0) { - // This node is exactly equal to our start key. Push it on the stack, but stop iterating: - [self.stack addObject:node]; - break; - } else { - // This node is greater than our start key, add it to the stack and move on to the next one. - [self.stack addObject:node]; - if (self.isReverse) { - node = node.right; - } else { - node = node.left; - } - } - } - } - return self; -} - -- (id)nextObject { - if([self.stack count] == 0) { - return nil; - } - - id<FLLRBNode> node = nil; - @synchronized(self.stack) { - node = [self.stack lastObject]; - [self.stack removeLastObject]; - } - id result = node.key; - - if (self.isReverse) { - node = node.left; - while (![node isEmpty]) { - [self.stack addObject:node]; - node = node.right; - } - } else { - node = node.right; - while (![node isEmpty]) { - [self.stack addObject:node]; - node = node.left; - } - } - - return result; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/FSRWebSocket.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/FSRWebSocket.h deleted file mode 100644 index 1ca1815..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/FSRWebSocket.h +++ /dev/null @@ -1,107 +0,0 @@ -// -// Copyright 2012 Square Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import <Foundation/Foundation.h> -#import <Security/SecCertificate.h> - -typedef enum { - SR_CONNECTING = 0, - SR_OPEN = 1, - SR_CLOSING = 2, - SR_CLOSED = 3, - -} FSRReadyState; - -@class FSRWebSocket; - -extern NSString *const FSRWebSocketErrorDomain; - -@protocol FSRWebSocketDelegate; - -@interface FSRWebSocket : NSObject <NSStreamDelegate> - -@property (nonatomic, weak) id <FSRWebSocketDelegate> delegate; - -@property (nonatomic, readonly) FSRReadyState readyState; -@property (nonatomic, readonly, retain) NSURL *url; - -// This returns the negotiated protocol. -// It will be niluntil after the handshake completes. -@property (nonatomic, readonly, copy) NSString *protocol; - -// Protocols should be an array of strings that turn into Sec-WebSocket-Protocol -- (id)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray *)protocols queue:(dispatch_queue_t)queue andUserAgent:(NSString *)userAgent; -- (id)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray *)protocols; -- (id)initWithURLRequest:(NSURLRequest *)request queue:(dispatch_queue_t)queue andUserAgent:(NSString *)userAgent; -- (id)initWithURLRequest:(NSURLRequest *)request; - -// Some helper constructors -- (id)initWithURL:(NSURL *)url protocols:(NSArray *)protocols; -- (id)initWithURL:(NSURL *)url; - -// Delegate queue will be dispatch_main_queue by default. -// You cannot set both OperationQueue and dispatch_queue. -- (void)setDelegateOperationQueue:(NSOperationQueue*) queue; -- (void)setDelegateDispatchQueue:(dispatch_queue_t)queue; - -// By default, it will schedule itself on +[NSRunLoop SR_networkRunLoop] using defaultModes. -- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode; -- (void)unscheduleFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode; - -// SRWebSockets are intended one-time-use only. Open should be called once and only once -- (void)open; - -- (void)close; -- (void)closeWithCode:(NSInteger)code reason:(NSString *)reason; - -// Send a UTF8 String or Data -- (void)send:(id)data; - -@end - -@protocol FSRWebSocketDelegate <NSObject> - -// message will either be an NSString if the server is using text -// or NSData if the server is using binary -- (void)webSocket:(FSRWebSocket *)webSocket didReceiveMessage:(id)message; - -@optional - -- (void)webSocketDidOpen:(FSRWebSocket *)webSocket; -- (void)webSocket:(FSRWebSocket *)webSocket didFailWithError:(NSError *)error; -- (void)webSocket:(FSRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean; - -@end - - -@interface NSURLRequest (FCertificateAdditions) - -@property (nonatomic, retain, readonly) NSArray *FSR_SSLPinnedCertificates; - -@end - - -@interface NSMutableURLRequest (FCertificateAdditions) - -@property (nonatomic, retain) NSArray *FSR_SSLPinnedCertificates; - -@end - -@interface NSRunLoop (FSRWebSocket) - -+ (NSRunLoop *)FSR_networkRunLoop; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/FSRWebSocket.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/FSRWebSocket.m deleted file mode 100644 index 92d9d55..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/FSRWebSocket.m +++ /dev/null @@ -1,1858 +0,0 @@ -// -// Copyright 2012 Square Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import <Foundation/Foundation.h> - -#import "FSRWebSocket.h" - -#if __has_include(<unicode/utf8.h>) -#define HAS_ICU -#endif - -#import <sys/socket.h> - -#ifdef HAS_ICU -#import <unicode/utf8.h> -#endif - -#if __has_include(<Endian.h>) -#import <Endian.h> -#else -#import <CoreServices/CoreServices.h> -#endif - -#import <CommonCrypto/CommonDigest.h> -#import <Security/SecRandom.h> -#import "fbase64.h" -#import "NSData+SRB64Additions.h" - -#if OS_OBJECT_USE_OBJC_RETAIN_RELEASE -#define sr_dispatch_retain(x) -#define sr_dispatch_release(x) -#define maybe_bridge(x) ((__bridge void *) x) -#else -#define sr_dispatch_retain(x) dispatch_retain(x) -#define sr_dispatch_release(x) dispatch_release(x) -#define maybe_bridge(x) (x) -#endif - -typedef enum { - SROpCodeTextFrame = 0x1, - SROpCodeBinaryFrame = 0x2, - //3-7Reserved - SROpCodeConnectionClose = 0x8, - SROpCodePing = 0x9, - SROpCodePong = 0xA, - //B-F reserved -} FSROpCode; - -typedef enum { - SRStatusCodeNormal = 1000, - SRStatusCodeGoingAway = 1001, - SRStatusCodeProtocolError = 1002, - SRStatusCodeUnhandledType = 1003, - // 1004 reserved - SRStatusNoStatusReceived = 1005, - // 1004-1006 reserved - SRStatusCodeInvalidUTF8 = 1007, - SRStatusCodePolicyViolated = 1008, - SRStatusCodeMessageTooBig = 1009, -} FSRStatusCode; - -typedef struct { - BOOL fin; -// BOOL rsv1; -// BOOL rsv2; -// BOOL rsv3; - uint8_t opcode; - BOOL masked; - uint64_t payload_length; -} frame_header; - -static NSString *const SRWebSocketAppendToSecKeyString = @"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; - -static inline int32_t validate_dispatch_data_partial_string(NSData *data); -static inline void SRFastLog(NSString *format, ...); - -@interface NSData (FSRWebSocket) - -- (NSString *)stringBySHA1ThenBase64Encoding; - -@end - - -@interface NSString (FSRWebSocket) - -- (NSString *)stringBySHA1ThenBase64Encoding; - -@end - - -@interface NSURL (FSRWebSocket) - -// The origin isn't really applicable for a native application -// So instead, just map ws -> http and wss -> https -- (NSString *)SR_origin; - -@end - -@interface _FSRRunLoopThread : NSThread - -@property (nonatomic, readonly) NSRunLoop *runLoop; - -@end - -static NSString *newSHA1String(const char *bytes, size_t length) { - uint8_t md[CC_SHA1_DIGEST_LENGTH]; - - CC_SHA1(bytes, (int)length, md); - - size_t buffer_size = ((sizeof(md) * 3 + 2) / 2); - - char *buffer = (char *)malloc(buffer_size); - - int len = f_b64_ntop(md, CC_SHA1_DIGEST_LENGTH, buffer, buffer_size); - if (len == -1) { - free(buffer); - return nil; - } else{ - return [[NSString alloc] initWithBytesNoCopy:buffer length:len encoding:NSASCIIStringEncoding freeWhenDone:YES]; - } -} - -@implementation NSData (FSRWebSocket) - -- (NSString *)stringBySHA1ThenBase64Encoding; -{ - return newSHA1String(self.bytes, self.length); -} - -@end - - -@implementation NSString (FSRWebSocket) - -- (NSString *)stringBySHA1ThenBase64Encoding; -{ - return newSHA1String(self.UTF8String, self.length); -} - -@end - -NSString *const FSRWebSocketErrorDomain = @"FSRWebSocketErrorDomain"; - -// Returns number of bytes consumed. returning 0 means you didn't match. -// Sends bytes to callback handler; -typedef size_t (^stream_scanner)(NSData *collected_data); - -typedef void (^data_callback)(FSRWebSocket *webSocket, NSData *data); - -@interface FSRIOConsumer : NSObject { - stream_scanner _scanner; - data_callback _handler; - size_t _bytesNeeded; - BOOL _readToCurrentFrame; - BOOL _unmaskBytes; -} -@property (nonatomic, copy, readonly) stream_scanner consumer; -@property (nonatomic, copy, readonly) data_callback handler; -@property (nonatomic, assign) size_t bytesNeeded; -@property (nonatomic, assign, readonly) BOOL readToCurrentFrame; -@property (nonatomic, assign, readonly) BOOL unmaskBytes; - -@end - -// This class is not thread-safe, and is expected to always be run on the same queue. -@interface FSRIOConsumerPool : NSObject - -- (id)initWithBufferCapacity:(NSUInteger)poolSize; - -- (FSRIOConsumer *)consumerWithScanner:(stream_scanner)scanner handler:(data_callback)handler bytesNeeded:(size_t)bytesNeeded readToCurrentFrame:(BOOL)readToCurrentFrame unmaskBytes:(BOOL)unmaskBytes; -- (void)returnConsumer:(FSRIOConsumer *)consumer; - -@end - -@interface FSRWebSocket () <NSStreamDelegate> - -- (void)_writeData:(NSData *)data; -- (void)_closeWithProtocolError:(NSString *)message; -- (void)_failWithError:(NSError *)error; - -- (void)_disconnect; - -- (void)_readFrameNew; -- (void)_readFrameContinue; - -- (void)_pumpScanner; - -- (void)_pumpWriting; - -- (void)_addConsumerWithScanner:(stream_scanner)consumer callback:(data_callback)callback; -- (void)_addConsumerWithDataLength:(size_t)dataLength callback:(data_callback)callback readToCurrentFrame:(BOOL)readToCurrentFrame unmaskBytes:(BOOL)unmaskBytes; -- (void)_addConsumerWithScanner:(stream_scanner)consumer callback:(data_callback)callback dataLength:(size_t)dataLength; -- (void)_readUntilBytes:(const void *)bytes length:(size_t)length callback:(data_callback)dataHandler; -- (void)_readUntilHeaderCompleteWithCallback:(data_callback)dataHandler; - -- (void)_sendFrameWithOpcode:(FSROpCode)opcode data:(id)data; - -- (BOOL)_checkHandshake:(CFHTTPMessageRef)httpMessage; -- (void)_SR_commonInit; - -- (void)_initializeStreams; -- (void)_connect; - -@property (nonatomic) FSRReadyState readyState; - -@property (nonatomic) NSOperationQueue *delegateOperationQueue; -@property (nonatomic) dispatch_queue_t delegateDispatchQueue; - -@end - - -@implementation FSRWebSocket { - NSInteger _webSocketVersion; - - NSOperationQueue *_delegateOperationQueue; - dispatch_queue_t _delegateDispatchQueue; - dispatch_queue_t _workQueue; - NSMutableArray *_consumers; - - NSInputStream *_inputStream; - NSOutputStream *_outputStream; - - NSMutableData *_readBuffer; - NSInteger _readBufferOffset; - - NSMutableData *_outputBuffer; - NSInteger _outputBufferOffset; - - uint8_t _currentFrameOpcode; - size_t _currentFrameCount; - size_t _readOpCount; - uint32_t _currentStringScanPosition; - NSMutableData *_currentFrameData; - - NSString *_closeReason; - - NSString *_secKey; - - BOOL _pinnedCertFound; - - uint8_t _currentReadMaskKey[4]; - size_t _currentReadMaskOffset; - - BOOL _consumerStopped; - - BOOL _closeWhenFinishedWriting; - BOOL _failed; - - BOOL _secure; - NSURLRequest *_urlRequest; - NSString *_userAgent; - - CFHTTPMessageRef _receivedHTTPHeaders; - - BOOL _sentClose; - BOOL _didFail; - BOOL _cleanupScheduled; - int _closeCode; - - BOOL _isPumping; - - NSMutableSet *_scheduledRunloops; - - // We use this to retain ourselves. - __strong FSRWebSocket *_selfRetain; - - NSArray *_requestedProtocols; - FSRIOConsumerPool *_consumerPool; -} - -@synthesize delegate = _delegate; -@synthesize url = _url; -@synthesize readyState = _readyState; -@synthesize protocol = _protocol; - -static __strong NSData *CRLFCRLF; - -+ (void)initialize; -{ - CRLFCRLF = [[NSData alloc] initWithBytes:"\r\n\r\n" length:4]; -} - -- (id)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray *)protocols queue:(dispatch_queue_t)queue andUserAgent:(NSString *)userAgent; -{ - self = [super init]; - if (self) { - assert(request.URL); - _url = request.URL; - NSString *scheme = [_url scheme]; - - _requestedProtocols = [protocols copy]; - _userAgent = userAgent; - - assert([scheme isEqualToString:@"ws"] || [scheme isEqualToString:@"http"] || [scheme isEqualToString:@"wss"] || [scheme isEqualToString:@"https"]); - _urlRequest = request; - - if ([scheme isEqualToString:@"wss"] || [scheme isEqualToString:@"https"]) { - _secure = YES; - } - - if (!queue) { - _delegateDispatchQueue = dispatch_get_main_queue(); - } else { - _delegateDispatchQueue = queue; - } - - [self _SR_commonInit]; - } - - return self; -} - -- (id)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray *)protocols; -{ - return [self initWithURLRequest:request protocols:nil queue:nil andUserAgent:nil]; -} - -- (id)initWithURLRequest:(NSURLRequest *)request queue:(dispatch_queue_t)queue andUserAgent:(NSString *)userAgent; -{ - return [self initWithURLRequest:request protocols:nil queue:queue andUserAgent:userAgent]; -} - -- (id)initWithURLRequest:(NSURLRequest *)request; -{ - return [self initWithURLRequest:request protocols:nil]; -} - -- (id)initWithURL:(NSURL *)url; -{ - return [self initWithURL:url protocols:nil]; -} - -- (id)initWithURL:(NSURL *)url protocols:(NSArray *)protocols; -{ - NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; - return [self initWithURLRequest:request protocols:protocols]; -} - -- (void)_SR_commonInit; -{ - _readyState = SR_CONNECTING; - - _consumerStopped = YES; - - _webSocketVersion = 13; - - _workQueue = dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL); - - // Going to set a specific on the queue so we can validate we're on the work queue - dispatch_queue_set_specific(_workQueue, (__bridge void *)self, maybe_bridge(_workQueue), NULL); - - sr_dispatch_retain(_delegateDispatchQueue); - - _readBuffer = [[NSMutableData alloc] init]; - _outputBuffer = [[NSMutableData alloc] init]; - - _currentFrameData = [[NSMutableData alloc] init]; - - _consumers = [[NSMutableArray alloc] init]; - - _consumerPool = [[FSRIOConsumerPool alloc] init]; - - _scheduledRunloops = [[NSMutableSet alloc] init]; - - [self _initializeStreams]; - - // default handlers -} - -- (void)assertOnWorkQueue; -{ - assert(dispatch_get_specific((__bridge void *)self) == maybe_bridge(_workQueue)); -} - -- (void)dealloc -{ - _inputStream.delegate = nil; - _outputStream.delegate = nil; - - [_inputStream close]; - [_outputStream close]; - - sr_dispatch_release(_workQueue); - _workQueue = NULL; - - if (_receivedHTTPHeaders) { - CFRelease(_receivedHTTPHeaders); - _receivedHTTPHeaders = NULL; - } - - if (_delegateDispatchQueue) { - sr_dispatch_release(_delegateDispatchQueue); - _delegateDispatchQueue = NULL; - } -} - -#ifndef NDEBUG - -- (void)setReadyState:(FSRReadyState)aReadyState; -{ - [self willChangeValueForKey:@"readyState"]; - assert(aReadyState > _readyState); - _readyState = aReadyState; - [self didChangeValueForKey:@"readyState"]; -} - -#endif - -- (void)open; -{ - assert(_url); - NSAssert(_readyState == SR_CONNECTING, @"Cannot call -(void)open on SRWebSocket more than once"); - - _selfRetain = self; - - [self _connect]; -} - -// Calls block on delegate queue -- (void)_performDelegateBlock:(dispatch_block_t)block; -{ - if (_delegateOperationQueue) { - [_delegateOperationQueue addOperationWithBlock:block]; - } else { - assert(_delegateDispatchQueue); - dispatch_async(_delegateDispatchQueue, block); - } -} - -- (void)setDelegateDispatchQueue:(dispatch_queue_t)queue; -{ - if (queue) { - sr_dispatch_retain(queue); - } - - if (_delegateDispatchQueue) { - sr_dispatch_release(_delegateDispatchQueue); - } - - _delegateDispatchQueue = queue; -} - -- (BOOL)_checkHandshake:(CFHTTPMessageRef)httpMessage; -{ - NSString *acceptHeader = CFBridgingRelease(CFHTTPMessageCopyHeaderFieldValue(httpMessage, CFSTR("Sec-WebSocket-Accept"))); - - if (acceptHeader == nil) { - return NO; - } - - NSString *concattedString = [_secKey stringByAppendingString:SRWebSocketAppendToSecKeyString]; - NSString *expectedAccept = [concattedString stringBySHA1ThenBase64Encoding]; - - return [acceptHeader isEqualToString:expectedAccept]; -} - -- (void)_HTTPHeadersDidFinish; -{ - NSInteger responseCode = CFHTTPMessageGetResponseStatusCode(_receivedHTTPHeaders); - - if (responseCode >= 400) { - SRFastLog(@"Request failed with response code %d", responseCode); - [self _failWithError:[NSError errorWithDomain:@"org.lolrus.SocketRocket" code:2132 userInfo:[NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"received bad response code from server %u", (int)responseCode] forKey:NSLocalizedDescriptionKey]]]; - return; - - } - - if(![self _checkHandshake:_receivedHTTPHeaders]) { - [self _failWithError:[NSError errorWithDomain:FSRWebSocketErrorDomain code:2133 userInfo:[NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"Invalid Sec-WebSocket-Accept response"] forKey:NSLocalizedDescriptionKey]]]; - return; - } - - NSString *negotiatedProtocol = CFBridgingRelease(CFHTTPMessageCopyHeaderFieldValue(_receivedHTTPHeaders, CFSTR("Sec-WebSocket-Protocol"))); - if (negotiatedProtocol) { - // Make sure we requested the protocol - if ([_requestedProtocols indexOfObject:negotiatedProtocol] == NSNotFound) { - [self _failWithError:[NSError errorWithDomain:FSRWebSocketErrorDomain code:2133 userInfo:[NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"Server specified Sec-WebSocket-Protocol that wasn't requested"] forKey:NSLocalizedDescriptionKey]]]; - return; - } - - _protocol = negotiatedProtocol; - } - - self.readyState = SR_OPEN; - - if (!_didFail) { - [self _readFrameNew]; - } - - [self _performDelegateBlock:^{ - if ([self.delegate respondsToSelector:@selector(webSocketDidOpen:)]) { - [self.delegate webSocketDidOpen:self]; - }; - }]; -} - - -- (void)_readHTTPHeader; -{ - if (_receivedHTTPHeaders == NULL) { - _receivedHTTPHeaders = CFHTTPMessageCreateEmpty(NULL, NO); - } - - [self _readUntilHeaderCompleteWithCallback:^(FSRWebSocket *self, NSData *data) { - CFHTTPMessageAppendBytes(self->_receivedHTTPHeaders, (const UInt8 *)data.bytes, data.length); - - if (CFHTTPMessageIsHeaderComplete(self->_receivedHTTPHeaders)) { - SRFastLog(@"Finished reading headers %@", CFBridgingRelease(CFHTTPMessageCopyAllHeaderFields(self->_receivedHTTPHeaders))); - [self _HTTPHeadersDidFinish]; - } else { - [self _readHTTPHeader]; - } - }]; -} - -- (void)didConnect -{ - SRFastLog(@"Connected"); - CFHTTPMessageRef request = CFHTTPMessageCreateRequest(NULL, CFSTR("GET"), (__bridge CFURLRef)_url, kCFHTTPVersion1_1); - - // Set host first so it defaults - CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Host"), (__bridge CFStringRef) - (_url.port != nil ? [NSString stringWithFormat:@"%@:%@", - _url.host, _url.port] : _url.host)); - - NSMutableData *keyBytes = [[NSMutableData alloc] initWithLength:16]; - int result = SecRandomCopyBytes(kSecRandomDefault, keyBytes.length, keyBytes.mutableBytes); - assert(result == 0); - _secKey = [FSRUtilities base64EncodedStringFromData:keyBytes]; - assert([_secKey length] == 24); - - CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Upgrade"), CFSTR("websocket")); - CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Connection"), CFSTR("Upgrade")); - if (_userAgent) { - CFHTTPMessageSetHeaderFieldValue(request, CFSTR("User-Agent"), (__bridge CFStringRef)_userAgent); - } - - CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Sec-WebSocket-Key"), (__bridge CFStringRef)_secKey); - CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Sec-WebSocket-Version"), (__bridge CFStringRef)[NSString stringWithFormat:@"%u", (int)_webSocketVersion]); - - CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Origin"), (__bridge CFStringRef)_url.SR_origin); - - if (_requestedProtocols) { - CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Sec-WebSocket-Protocol"), (__bridge CFStringRef)[_requestedProtocols componentsJoinedByString:@", "]); - } - - [_urlRequest.allHTTPHeaderFields enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - CFHTTPMessageSetHeaderFieldValue(request, (__bridge CFStringRef)key, (__bridge CFStringRef)obj); - }]; - - NSData *message = CFBridgingRelease(CFHTTPMessageCopySerializedMessage(request)); - - CFRelease(request); - - [self _writeData:message]; - [self _readHTTPHeader]; -} - -//- (void)_connectToHost:(NSString *)host port:(NSInteger)port; -- (void)_initializeStreams; -{ - NSInteger port = _url.port.integerValue; - if (port == 0) { - if (!_secure) { - port = 80; - } else { - port = 443; - } - } - NSString *host = _url.host; - - CFReadStreamRef readStream = NULL; - CFWriteStreamRef writeStream = NULL; - - CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)host, (int)port, &readStream, &writeStream); - - // XXX - CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeBackground); - CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeBackground); - - _outputStream = CFBridgingRelease(writeStream); - _inputStream = CFBridgingRelease(readStream); - - - if (_secure) { - NSMutableDictionary *SSLOptions = [[NSMutableDictionary alloc] init]; - - [_outputStream setProperty:(__bridge id)kCFStreamSocketSecurityLevelNegotiatedSSL forKey:(__bridge id)kCFStreamPropertySocketSecurityLevel]; - - // If we're using pinned certs, don't validate the certificate chain - if ([_urlRequest FSR_SSLPinnedCertificates].count) { - [SSLOptions setValue:[NSNumber numberWithBool:NO] forKey:(__bridge id)kCFStreamSSLValidatesCertificateChain]; - } - - [_outputStream setProperty:SSLOptions - forKey:(__bridge id)kCFStreamPropertySSLSettings]; - } - - _inputStream.delegate = self; - _outputStream.delegate = self; - - [_outputStream open]; - [_inputStream open]; -} - -- (void)_connect; -{ - if (!_scheduledRunloops.count) { - [self scheduleInRunLoop:[NSRunLoop FSR_networkRunLoop] forMode:NSDefaultRunLoopMode]; - } - - - [_outputStream open]; - [_inputStream open]; -} - -- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode; -{ - [_outputStream scheduleInRunLoop:aRunLoop forMode:mode]; - [_inputStream scheduleInRunLoop:aRunLoop forMode:mode]; - - [_scheduledRunloops addObject:@[aRunLoop, mode]]; -} - -- (void)unscheduleFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode; -{ - [_outputStream removeFromRunLoop:aRunLoop forMode:mode]; - [_inputStream removeFromRunLoop:aRunLoop forMode:mode]; - - [_scheduledRunloops removeObject:@[aRunLoop, mode]]; -} - -- (void)close; -{ - [self closeWithCode:-1 reason:nil]; -} - -- (void)closeWithCode:(NSInteger)code reason:(NSString *)reason; -{ - assert(code); - dispatch_async(_workQueue, ^{ - if (self.readyState == SR_CLOSING || self.readyState == SR_CLOSED) { - return; - } - - BOOL wasConnecting = self.readyState == SR_CONNECTING; - - self.readyState = SR_CLOSING; - - SRFastLog(@"Closing with code %d reason %@", code, reason); - - if (wasConnecting) { - [self _disconnect]; - return; - } - - size_t maxMsgSize = [reason maximumLengthOfBytesUsingEncoding:NSUTF8StringEncoding]; - NSMutableData *mutablePayload = [[NSMutableData alloc] initWithLength:sizeof(uint16_t) + maxMsgSize]; - NSData *payload = mutablePayload; - - ((uint16_t *)mutablePayload.mutableBytes)[0] = EndianU16_BtoN(code); - - if (reason) { - NSRange remainingRange = {0}; - - NSUInteger usedLength = 0; - - BOOL success = [reason getBytes:(char *)mutablePayload.mutableBytes + sizeof(uint16_t) maxLength:payload.length - sizeof(uint16_t) usedLength:&usedLength encoding:NSUTF8StringEncoding options:NSStringEncodingConversionExternalRepresentation range:NSMakeRange(0, reason.length) remainingRange:&remainingRange]; - - assert(success); - assert(remainingRange.length == 0); - - if (usedLength != maxMsgSize) { - payload = [payload subdataWithRange:NSMakeRange(0, usedLength + sizeof(uint16_t))]; - } - } - - - [self _sendFrameWithOpcode:SROpCodeConnectionClose data:payload]; - }); -} - -- (void)_closeWithProtocolError:(NSString *)message; -{ - // Need to shunt this on the _callbackQueue first to see if they received any messages - [self _performDelegateBlock:^{ - [self closeWithCode:SRStatusCodeProtocolError reason:message]; - dispatch_async(self->_workQueue, ^{ - [self _disconnect]; - }); - }]; -} - -- (void)_failWithError:(NSError *)error; -{ - dispatch_async(_workQueue, ^{ - if (self.readyState != SR_CLOSED) { - self->_failed = YES; - [self _performDelegateBlock:^{ - if ([self.delegate respondsToSelector:@selector(webSocket:didFailWithError:)]) { - [self.delegate webSocket:self didFailWithError:error]; - } - }]; - - self.readyState = SR_CLOSED; - - SRFastLog(@"Failing with error %@", error.localizedDescription); - - [self _disconnect]; - [self _scheduleCleanup]; - } - }); -} - -- (void)_writeData:(NSData *)data; -{ - [self assertOnWorkQueue]; - - if (_closeWhenFinishedWriting) { - return; - } - [_outputBuffer appendData:data]; - [self _pumpWriting]; -} -- (void)send:(id)data; -{ - SRFastLog(@"Sending data %@", data); - NSAssert(self.readyState != SR_CONNECTING, @"Invalid State: Cannot call send: until connection is open"); - // TODO: maybe not copy this for performance - data = [data copy]; - dispatch_async(_workQueue, ^{ - if ([data isKindOfClass:[NSString class]]) { - [self _sendFrameWithOpcode:SROpCodeTextFrame data:[(NSString *)data dataUsingEncoding:NSUTF8StringEncoding]]; - } else if ([data isKindOfClass:[NSData class]]) { - [self _sendFrameWithOpcode:SROpCodeBinaryFrame data:data]; - } else if (data == nil) { - [self _sendFrameWithOpcode:SROpCodeTextFrame data:data]; - } else { - assert(NO); - } - }); -} - -- (void)handlePing:(NSData *)pingData; -{ - // Need to pingpong this off _callbackQueue first to make sure messages happen in order - [self _performDelegateBlock:^{ - dispatch_async(self->_workQueue, ^{ - [self _sendFrameWithOpcode:SROpCodePong data:pingData]; - }); - }]; -} - -- (void)handlePong; -{ - // NOOP -} - -- (void)_handleMessage:(id)message -{ - SRFastLog(@"Received message"); - [self _performDelegateBlock:^{ - if ([self.delegate respondsToSelector:@selector(webSocket:didReceiveMessage:)]) { - [self.delegate webSocket:self didReceiveMessage:message]; - } - }]; -} - - -static inline BOOL closeCodeIsValid(int closeCode) { - if (closeCode < 1000) { - return NO; - } - - if (closeCode >= 1000 && closeCode <= 1011) { - if (closeCode == 1004 || - closeCode == 1005 || - closeCode == 1006) { - return NO; - } - return YES; - } - - if (closeCode >= 3000 && closeCode <= 3999) { - return YES; - } - - if (closeCode >= 4000 && closeCode <= 4999) { - return YES; - } - - return NO; -} - -// Note from RFC: -// -// If there is a body, the first two -// bytes of the body MUST be a 2-byte unsigned integer (in network byte -// order) representing a status code with value /code/ defined in -// Section 7.4. Following the 2-byte integer the body MAY contain UTF-8 -// encoded data with value /reason/, the interpretation of which is not -// defined by this specification. - -- (void)handleCloseWithData:(NSData *)data; -{ - size_t dataSize = data.length; - __block uint16_t closeCode = 0; - - SRFastLog(@"Received close frame"); - - if (dataSize == 1) { - // TODO handle error - [self _closeWithProtocolError:@"Payload for close must be larger than 2 bytes"]; - return; - } else if (dataSize >= 2) { - [data getBytes:&closeCode length:sizeof(closeCode)]; - _closeCode = EndianU16_BtoN(closeCode); - if (!closeCodeIsValid(_closeCode)) { - [self _closeWithProtocolError:[NSString stringWithFormat:@"Cannot have close code of %d", _closeCode]]; - return; - } - if (dataSize > 2) { - _closeReason = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(2, dataSize - 2)] encoding:NSUTF8StringEncoding]; - if (!_closeReason) { - [self _closeWithProtocolError:@"Close reason MUST be valid UTF-8"]; - return; - } - } - } else { - _closeCode = SRStatusNoStatusReceived; - } - - [self assertOnWorkQueue]; - - if (self.readyState == SR_OPEN) { - [self closeWithCode:1000 reason:nil]; - } - dispatch_async(_workQueue, ^{ - [self _disconnect]; - }); -} - -- (void)_disconnect; -{ - [self assertOnWorkQueue]; - SRFastLog(@"Trying to disconnect"); - _closeWhenFinishedWriting = YES; - [self _pumpWriting]; -} - -- (void)_handleFrameWithData:(NSData *)frameData opCode:(NSInteger)opcode; -{ - // Check that the current data is valid UTF8 - - BOOL isControlFrame = (opcode == SROpCodePing || opcode == SROpCodePong || opcode == SROpCodeConnectionClose); - if (!isControlFrame) { - [self _readFrameNew]; - } else { - dispatch_async(_workQueue, ^{ - [self _readFrameContinue]; - }); - } - - switch (opcode) { - case SROpCodeTextFrame: { - NSString *str = [[NSString alloc] initWithData:frameData encoding:NSUTF8StringEncoding]; - if (str == nil && frameData) { - [self closeWithCode:SRStatusCodeInvalidUTF8 reason:@"Text frames must be valid UTF-8"]; - dispatch_async(_workQueue, ^{ - [self _disconnect]; - }); - - return; - } - [self _handleMessage:str]; - break; - } - case SROpCodeBinaryFrame: - [self _handleMessage:[frameData copy]]; - break; - case SROpCodeConnectionClose: - [self handleCloseWithData:frameData]; - break; - case SROpCodePing: - [self handlePing:frameData]; - break; - case SROpCodePong: - [self handlePong]; - break; - default: - [self _closeWithProtocolError:[NSString stringWithFormat:@"Unknown opcode %u", (int)opcode]]; - // TODO: Handle invalid opcode - break; - } -} - -- (void)_handleFrameHeader:(frame_header)frame_header curData:(NSData *)curData; -{ - assert(frame_header.opcode != 0); - - if (self.readyState != SR_OPEN) { - return; - } - - - BOOL isControlFrame = (frame_header.opcode == SROpCodePing || frame_header.opcode == SROpCodePong || frame_header.opcode == SROpCodeConnectionClose); - - if (isControlFrame && !frame_header.fin) { - [self _closeWithProtocolError:@"Fragmented control frames not allowed"]; - return; - } - - if (isControlFrame && frame_header.payload_length >= 126) { - [self _closeWithProtocolError:@"Control frames cannot have payloads larger than 126 bytes"]; - return; - } - - if (!isControlFrame) { - _currentFrameOpcode = frame_header.opcode; - _currentFrameCount += 1; - } - - if (frame_header.payload_length == 0) { - if (isControlFrame) { - [self _handleFrameWithData:curData opCode:frame_header.opcode]; - } else { - if (frame_header.fin) { - [self _handleFrameWithData:_currentFrameData opCode:frame_header.opcode]; - } else { - // TODO add assert that opcode is not a control; - [self _readFrameContinue]; - } - } - } else { - [self _addConsumerWithDataLength:(size_t)frame_header.payload_length callback:^(FSRWebSocket *self, NSData *newData) { - if (isControlFrame) { - [self _handleFrameWithData:newData opCode:frame_header.opcode]; - } else { - if (frame_header.fin) { - [self _handleFrameWithData:self->_currentFrameData opCode:frame_header.opcode]; - } else { - // TODO add assert that opcode is not a control; - [self _readFrameContinue]; - } - - } - } readToCurrentFrame:!isControlFrame unmaskBytes:frame_header.masked]; - } -} - -/* From RFC: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-------+-+-------------+-------------------------------+ - |F|R|R|R| opcode|M| Payload len | Extended payload length | - |I|S|S|S| (4) |A| (7) | (16/64) | - |N|V|V|V| |S| | (if payload len==126/127) | - | |1|2|3| |K| | | - +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - + - | Extended payload length continued, if payload len == 127 | - + - - - - - - - - - - - - - - - +-------------------------------+ - | |Masking-key, if MASK set to 1 | - +-------------------------------+-------------------------------+ - | Masking-key (continued) | Payload Data | - +-------------------------------- - - - - - - - - - - - - - - - + - : Payload Data continued ... : - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - | Payload Data continued ... | - +---------------------------------------------------------------+ - */ - -static const uint8_t SRFinMask = 0x80; -static const uint8_t SROpCodeMask = 0x0F; -static const uint8_t SRRsvMask = 0x70; -static const uint8_t SRMaskMask = 0x80; -static const uint8_t SRPayloadLenMask = 0x7F; - - -- (void)_readFrameContinue; -{ - assert((_currentFrameCount == 0 && _currentFrameOpcode == 0) || (_currentFrameCount > 0 && _currentFrameOpcode > 0)); - - [self _addConsumerWithDataLength:2 callback:^(FSRWebSocket *self, NSData *data) { - __block frame_header header = {0}; - - const uint8_t *headerBuffer = data.bytes; - assert(data.length >= 2); - - if (headerBuffer[0] & SRRsvMask) { - [self _closeWithProtocolError:@"Server used RSV bits"]; - return; - } - - uint8_t receivedOpcode = (SROpCodeMask & headerBuffer[0]); - - BOOL isControlFrame = (receivedOpcode == SROpCodePing || receivedOpcode == SROpCodePong || receivedOpcode == SROpCodeConnectionClose); - - if (!isControlFrame && receivedOpcode != 0 && self->_currentFrameCount > 0) { - [self _closeWithProtocolError:@"all data frames after the initial data frame must have opcode 0"]; - return; - } - - if (receivedOpcode == 0 && self->_currentFrameCount == 0) { - [self _closeWithProtocolError:@"cannot continue a message"]; - return; - } - - header.opcode = receivedOpcode == 0 ? self->_currentFrameOpcode : receivedOpcode; - - header.fin = !!(SRFinMask & headerBuffer[0]); - - - header.masked = !!(SRMaskMask & headerBuffer[1]); - header.payload_length = SRPayloadLenMask & headerBuffer[1]; - - headerBuffer = NULL; - - if (header.masked) { - [self _closeWithProtocolError:@"Client must receive unmasked data"]; - } - - size_t extra_bytes_needed = header.masked ? sizeof(self->_currentReadMaskKey) : 0; - - if (header.payload_length == 126) { - extra_bytes_needed += sizeof(uint16_t); - } else if (header.payload_length == 127) { - extra_bytes_needed += sizeof(uint64_t); - } - - if (extra_bytes_needed == 0) { - [self _handleFrameHeader:header curData:self->_currentFrameData]; - } else { - [self _addConsumerWithDataLength:extra_bytes_needed callback:^(FSRWebSocket *self, NSData *data) { - size_t mapped_size = data.length; - const void *mapped_buffer = data.bytes; - size_t offset = 0; - - if (header.payload_length == 126) { - assert(mapped_size >= sizeof(uint16_t)); - uint16_t newLen = EndianU16_BtoN(*(uint16_t *)(mapped_buffer)); - header.payload_length = newLen; - offset += sizeof(uint16_t); - } else if (header.payload_length == 127) { - assert(mapped_size >= sizeof(uint64_t)); - header.payload_length = EndianU64_BtoN(*(uint64_t *)(mapped_buffer)); - offset += sizeof(uint64_t); - } else { - assert(header.payload_length < 126 && header.payload_length >= 0); - } - - - if (header.masked) { - assert(mapped_size >= sizeof(self->_currentReadMaskOffset) + offset); - memcpy(self->_currentReadMaskKey, ((uint8_t *)mapped_buffer) + offset, sizeof(self->_currentReadMaskKey)); - } - - [self _handleFrameHeader:header curData:self->_currentFrameData]; - } readToCurrentFrame:NO unmaskBytes:NO]; - } - } readToCurrentFrame:NO unmaskBytes:NO]; -} - -- (void)_readFrameNew; -{ - dispatch_async(_workQueue, ^{ - [self->_currentFrameData setLength:0]; - - self->_currentFrameOpcode = 0; - self->_currentFrameCount = 0; - self->_readOpCount = 0; - self->_currentStringScanPosition = 0; - - [self _readFrameContinue]; - }); -} - -- (void)_pumpWriting; -{ - [self assertOnWorkQueue]; - - NSUInteger dataLength = _outputBuffer.length; - if (dataLength - _outputBufferOffset > 0 && _outputStream.hasSpaceAvailable) { - NSUInteger bytesWritten = [_outputStream write:_outputBuffer.bytes + _outputBufferOffset maxLength:dataLength - _outputBufferOffset]; - if (bytesWritten == -1) { - [self _failWithError:[NSError errorWithDomain:@"org.lolrus.SocketRocket" code:2145 userInfo:[NSDictionary dictionaryWithObject:@"Error writing to stream" forKey:NSLocalizedDescriptionKey]]]; - return; - } - - _outputBufferOffset += bytesWritten; - - if (_outputBufferOffset > 4096 && _outputBufferOffset > (_outputBuffer.length >> 1)) { - _outputBuffer = [[NSMutableData alloc] initWithBytes:(char *)_outputBuffer.bytes + _outputBufferOffset length:_outputBuffer.length - _outputBufferOffset]; - _outputBufferOffset = 0; - } - } - - if (_closeWhenFinishedWriting && - _outputBuffer.length - _outputBufferOffset == 0 && - (_inputStream.streamStatus != NSStreamStatusNotOpen && - _inputStream.streamStatus != NSStreamStatusClosed) && - !_sentClose) { - _sentClose = YES; - - @synchronized (self) { - [_outputStream close]; - [_inputStream close]; - - // TODO: Why are we missing the SocketRocket code to call unscheduleFromRunLoop??? - } - - if (!_failed) { - [self _performDelegateBlock:^{ - if ([self.delegate respondsToSelector:@selector(webSocket:didCloseWithCode:reason:wasClean:)]) { - [self.delegate webSocket:self didCloseWithCode:self->_closeCode reason:self->_closeReason wasClean:YES]; - } - }]; - } - [self _scheduleCleanup]; - } -} - -- (void)_addConsumerWithScanner:(stream_scanner)consumer callback:(data_callback)callback; -{ - [self assertOnWorkQueue]; - [self _addConsumerWithScanner:consumer callback:callback dataLength:0]; -} - -- (void)_addConsumerWithDataLength:(size_t)dataLength callback:(data_callback)callback readToCurrentFrame:(BOOL)readToCurrentFrame unmaskBytes:(BOOL)unmaskBytes; -{ - [self assertOnWorkQueue]; - assert(dataLength); - - [_consumers addObject:[_consumerPool consumerWithScanner:nil handler:callback bytesNeeded:dataLength readToCurrentFrame:readToCurrentFrame unmaskBytes:unmaskBytes]]; - [self _pumpScanner]; -} - -- (void)_addConsumerWithScanner:(stream_scanner)consumer callback:(data_callback)callback dataLength:(size_t)dataLength; -{ - [self assertOnWorkQueue]; - [_consumers addObject:[_consumerPool consumerWithScanner:consumer handler:callback bytesNeeded:dataLength readToCurrentFrame:NO unmaskBytes:NO]]; - [self _pumpScanner]; -} - - -- (void)_scheduleCleanup -{ - @synchronized(self) { - if (_cleanupScheduled) { - return; - } - - _cleanupScheduled = YES; - - // Cleanup NSStream delegate's in the same RunLoop used by the streams themselves: - // This way we'll prevent race conditions between handleEvent and SRWebsocket's dealloc - NSTimer *timer = [NSTimer timerWithTimeInterval:(0.0f) target:self selector:@selector(_cleanupSelfReference:) userInfo:nil repeats:NO]; - [[NSRunLoop FSR_networkRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode]; - } -} - -- (void)_cleanupSelfReference:(NSTimer *)timer -{ - @synchronized(self) { - // Nuke NSStream delegate's - _inputStream.delegate = nil; - _outputStream.delegate = nil; - - // Remove the streams, right now, from the networkRunLoop - [_inputStream close]; - [_outputStream close]; - } - - // Cleanup selfRetain in the same GCD queue as usual - dispatch_async(_workQueue, ^{ - self->_selfRetain = nil; - }); -} - - -static const char CRLFCRLFBytes[] = {'\r', '\n', '\r', '\n'}; - -- (void)_readUntilHeaderCompleteWithCallback:(data_callback)dataHandler; -{ - [self _readUntilBytes:CRLFCRLFBytes length:sizeof(CRLFCRLFBytes) callback:dataHandler]; -} - -- (void)_readUntilBytes:(const void *)bytes length:(size_t)length callback:(data_callback)dataHandler; -{ - // TODO optimize so this can continue from where we last searched - stream_scanner consumer = ^size_t(NSData *data) { - __block size_t found_size = 0; - __block size_t match_count = 0; - - size_t size = data.length; - const unsigned char *buffer = data.bytes; - for (int i = 0; i < size; i++ ) { - if (((const unsigned char *)buffer)[i] == ((const unsigned char *)bytes)[match_count]) { - match_count += 1; - if (match_count == length) { - found_size = i + 1; - break; - } - } else { - match_count = 0; - } - } - return found_size; - }; - [self _addConsumerWithScanner:consumer callback:dataHandler]; -} - - -// Returns true if did work -- (BOOL)_innerPumpScanner { - - BOOL didWork = NO; - - if (self.readyState >= SR_CLOSING) { - return didWork; - } - - if (!_consumers.count) { - return didWork; - } - - size_t curSize = _readBuffer.length - _readBufferOffset; - if (!curSize) { - return didWork; - } - - FSRIOConsumer *consumer = [_consumers objectAtIndex:0]; - - size_t bytesNeeded = consumer.bytesNeeded; - - size_t foundSize = 0; - if (consumer.consumer) { - NSData *tempView = [NSData dataWithBytesNoCopy:(char *)_readBuffer.bytes + _readBufferOffset length:_readBuffer.length - _readBufferOffset freeWhenDone:NO]; - foundSize = consumer.consumer(tempView); - } else { - assert(consumer.bytesNeeded); - if (curSize >= bytesNeeded) { - foundSize = bytesNeeded; - } else if (consumer.readToCurrentFrame) { - foundSize = curSize; - } - } - - NSData *slice = nil; - if (consumer.readToCurrentFrame || foundSize) { - NSRange sliceRange = NSMakeRange(_readBufferOffset, foundSize); - slice = [_readBuffer subdataWithRange:sliceRange]; - - _readBufferOffset += foundSize; - - if (_readBufferOffset > 4096 && _readBufferOffset > (_readBuffer.length >> 1)) { - _readBuffer = [[NSMutableData alloc] initWithBytes:(char *)_readBuffer.bytes + _readBufferOffset length:_readBuffer.length - _readBufferOffset]; _readBufferOffset = 0; - } - - if (consumer.unmaskBytes) { - NSMutableData *mutableSlice = [slice mutableCopy]; - - NSUInteger len = mutableSlice.length; - uint8_t *bytes = mutableSlice.mutableBytes; - - for (int i = 0; i < len; i++) { - bytes[i] = bytes[i] ^ _currentReadMaskKey[_currentReadMaskOffset % sizeof(_currentReadMaskKey)]; - _currentReadMaskOffset += 1; - } - - slice = mutableSlice; - } - - if (consumer.readToCurrentFrame) { - [_currentFrameData appendData:slice]; - - _readOpCount += 1; - - if (_currentFrameOpcode == SROpCodeTextFrame) { - // Validate UTF8 stuff. - size_t currentDataSize = _currentFrameData.length; - if (_currentFrameOpcode == SROpCodeTextFrame && currentDataSize > 0) { - // TODO: Optimize the crap out of this. Don't really have to copy all the data each time - - size_t scanSize = currentDataSize - _currentStringScanPosition; - - NSData *scan_data = [_currentFrameData subdataWithRange:NSMakeRange(_currentStringScanPosition, scanSize)]; - int32_t valid_utf8_size = validate_dispatch_data_partial_string(scan_data); - - if (valid_utf8_size == -1) { - [self closeWithCode:SRStatusCodeInvalidUTF8 reason:@"Text frames must be valid UTF-8"]; - dispatch_async(_workQueue, ^{ - [self _disconnect]; - }); - return didWork; - } else { - _currentStringScanPosition += valid_utf8_size; - } - } - - } - - consumer.bytesNeeded -= foundSize; - - if (consumer.bytesNeeded == 0) { - [_consumers removeObjectAtIndex:0]; - consumer.handler(self, nil); - didWork = YES; - } - } else if (foundSize) { - [_consumers removeObjectAtIndex:0]; - consumer.handler(self, slice); - didWork = YES; - } - } - return didWork; -} - --(void)_pumpScanner; -{ - [self assertOnWorkQueue]; - - if (!_isPumping) { - _isPumping = YES; - } else { - return; - } - - while ([self _innerPumpScanner]) { - - } - - _isPumping = NO; -} - -//#define NOMASK - -static const size_t SRFrameHeaderOverhead = 32; - -- (void)_sendFrameWithOpcode:(FSROpCode)opcode data:(id)data; -{ - [self assertOnWorkQueue]; - - if (data == nil) { - return; - } - - NSAssert([data isKindOfClass:[NSData class]] || [data isKindOfClass:[NSString class]], @"Function expects nil, NSString or NSData"); - - size_t payloadLength = [data isKindOfClass:[NSString class]] ? [(NSString *)data lengthOfBytesUsingEncoding:NSUTF8StringEncoding] : [data length]; - - NSMutableData *frame = [[NSMutableData alloc] initWithLength:payloadLength + SRFrameHeaderOverhead]; - if (!frame) { - [self closeWithCode:SRStatusCodeMessageTooBig reason:@"Message too big"]; - return; - } - uint8_t *frame_buffer = (uint8_t *)[frame mutableBytes]; - - // set fin - frame_buffer[0] = SRFinMask | opcode; - - BOOL useMask = YES; -#ifdef NOMASK - useMask = NO; -#endif - - if (useMask) { - // set the mask and header - frame_buffer[1] |= SRMaskMask; - } - - size_t frame_buffer_size = 2; - - const uint8_t *unmasked_payload = NULL; - if ([data isKindOfClass:[NSData class]]) { - unmasked_payload = (uint8_t *)[data bytes]; - } else if ([data isKindOfClass:[NSString class]]) { - unmasked_payload = (const uint8_t *)[data UTF8String]; - } else { - assert(NO); - } - - if (payloadLength < 126) { - frame_buffer[1] |= payloadLength; - } else if (payloadLength <= UINT16_MAX) { - frame_buffer[1] |= 126; - *((uint16_t *)(frame_buffer + frame_buffer_size)) = EndianU16_BtoN((uint16_t)payloadLength); - frame_buffer_size += sizeof(uint16_t); - } else { - frame_buffer[1] |= 127; - *((uint64_t *)(frame_buffer + frame_buffer_size)) = EndianU64_BtoN((uint64_t)payloadLength); - frame_buffer_size += sizeof(uint64_t); - } - - if (!useMask) { - for (int i = 0; i < payloadLength; i++) { - frame_buffer[frame_buffer_size] = unmasked_payload[i]; - frame_buffer_size += 1; - } - } else { - uint8_t *mask_key = frame_buffer + frame_buffer_size; - int result = SecRandomCopyBytes(kSecRandomDefault, sizeof(uint32_t), (uint8_t *)mask_key); - assert(result == 0); - frame_buffer_size += sizeof(uint32_t); - - // TODO: could probably optimize this with SIMD - for (int i = 0; i < payloadLength; i++) { - frame_buffer[frame_buffer_size] = unmasked_payload[i] ^ mask_key[i % sizeof(uint32_t)]; - frame_buffer_size += 1; - } - } - - assert(frame_buffer_size <= [frame length]); - frame.length = frame_buffer_size; - - [self _writeData:frame]; -} - -- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode; -{ - __weak __typeof__(self) weakSelf = self; - - // turn on keep-alive for the output stream. - if (eventCode == NSStreamEventOpenCompleted && aStream == _outputStream) { - CFDataRef socketData = CFWriteStreamCopyProperty((CFWriteStreamRef)_outputStream, kCFStreamPropertySocketNativeHandle); - // In rare cases socketData might be nil (there are crash reports out there), in which case we'll have to just - // live without keep-alive :( - if (socketData != nil) { - CFSocketNativeHandle socket; - CFDataGetBytes(socketData, CFRangeMake(0, sizeof(CFSocketNativeHandle)), (UInt8 *)&socket); - CFRelease(socketData); - - int keepAliveOn = 1; - if (setsockopt(socket, SOL_SOCKET, SO_KEEPALIVE, &keepAliveOn, sizeof(keepAliveOn)) == -1) { - SRFastLog(@"Failed to turn on TCP keepalive for websocket"); - } - } - } - - if (_secure && !_pinnedCertFound && (eventCode == NSStreamEventHasBytesAvailable || eventCode == NSStreamEventHasSpaceAvailable)) { - - NSArray *sslCerts = [_urlRequest FSR_SSLPinnedCertificates]; - if (sslCerts) { - SecTrustRef secTrust = (__bridge SecTrustRef)[aStream propertyForKey:(__bridge id)kCFStreamPropertySSLPeerTrust]; - if (secTrust) { - NSInteger numCerts = SecTrustGetCertificateCount(secTrust); - for (NSInteger i = 0; i < numCerts && !_pinnedCertFound; i++) { - SecCertificateRef cert = SecTrustGetCertificateAtIndex(secTrust, i); - NSData *certData = CFBridgingRelease(SecCertificateCopyData(cert)); - - for (id ref in sslCerts) { - SecCertificateRef trustedCert = (__bridge SecCertificateRef)ref; - NSData *trustedCertData = CFBridgingRelease(SecCertificateCopyData(trustedCert)); - - if ([trustedCertData isEqualToData:certData]) { - _pinnedCertFound = YES; - break; - } - } - } - } - - if (!_pinnedCertFound) { - dispatch_async(_workQueue, ^{ - NSDictionary *userInfo = @{ NSLocalizedDescriptionKey : @"Invalid server cert" }; - [weakSelf _failWithError:[NSError errorWithDomain:@"org.lolrus.SocketRocket" code:23556 userInfo:userInfo]]; - }); - return; - } - } - } - - // SRFastLog(@"%@ Got stream event %d", aStream, eventCode); - dispatch_async(_workQueue, ^{ - [weakSelf safeHandleEvent:eventCode stream:aStream]; - }); -} - -- (void)safeHandleEvent:(NSStreamEvent)eventCode stream:(NSStream *)aStream -{ - switch (eventCode) { - case NSStreamEventOpenCompleted: { - SRFastLog(@"NSStreamEventOpenCompleted %@", aStream); - if (self.readyState >= SR_CLOSING) { - return; - } - - - assert(_readBuffer); - - if (self.readyState == SR_CONNECTING && aStream == _inputStream) { - [self didConnect]; - } - [self _pumpWriting]; - [self _pumpScanner]; - break; - } - - case NSStreamEventErrorOccurred: { - // Note: The upstream code for SocketRocket logs the error message, but this causes - // crashes on iOS 13 (https://github.com/firebase/firebase-ios-sdk/issues/3950) - SRFastLog(@"NSStreamEventErrorOccurred %@", aStream); - /// TODO specify error better! - [self _failWithError:aStream.streamError]; - _readBufferOffset = 0; - [_readBuffer setLength:0]; - break; - - } - - case NSStreamEventEndEncountered: { - [self _pumpScanner]; - SRFastLog(@"NSStreamEventEndEncountered %@", aStream); - if (aStream.streamError) { - [self _failWithError:aStream.streamError]; - } else { - dispatch_async(_workQueue, ^{ - if (self.readyState != SR_CLOSED) { - self.readyState = SR_CLOSED; - [self _scheduleCleanup]; - } - - if (!self->_sentClose && !self->_failed) { - self->_sentClose = YES; - // If we get closed in this state it's probably not clean because we should be sending this when we send messages - [self _performDelegateBlock:^{ - if ([self.delegate respondsToSelector:@selector(webSocket:didCloseWithCode:reason:wasClean:)]) { - [self.delegate webSocket:self didCloseWithCode:0 reason:@"Stream end encountered" wasClean:NO]; - } - }]; - } - }); - } - - break; - } - - case NSStreamEventHasBytesAvailable: { - SRFastLog(@"NSStreamEventHasBytesAvailable %@", aStream); - const NSUInteger bufferSize = 2048; - uint8_t buffer[bufferSize]; - - while (_inputStream.hasBytesAvailable) { - NSInteger bytes_read = [_inputStream read:buffer maxLength:bufferSize]; - - if (bytes_read > 0) { - [_readBuffer appendBytes:buffer length:bytes_read]; - } else if (bytes_read < 0) { - [self _failWithError:_inputStream.streamError]; - } - - if (bytes_read != bufferSize) { - break; - } - }; - [self _pumpScanner]; - break; - } - - case NSStreamEventHasSpaceAvailable: { - SRFastLog(@"NSStreamEventHasSpaceAvailable %@", aStream); - [self _pumpWriting]; - break; - } - - default: - SRFastLog(@"(default) %@", aStream); - break; - } -} - -@end - - -@implementation FSRIOConsumer - -@synthesize bytesNeeded = _bytesNeeded; -@synthesize consumer = _scanner; -@synthesize handler = _handler; -@synthesize readToCurrentFrame = _readToCurrentFrame; -@synthesize unmaskBytes = _unmaskBytes; - -- (void)setupWithScanner:(stream_scanner)scanner handler:(data_callback)handler bytesNeeded:(size_t)bytesNeeded readToCurrentFrame:(BOOL)readToCurrentFrame unmaskBytes:(BOOL)unmaskBytes; -{ - _scanner = [scanner copy]; - _handler = [handler copy]; - _bytesNeeded = bytesNeeded; - _readToCurrentFrame = readToCurrentFrame; - _unmaskBytes = unmaskBytes; - assert(_scanner || _bytesNeeded); -} - -@end - -@implementation FSRIOConsumerPool { - NSUInteger _poolSize; - NSMutableArray *_bufferedConsumers; -} - -- (id)initWithBufferCapacity:(NSUInteger)poolSize; -{ - self = [super init]; - if (self) { - _poolSize = poolSize; - _bufferedConsumers = [[NSMutableArray alloc] initWithCapacity:poolSize]; - } - return self; -} - -- (id)init -{ - return [self initWithBufferCapacity:8]; -} - -- (FSRIOConsumer *)consumerWithScanner:(stream_scanner)scanner handler:(data_callback)handler bytesNeeded:(size_t)bytesNeeded readToCurrentFrame:(BOOL)readToCurrentFrame unmaskBytes:(BOOL)unmaskBytes; -{ - FSRIOConsumer *consumer = nil; - if (_bufferedConsumers.count) { - consumer = [_bufferedConsumers lastObject]; - [_bufferedConsumers removeLastObject]; - } else { - consumer = [[FSRIOConsumer alloc] init]; - } - - [consumer setupWithScanner:scanner handler:handler bytesNeeded:bytesNeeded readToCurrentFrame:readToCurrentFrame unmaskBytes:unmaskBytes]; - - return consumer; -} - -- (void)returnConsumer:(FSRIOConsumer *)consumer; -{ - if (_bufferedConsumers.count < _poolSize) { - [_bufferedConsumers addObject:consumer]; - } -} - -@end - -@implementation NSURLRequest (FCertificateAdditions) - -- (NSArray *)FSR_SSLPinnedCertificates; -{ - return [NSURLProtocol propertyForKey:@"FSR_SSLPinnedCertificates" inRequest:self]; -} - -@end - -@implementation NSMutableURLRequest (FCertificateAdditions) - -- (NSArray *)FSR_SSLPinnedCertificates; -{ - return [NSURLProtocol propertyForKey:@"FSR_SSLPinnedCertificates" inRequest:self]; -} - -- (void)setFSR_SSLPinnedCertificates:(NSArray *)FSR_SSLPinnedCertificates; -{ - [NSURLProtocol setProperty:FSR_SSLPinnedCertificates forKey:@"FSR_SSLPinnedCertificates" inRequest:self]; -} - -@end - -@implementation NSURL (FSRWebSocket) - -- (NSString *)SR_origin; -{ - NSString *scheme = [self.scheme lowercaseString]; - - if ([scheme isEqualToString:@"wss"]) { - scheme = @"https"; - } else if ([scheme isEqualToString:@"ws"]) { - scheme = @"http"; - } - - if (self.port != nil) { - return [NSString stringWithFormat:@"%@://%@:%@/", scheme, self.host, self.port]; - } else { - return [NSString stringWithFormat:@"%@://%@/", scheme, self.host]; - } -} - -@end - -// #define SR_ENABLE_LOG - -static inline void SRFastLog(NSString *format, ...) { -#ifdef SR_ENABLE_LOG - __block va_list arg_list; - va_start (arg_list, format); - - NSString *formattedString = [[NSString alloc] initWithFormat:format arguments:arg_list]; - - va_end(arg_list); - - NSLog(@"[SR] %@", formattedString); -#endif -} - - -#ifdef HAS_ICU - -static inline int32_t validate_dispatch_data_partial_string(NSData *data) { - - const void * contents = [data bytes]; - long size = [data length]; - - const uint8_t *str = (const uint8_t *)contents; - - - UChar32 codepoint = 1; - int32_t offset = 0; - int32_t lastOffset = 0; - while(offset < size && codepoint > 0) { - lastOffset = offset; - U8_NEXT(str, offset, size, codepoint); - } - - if (codepoint == -1) { - // Check to see if the last byte is valid or whether it was just continuing - if (!U8_IS_LEAD(str[lastOffset]) || U8_COUNT_TRAIL_BYTES(str[lastOffset]) + lastOffset < (int32_t)size) { - - size = -1; - } else { - uint8_t leadByte = str[lastOffset]; - U8_MASK_LEAD_BYTE(leadByte, U8_COUNT_TRAIL_BYTES(leadByte)); - - for (int i = lastOffset + 1; i < offset; i++) { - - if (U8_IS_SINGLE(str[i]) || U8_IS_LEAD(str[i]) || !U8_IS_TRAIL(str[i])) { - size = -1; - } - } - - if (size != -1) { - size = lastOffset; - } - } - } - - if (size != -1 && ![[NSString alloc] initWithBytesNoCopy:(char *)[data bytes] length:size encoding:NSUTF8StringEncoding freeWhenDone:NO]) { - size = -1; - } - - return (int32_t)size; -} - -#else - -// This is a hack, and probably not optimal -static inline int32_t validate_dispatch_data_partial_string(NSData *data) { - static const int maxCodepointSize = 3; - - for (int i = 0; i < maxCodepointSize; i++) { - NSString *str = [[NSString alloc] initWithBytesNoCopy:(char *)data.bytes length:data.length - i encoding:NSUTF8StringEncoding freeWhenDone:NO]; - if (str) { - return (int)(data.length - i); - } - } - - return -1; -} - -#endif - -static _FSRRunLoopThread *networkThread = nil; -static NSRunLoop *networkRunLoop = nil; - -@implementation NSRunLoop (FSRWebSocket) - -+ (NSRunLoop *)FSR_networkRunLoop { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - networkThread = [[_FSRRunLoopThread alloc] init]; - networkThread.name = @"com.squareup.SocketRocket.NetworkThread"; - [networkThread start]; - networkRunLoop = networkThread.runLoop; - }); - - return networkRunLoop; -} - -@end - - -@implementation _FSRRunLoopThread { - dispatch_group_t _waitGroup; -} - -@synthesize runLoop = _runLoop; - -- (void)dealloc -{ - sr_dispatch_release(_waitGroup); -} - -- (id)init -{ - self = [super init]; - if (self) { - _waitGroup = dispatch_group_create(); - dispatch_group_enter(_waitGroup); - } - return self; -} - - -/** - * This is the main method of the thread on which the socket events are scheduled in a run loop. - */ -- (void)main; -{ - @autoreleasepool { - _runLoop = [NSRunLoop currentRunLoop]; - dispatch_group_leave(_waitGroup); - - // Add an empty run loop source to prevent runloop from spinning. - CFRunLoopSourceContext sourceCtx = { - .version = 0, - .info = NULL, - .retain = NULL, - .release = NULL, - .copyDescription = NULL, - .equal = NULL, - .hash = NULL, - .schedule = NULL, - .cancel = NULL, - .perform = NULL - }; - CFRunLoopSourceRef source = CFRunLoopSourceCreate(NULL, 0, &sourceCtx); - CFRunLoopAddSource(CFRunLoopGetCurrent(), source, kCFRunLoopDefaultMode); - CFRelease(source); - - while ([_runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]) { - - } - assert(NO); - } -} - -- (NSRunLoop *)runLoop; -{ - dispatch_group_wait(_waitGroup, DISPATCH_TIME_FOREVER); - return _runLoop; -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.h deleted file mode 100644 index bac393b..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// Copyright 2012 Square Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import <Foundation/Foundation.h> - -@interface FSRUtilities : NSObject - -+ (NSString *)base64EncodedStringFromData:(NSData *)data; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.m b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.m deleted file mode 100644 index 2be1d84..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.m +++ /dev/null @@ -1,37 +0,0 @@ -// -// Copyright 2012 Square Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "NSData+SRB64Additions.h" -#import "fbase64.h" - -@implementation FSRUtilities - -+ (NSString *)base64EncodedStringFromData:(NSData *)data { - size_t buffer_size = ((data.length * 3 + 2) / 2); - - char *buffer = (char *)malloc(buffer_size); - - int len = f_b64_ntop(data.bytes, data.length, buffer, buffer_size); - - if (len == -1) { - free(buffer); - return nil; - } else{ - return [[NSString alloc] initWithBytesNoCopy:buffer length:len encoding:NSUTF8StringEncoding freeWhenDone:YES]; - } -} - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/fbase64.c b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/fbase64.c deleted file mode 100644 index 238c23c..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/fbase64.c +++ /dev/null @@ -1,318 +0,0 @@ -/* $OpenBSD: base64.c,v 1.5 2006/10/21 09:55:03 otto Exp $ */ - -/* - * Copyright (c) 1996 by Internet Software Consortium. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS - * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE - * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS - * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. - */ - -/* - * Portions Copyright (c) 1995 by International Business Machines, Inc. - * - * International Business Machines, Inc. (hereinafter called IBM) grants - * permission under its copyrights to use, copy, modify, and distribute this - * Software with or without fee, provided that the above copyright notice and - * all paragraphs of this notice appear in all copies, and that the name of IBM - * not be used in connection with the marketing of any product incorporating - * the Software or modifications thereof, without specific, written prior - * permission. - * - * To the extent it has a right to do so, IBM grants an immunity from suit - * under its patents, if any, for the use, sale or manufacture of products to - * the extent that such products are used for performing Domain Name System - * dynamic updates in TCP/IP networks by means of the Software. No immunity is - * granted for any product per se or for any other function of any product. - * - * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - * PARTICULAR PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, - * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN - * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES. - */ - -/* OPENBSD ORIGINAL: lib/libc/net/base64.c */ - - -// -// Distributed with modifications by Firebase ( https://www.firebase.com ) -// - -#if (!defined(HAVE_B64_NTOP) && !defined(HAVE___B64_NTOP)) || (!defined(HAVE_B64_PTON) && !defined(HAVE___B64_PTON)) - -#include <sys/types.h> -#include <sys/param.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <arpa/inet.h> - -#include <ctype.h> -#include <stdio.h> - -#include <stdlib.h> -#include <string.h> - -#include "fbase64.h" - -static const char Base64[] = -"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -static const char Pad64 = '='; - -/* (From RFC1521 and draft-ietf-dnssec-secext-03.txt) - The following encoding technique is taken from RFC 1521 by Borenstein - and Freed. It is reproduced here in a slightly edited form for - convenience. - - A 65-character subset of US-ASCII is used, enabling 6 bits to be - represented per printable character. (The extra 65th character, "=", - is used to signify a special processing function.) - - The encoding process represents 24-bit groups of input bits as output - strings of 4 encoded characters. Proceeding from left to right, a - 24-bit input group is formed by concatenating 3 8-bit input groups. - These 24 bits are then treated as 4 concatenated 6-bit groups, each - of which is translated into a single digit in the base64 alphabet. - - Each 6-bit group is used as an index into an array of 64 printable - characters. The character referenced by the index is placed in the - output string. - - Table 1: The Base64 Alphabet - - Value Encoding Value Encoding Value Encoding Value Encoding - 0 A 17 R 34 i 51 z - 1 B 18 S 35 j 52 0 - 2 C 19 T 36 k 53 1 - 3 D 20 U 37 l 54 2 - 4 E 21 V 38 m 55 3 - 5 F 22 W 39 n 56 4 - 6 G 23 X 40 o 57 5 - 7 H 24 Y 41 p 58 6 - 8 I 25 Z 42 q 59 7 - 9 J 26 a 43 r 60 8 - 10 K 27 b 44 s 61 9 - 11 L 28 c 45 t 62 + - 12 M 29 d 46 u 63 / - 13 N 30 e 47 v - 14 O 31 f 48 w (pad) = - 15 P 32 g 49 x - 16 Q 33 h 50 y - - Special processing is performed if fewer than 24 bits are available - at the end of the data being encoded. A full encoding quantum is - always completed at the end of a quantity. When fewer than 24 input - bits are available in an input group, zero bits are added (on the - right) to form an integral number of 6-bit groups. Padding at the - end of the data is performed using the '=' character. - - Since all base64 input is an integral number of octets, only the - ------------------------------------------------- - following cases can arise: - - (1) the final quantum of encoding input is an integral - multiple of 24 bits; here, the final unit of encoded - output will be an integral multiple of 4 characters - with no "=" padding, - (2) the final quantum of encoding input is exactly 8 bits; - here, the final unit of encoded output will be two - characters followed by two "=" padding characters, or - (3) the final quantum of encoding input is exactly 16 bits; - here, the final unit of encoded output will be three - characters followed by one "=" padding character. - */ - -#if !defined(HAVE_B64_NTOP) && !defined(HAVE___B64_NTOP) -int -f_b64_ntop(u_char const *src, size_t srclength, char *target, size_t targsize) -{ - size_t datalength = 0; - u_char input[3]; - u_char output[4]; - u_int i; - - while (2 < srclength) { - input[0] = *src++; - input[1] = *src++; - input[2] = *src++; - srclength -= 3; - - output[0] = input[0] >> 2; - output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4); - output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6); - output[3] = input[2] & 0x3f; - - if (datalength + 4 > targsize) - return (-1); - target[datalength++] = Base64[output[0]]; - target[datalength++] = Base64[output[1]]; - target[datalength++] = Base64[output[2]]; - target[datalength++] = Base64[output[3]]; - } - - /* Now we worry about padding. */ - if (0 != srclength) { - /* Get what's left. */ - input[0] = input[1] = input[2] = '\0'; - for (i = 0; i < srclength; i++) - input[i] = *src++; - - output[0] = input[0] >> 2; - output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4); - output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6); - - if (datalength + 4 > targsize) - return (-1); - target[datalength++] = Base64[output[0]]; - target[datalength++] = Base64[output[1]]; - if (srclength == 1) - target[datalength++] = Pad64; - else - target[datalength++] = Base64[output[2]]; - target[datalength++] = Pad64; - } - if (datalength >= targsize) - return (-1); - target[datalength] = '\0'; /* Returned value doesn't count \0. */ - return (int)(datalength); -} -#endif /* !defined(HAVE_B64_NTOP) && !defined(HAVE___B64_NTOP) */ - -#if !defined(HAVE_B64_PTON) && !defined(HAVE___B64_PTON) - -/* skips all whitespace anywhere. - converts characters, four at a time, starting at (or after) - src from base - 64 numbers into three 8 bit bytes in the target area. - it returns the number of data bytes stored at the target, or -1 on error. - */ - -int -f_b64_pton(char const *src, u_char *target, size_t targsize) -{ - u_int tarindex, state; - int ch; - char *pos; - - state = 0; - tarindex = 0; - - while ((ch = *src++) != '\0') { - if (isspace(ch)) /* Skip whitespace anywhere. */ - continue; - - if (ch == Pad64) - break; - - pos = strchr(Base64, ch); - if (pos == 0) /* A non-base64 character. */ - return (-1); - - switch (state) { - case 0: - if (target) { - if (tarindex >= targsize) - return (-1); - target[tarindex] = (pos - Base64) << 2; - } - state = 1; - break; - case 1: - if (target) { - if (tarindex + 1 >= targsize) - return (-1); - target[tarindex] |= (pos - Base64) >> 4; - target[tarindex+1] = ((pos - Base64) & 0x0f) - << 4 ; - } - tarindex++; - state = 2; - break; - case 2: - if (target) { - if (tarindex + 1 >= targsize) - return (-1); - target[tarindex] |= (pos - Base64) >> 2; - target[tarindex+1] = ((pos - Base64) & 0x03) - << 6; - } - tarindex++; - state = 3; - break; - case 3: - if (target) { - if (tarindex >= targsize) - return (-1); - target[tarindex] |= (pos - Base64); - } - tarindex++; - state = 0; - break; - } - } - - /* - * We are done decoding Base-64 chars. Let's see if we ended - * on a byte boundary, and/or with erroneous trailing characters. - */ - - if (ch == Pad64) { /* We got a pad char. */ - ch = *src++; /* Skip it, get next. */ - switch (state) { - case 0: /* Invalid = in first position */ - case 1: /* Invalid = in second position */ - return (-1); - - case 2: /* Valid, means one byte of info */ - /* Skip any number of spaces. */ - for (; ch != '\0'; ch = *src++) - if (!isspace(ch)) - break; - /* Make sure there is another trailing = sign. */ - if (ch != Pad64) - return (-1); - ch = *src++; /* Skip the = */ - /* Fall through to "single trailing =" case. */ - /* FALLTHROUGH */ - - case 3: /* Valid, means two bytes of info */ - /* - * We know this char is an =. Is there anything but - * whitespace after it? - */ - for (; ch != '\0'; ch = *src++) - if (!isspace(ch)) - return (-1); - - /* - * Now make sure for cases 2 and 3 that the "extra" - * bits that slopped past the last full byte were - * zeros. If we don't check them, they become a - * subliminal channel. - */ - if (target && target[tarindex] != 0) - return (-1); - } - } else { - /* - * We ended by seeing the end of the string. Make sure we - * have no partial bytes lying around. - */ - if (state != 0) - return (-1); - } - - return (tarindex); -} - -#endif /* !defined(HAVE_B64_PTON) && !defined(HAVE___B64_PTON) */ -#endif diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/fbase64.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/fbase64.h deleted file mode 100644 index a9bf142..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/SocketRocket/fbase64.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2012 Square Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#ifndef FSocketRocket_base64_h -#define FSocketRocket_base64_h - -#include <sys/types.h> - -extern int -f_b64_ntop(u_char const *src, - size_t srclength, - char *target, - size_t targsize); - -extern int -f_b64_pton(char const *src, - u_char *target, - size_t targsize); - - -#endif diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/Wrap-leveldb/APLevelDB.h b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/Wrap-leveldb/APLevelDB.h deleted file mode 100644 index c0baa22..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/Wrap-leveldb/APLevelDB.h +++ /dev/null @@ -1,105 +0,0 @@ -// -// APLevelDB.h -// -// Created by Adam Preble on 1/23/12. -// Copyright (c) 2012 Adam Preble. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import <Foundation/Foundation.h> - -extern NSString * const APLevelDBErrorDomain; - -@class APLevelDBIterator; -@protocol APLevelDBWriteBatch; - -@interface APLevelDB : NSObject - -@property (nonatomic, readonly, strong) NSString *path; - -+ (APLevelDB *)levelDBWithPath:(NSString *)path error:(NSError *__autoreleasing*)errorOut; -- (void)close; - -- (BOOL)setData:(NSData *)data forKey:(NSString *)key; -- (BOOL)setString:(NSString *)str forKey:(NSString *)key; - -- (NSData *)dataForKey:(NSString *)key; -- (NSString *)stringForKey:(NSString *)key; - -- (BOOL)removeKey:(NSString *)key; - -- (NSArray *)allKeys; - -- (void)enumerateKeys:(void (^)(NSString *key, BOOL *stop))block; -- (void)enumerateKeysWithPrefix:(NSString *)prefix usingBlock:(void (^)(NSString *key, BOOL *stop))block; - -- (void)enumerateKeysAndValuesAsStrings:(void (^)(NSString *key, NSString *value, BOOL *stop))block; -- (void)enumerateKeysWithPrefix:(NSString *)prefix asStrings:(void (^)(NSString *key, NSString *value, BOOL *stop))block; - -- (void)enumerateKeysAndValuesAsData:(void (^)(NSString *key, NSData *value, BOOL *stop))block; -- (void)enumerateKeysWithPrefix:(NSString *)prefix asData:(void (^)(NSString *key, NSData *value, BOOL *stop))block; - -- (NSUInteger)approximateSizeFrom:(NSString *)from to:(NSString *)to; -- (NSUInteger)exactSizeFrom:(NSString *)from to:(NSString *)to; - -// Objective-C Subscripting Support: -// The database object supports subscripting for string-string and string-data key-value access and assignment. -// Examples: -// db[@"key"] = @"value"; -// db[@"key"] = [NSData data]; -// NSString *s = db[@"key"]; -// An NSInvalidArgumentException is raised if the key is not an NSString, or if the assigned object is not an -// instance of NSString or NSData. -- (id)objectForKeyedSubscript:(id)key; -- (void)setObject:(id)object forKeyedSubscript:(id<NSCopying>)key; - -// Batch write/atomic update support: -- (id<APLevelDBWriteBatch>)beginWriteBatch; - -@end - - -@interface APLevelDBIterator : NSObject - -+ (id)iteratorWithLevelDB:(APLevelDB *)db; - -// Designated initializer: -- (id)initWithLevelDB:(APLevelDB *)db; - -- (BOOL)seekToKey:(NSString *)key; -- (NSString *)nextKey; -- (NSString *)key; -- (NSString *)valueAsString; -- (NSData *)valueAsData; - -@end - - -@protocol APLevelDBWriteBatch <NSObject> - -- (void)setData:(NSData *)data forKey:(NSString *)key; -- (void)setString:(NSString *)str forKey:(NSString *)key; - -- (void)removeKey:(NSString *)key; - -// Remove all of the buffered sets and removes: -- (void)clear; -- (BOOL)commit; - -@end diff --git a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/Wrap-leveldb/APLevelDB.mm b/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/Wrap-leveldb/APLevelDB.mm deleted file mode 100644 index cdecce6..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/Firebase/Database/third_party/Wrap-leveldb/APLevelDB.mm +++ /dev/null @@ -1,500 +0,0 @@ -// -// APLevelDB.m -// -// Created by Adam Preble on 1/23/12. -// Copyright (c) 2012 Adam Preble. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -// -// Portions of APLevelDB are based on LevelDB-ObjC: -// https://github.com/hoisie/LevelDB-ObjC -// Specifically the SliceFromString/StringFromSlice macros, and the structure of -// the enumeration methods. License for those potions follows: -// -// Copyright (c) 2011 Pave Labs -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#import "APLevelDB.h" - -#import "leveldb/db.h" -#import "leveldb/options.h" -#import "leveldb/write_batch.h" - -NSString * const APLevelDBErrorDomain = @"APLevelDBErrorDomain"; - -#define SliceFromString(_string_) (leveldb::Slice((char *)[_string_ UTF8String], [_string_ lengthOfBytesUsingEncoding:NSUTF8StringEncoding])) -#define StringFromSlice(_slice_) ([[NSString alloc] initWithBytes:_slice_.data() length:_slice_.size() encoding:NSUTF8StringEncoding]) - - -@interface APLevelDBWriteBatch : NSObject <APLevelDBWriteBatch> { - @package - leveldb::WriteBatch _batch; -} - -@property (nonatomic, strong) APLevelDB *levelDB; - -- (id)initWithLevelDB:(APLevelDB *)levelDB; -@end - - -#pragma mark - APLevelDB - -@interface APLevelDB () { - leveldb::DB *_db; - leveldb::ReadOptions _readOptions; - leveldb::WriteOptions _writeOptions; -} -- (id)initWithPath:(NSString *)path error:(NSError **)errorOut; -+ (leveldb::Options)defaultCreateOptions; -@property (nonatomic, readonly) leveldb::DB *db; -@end - - -@implementation APLevelDB - -@synthesize path = _path; -@synthesize db = _db; - -+ (APLevelDB *)levelDBWithPath:(NSString *)path error:(NSError *__autoreleasing *)errorOut -{ - return [[APLevelDB alloc] initWithPath:path error:errorOut]; -} - -- (id)initWithPath:(NSString *)path error:(NSError *__autoreleasing *)errorOut -{ - if ((self = [super init])) - { - _path = path; - - leveldb::Options options = [[self class] defaultCreateOptions]; - - leveldb::Status status = leveldb::DB::Open(options, [_path UTF8String], &_db); - - if (!status.ok()) - { - if (errorOut) - { - NSString *statusString = [[NSString alloc] initWithCString:status.ToString().c_str() encoding:NSUTF8StringEncoding]; - *errorOut = [NSError errorWithDomain:APLevelDBErrorDomain - code:0 - userInfo:[NSDictionary dictionaryWithObjectsAndKeys:statusString, NSLocalizedDescriptionKey, nil]]; - } - return nil; - } - - _writeOptions.sync = false; - } - return self; -} - -- (void)close { - if (_db != NULL) { - delete _db; - _db = NULL; - } -} - -- (void)dealloc -{ - if (_db != NULL) { - delete _db; - _db = NULL; - } -} - -+ (leveldb::Options)defaultCreateOptions -{ - leveldb::Options options; - options.create_if_missing = true; - return options; -} - -- (BOOL)setData:(NSData *)data forKey:(NSString *)key -{ - leveldb::Slice keySlice = SliceFromString(key); - leveldb::Slice valueSlice = leveldb::Slice((const char *)[data bytes], (size_t)[data length]); - leveldb::Status status = _db->Put(_writeOptions, keySlice, valueSlice); - return (status.ok() == true); -} - -- (BOOL)setString:(NSString *)str forKey:(NSString *)key -{ - // This could have been based on - leveldb::Slice keySlice = SliceFromString(key); - leveldb::Slice valueSlice = SliceFromString(str); - leveldb::Status status = _db->Put(_writeOptions, keySlice, valueSlice); - return (status.ok() == true); -} - -- (NSData *)dataForKey:(NSString *)key -{ - leveldb::Slice keySlice = SliceFromString(key); - std::string valueCPPString; - leveldb::Status status = _db->Get(_readOptions, keySlice, &valueCPPString); - - if (!status.ok()) - return nil; - else - return [NSData dataWithBytes:valueCPPString.data() length:valueCPPString.size()]; -} - -- (NSString *)stringForKey:(NSString *)key -{ - leveldb::Slice keySlice = SliceFromString(key); - std::string valueCPPString; - leveldb::Status status = _db->Get(_readOptions, keySlice, &valueCPPString); - - // We assume (dangerously?) UTF-8 string encoding: - if (!status.ok()) - return nil; - else - return [[NSString alloc] initWithBytes:valueCPPString.data() length:valueCPPString.size() encoding:NSUTF8StringEncoding]; -} - -- (BOOL)removeKey:(NSString *)key -{ - leveldb::Slice keySlice = SliceFromString(key); - leveldb::Status status = _db->Delete(_writeOptions, keySlice); - return (status.ok() == true); -} - -- (NSArray *)allKeys -{ - NSMutableArray *keys = [NSMutableArray array]; - [self enumerateKeys:^(NSString *key, BOOL *stop) { - [keys addObject:key]; - }]; - return keys; -} - -- (void)enumerateKeysAndValuesAsStrings:(void (^)(NSString *key, NSString *value, BOOL *stop))block -{ - [self enumerateKeysWithPrefix:@"" asStrings:block]; -} - -- (void)enumerateKeysWithPrefix:(NSString *)prefixString asStrings:(void (^)(NSString *, NSString *, BOOL *))block -{ - @autoreleasepool { - BOOL stop = NO; - leveldb::Iterator* iter = _db->NewIterator(leveldb::ReadOptions()); - leveldb::Slice prefix = SliceFromString(prefixString); - for (iter->Seek(prefix); iter->Valid(); iter->Next()) { - leveldb::Slice key = iter->key(), value = iter->value(); - if (key.starts_with(prefix)) { - NSString *k = StringFromSlice(key); - NSString *v = [[NSString alloc] initWithBytes:value.data() length:value.size() encoding:NSUTF8StringEncoding]; - block(k, v, &stop); - if (stop) - break; - } else { - break; - } - } - - delete iter; - } -} - -- (void)enumerateKeys:(void (^)(NSString *key, BOOL *stop))block -{ - [self enumerateKeysWithPrefix:@"" usingBlock:block]; -} - -- (void)enumerateKeysWithPrefix:(NSString *)prefixString usingBlock:(void (^)(NSString *key, BOOL *stop))block; -{ - @autoreleasepool { - BOOL stop = NO; - leveldb::Slice prefix = SliceFromString(prefixString); - leveldb::Iterator* iter = _db->NewIterator(leveldb::ReadOptions()); - for (iter->Seek(prefix); iter->Valid(); iter->Next()) { - leveldb::Slice key = iter->key(); - if (key.starts_with(prefix)) { - NSString *k = StringFromSlice(key); - block(k, &stop); - if (stop) - break; - } else { - break; - } - } - - delete iter; - } -} - -- (void)enumerateKeysAndValuesAsData:(void (^)(NSString *key, NSData *data, BOOL *stop))block -{ - [self enumerateKeysWithPrefix:@"" asData:block]; -} - -- (void)enumerateKeysWithPrefix:(NSString *)prefixString asData:(void (^)(NSString *, NSData *, BOOL *))block -{ - @autoreleasepool { - BOOL stop = NO; - leveldb::Iterator* iter = _db->NewIterator(leveldb::ReadOptions()); - leveldb::Slice prefix = SliceFromString(prefixString); - for (iter->Seek(prefix); iter->Valid(); iter->Next()) { - leveldb::Slice key = iter->key(), value = iter->value(); - if (key.starts_with(prefix)) { - NSString *k = StringFromSlice(key); - NSData *data = [NSData dataWithBytes:value.data() length:value.size()]; - block(k, data, &stop); - if (stop) - break; - } else { - break; - } - } - - delete iter; - } -} - -- (NSUInteger)exactSizeFrom:(NSString *)from to:(NSString *)to { - NSUInteger size = 0; - leveldb::Iterator* iter = _db->NewIterator(leveldb::ReadOptions()); - leveldb::Slice fromSlice = SliceFromString(from); - leveldb::Slice toSlice = SliceFromString(to); - iter->Seek(fromSlice); - while (iter->Valid() && iter->key().compare(toSlice) <= 0) { - size += iter->value().size(); - iter->Next(); - } - delete iter; - return size; -} - - -- (NSUInteger)approximateSizeFrom:(NSString *)from to:(NSString *)to { - leveldb::Range ranges[1]; - leveldb::Slice fromSlice = SliceFromString(from); - leveldb::Slice toSlice = SliceFromString(to); - ranges[0] = leveldb::Range(fromSlice, toSlice); - uint64_t sizes[1]; - _db->GetApproximateSizes(ranges, 1, sizes); - return (NSUInteger)sizes[0]; -} - -#pragma mark - Subscripting Support - -- (id)objectForKeyedSubscript:(id)key -{ - if (![key respondsToSelector: @selector(componentsSeparatedByString:)]) - { - [NSException raise:NSInvalidArgumentException format:@"key must be an NSString"]; - } - return [self stringForKey:key]; -} -- (void)setObject:(id)thing forKeyedSubscript:(id<NSCopying>)key -{ - id idKey = (id) key; - if (![idKey respondsToSelector: @selector(componentsSeparatedByString:)]) - { - [NSException raise:NSInvalidArgumentException format:@"key must be NSString or NSData"]; - } - - if ([thing respondsToSelector:@selector(componentsSeparatedByString:)]) - [self setString:thing forKey:(NSString *)key]; - else if ([thing respondsToSelector:@selector(subdataWithRange:)]) - [self setData:thing forKey:(NSString *)key]; - else - [NSException raise:NSInvalidArgumentException format:@"object must be NSString or NSData"]; -} - -#pragma mark - Atomic Updates - -- (id<APLevelDBWriteBatch>)beginWriteBatch -{ - APLevelDBWriteBatch *batch = [[APLevelDBWriteBatch alloc] initWithLevelDB:self]; - return batch; -} - -- (BOOL)commitWriteBatch:(id<APLevelDBWriteBatch>)theBatch -{ - if (!theBatch) - return NO; - - APLevelDBWriteBatch *batch = theBatch; - - leveldb::Status status; - status = _db->Write(_writeOptions, &batch->_batch); - return (status.ok() == true); -} - -@end - - -#pragma mark - APLevelDBIterator - -@interface APLevelDBIterator () { - leveldb::Iterator *_iter; -} - -@property (nonatomic, strong) APLevelDB *levelDB; -@end - - - -@implementation APLevelDBIterator - -+ (id)iteratorWithLevelDB:(APLevelDB *)db -{ - APLevelDBIterator *iter = [[[self class] alloc] initWithLevelDB:db]; - return iter; -} - -- (id)initWithLevelDB:(APLevelDB *)db -{ - if ((self = [super init])) - { - // Hold on to the database so it doesn't get deallocated before the iterator is deallocated - self->_levelDB = db; - _iter = db.db->NewIterator(leveldb::ReadOptions()); - _iter->SeekToFirst(); - if (!_iter->Valid()) - return nil; - } - return self; -} - -- (id)init -{ - [NSException raise:@"BadInitializer" format:@"Use the designated initializer, -initWithLevelDB:, instead."]; - return nil; -} - -- (void)dealloc -{ - self->_levelDB = nil; - delete _iter; - _iter = NULL; -} - -- (BOOL)seekToKey:(NSString *)key -{ - leveldb::Slice target = SliceFromString(key); - _iter->Seek(target); - return _iter->Valid() == true; -} - -- (void)seekToFirst -{ - _iter->SeekToFirst(); -} - -- (void)seekToLast -{ - _iter->SeekToLast(); -} - -- (NSString *)nextKey -{ - _iter->Next(); - return [self key]; -} - -- (NSString *)key -{ - if (_iter->Valid() == false) - return nil; - leveldb::Slice value = _iter->key(); - return StringFromSlice(value); -} - -- (NSString *)valueAsString -{ - if (_iter->Valid() == false) - return nil; - leveldb::Slice value = _iter->value(); - return StringFromSlice(value); -} - -- (NSData *)valueAsData -{ - if (_iter->Valid() == false) - return nil; - leveldb::Slice value = _iter->value(); - return [NSData dataWithBytes:value.data() length:value.size()]; -} - -@end - - - -#pragma mark - APLevelDBWriteBatch - -@implementation APLevelDBWriteBatch - -- (id)initWithLevelDB:(APLevelDB *)levelDB { - self = [super init]; - if (self != nil) { - self->_levelDB = levelDB; - } - return self; -} - -- (void)setData:(NSData *)data forKey:(NSString *)key -{ - leveldb::Slice keySlice = SliceFromString(key); - leveldb::Slice valueSlice = leveldb::Slice((const char *)[data bytes], (size_t)[data length]); - _batch.Put(keySlice, valueSlice); -} -- (void)setString:(NSString *)str forKey:(NSString *)key -{ - leveldb::Slice keySlice = SliceFromString(key); - leveldb::Slice valueSlice = SliceFromString(str); - _batch.Put(keySlice, valueSlice); -} - -- (void)removeKey:(NSString *)key -{ - leveldb::Slice keySlice = SliceFromString(key); - _batch.Delete(keySlice); -} - -- (void)clear -{ - _batch.Clear(); -} - -- (BOOL)commit { - return [self.levelDB commitWriteBatch:self]; -} - -@end - diff --git a/assign5/openTok/Pods/FirebaseDatabase/LICENSE b/assign5/openTok/Pods/FirebaseDatabase/LICENSE deleted file mode 100644 index d645695..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/assign5/openTok/Pods/FirebaseDatabase/README.md b/assign5/openTok/Pods/FirebaseDatabase/README.md deleted file mode 100644 index b04a270..0000000 --- a/assign5/openTok/Pods/FirebaseDatabase/README.md +++ /dev/null @@ -1,282 +0,0 @@ -# Firebase iOS Open Source Development - [![Actions Status][gh-auth-badge]][gh-actions] - [![Actions Status][gh-core-badge]][gh-actions] - [![Actions Status][gh-datatransport-badge]][gh-actions] - [![Actions Status][gh-dynamiclinks-badge]][gh-actions] - [![Actions Status][gh-firebasepod-badge]][gh-actions] - [![Actions Status][gh-firestore-badge]][gh-actions] - [![Actions Status][gh-interop-badge]][gh-actions] - [![Actions Status][gh-messaging-badge]][gh-actions] - [![Actions Status][gh-storage-badge]][gh-actions] - [![Actions Status][gh-symbolcollision-badge]][gh-actions] - [![Actions Status][gh-zip-badge]][gh-actions] - [](https://travis-ci.org/firebase/firebase-ios-sdk) - -This repository contains all Firebase iOS SDK source except FirebaseAnalytics, -FirebasePerformance, and FirebaseML. - -The repository also includes GoogleUtilities source. The -[GoogleUtilities](GoogleUtilities/README.md) pod is -a set of utilities used by Firebase and other Google products. - -Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -## Installation - -See the three subsections for details about three different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) - -### Standard pod install - -Go to -[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). - -### Installing from GitHub - -For releases starting with 5.0.0, the source for each release is also deployed -to CocoaPods master and available via standard -[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). - -These instructions can be used to access the Firebase repo at other branches, -tags, or commits. - -#### Background - -See -[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) -for instructions and options about overriding pod source locations. - -#### Accessing Firebase Source Snapshots - -All of the official releases are tagged in this repo and available via CocoaPods. To access a local -source snapshot or unreleased branch, use Podfile directives like the following: - -To access FirebaseFirestore via a branch: -``` -pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -``` - -To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: - -``` -pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' -pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' -``` - -### Carthage (iOS only) - -Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). - -### Rome - -Instructions for installing binary frameworks via -[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). - -### Using Firebase from a Framework or a library - -[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md) - -## Development - -To develop Firebase software in this repository, ensure that you have at least -the following software: - - * Xcode 10.1 (or later) - * CocoaPods 1.7.2 (or later) - * [CocoaPods generate](https://github.com/square/cocoapods-generate) - -For the pod that you want to develop: - -`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios` - -Note: If the CocoaPods cache is out of date, you may need to run -`pod repo update` before the `pod gen` command. - -Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for -those platforms. Since 10.2, Xcode does not properly handle multi-platform -CocoaPods workspaces. - -Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). - -### Development for Catalyst -* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` -* Check the Mac box in the App-iOS Build Settings -* Sign the App in the Settings Signing & Capabilities tab -* Click Pods in the Project Manager -* Add Signing to the iOS host app and unit test targets -* Select the Unit-unit scheme -* Run it to build and test - -### Adding a New Firebase Pod - -See [AddNewPod.md](AddNewPod.md). - -### Code Formatting - -To ensure that the code is formatted consistently, run the script -[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) -before creating a PR. - -Travis will verify that any code changes are done in a style compliant way. Install -`clang-format` and `swiftformat`. -These commands will get the right versions: - -``` -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c6f1cbd/Formula/clang-format.rb -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c13eda8/Formula/swiftformat.rb -``` - -Note: if you already have a newer version of these installed you may need to -`brew switch` to this version. - -To update this section, find the versions of clang-format and swiftformat.rb to -match the versions in the CI failure logs -[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). - -### Running Unit Tests - -Select a scheme and press Command-u to build a component and run its unit tests. - -#### Viewing Code Coverage (Deprecated) - -First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. - -After running the `AllUnitTests_iOS` scheme in Xcode, execute -`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` -at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. - -### Running Sample Apps -In order to run the sample apps and integration tests, you'll need valid -`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist -files without real values, but can be replaced with real plist files. To get your own -`GoogleService-Info.plist` files: - -1. Go to the [Firebase Console](https://console.firebase.google.com/) -2. Create a new Firebase project, if you don't already have one -3. For each sample app you want to test, create a new Firebase app with the sample app's bundle -identifier (e.g. `com.google.Database-Example`) -4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file -(e.g. in [Example/Database/App/](Example/Database/App/)); - -Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require -special Apple capabilities, and you will have to change the sample app to use a unique bundle -identifier that you can control in your own Apple Developer account. - -## Specific Component Instructions -See the sections below for any special instructions for those components. - -### Firebase Auth - -If you're doing specific Firebase Auth development, see -[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about -building and running the FirebaseAuth pod along with various samples and tests. - -### Firebase Database - -To run the Database Integration tests, make your database authentication rules -[public](https://firebase.google.com/docs/database/security/quickstart). - -### Firebase Storage - -To run the Storage Integration tests, follow the instructions in -[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m). - -#### Push Notifications - -Push notifications can only be delivered to specially provisioned App IDs in the developer portal. -In order to actually test receiving push notifications, you will need to: - -1. Change the bundle identifier of the sample app to something you own in your Apple Developer -account, and enable that App ID for push notifications. -2. You'll also need to -[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) -at **Project Settings > Cloud Messaging > [Your Firebase App]**. -3. Ensure your iOS device is added to your Apple Developer portal as a test device. - -#### iOS Simulator - -The iOS Simulator cannot register for remote notifications, and will not receive push notifications. -In order to receive push notifications, you'll have to follow the steps above and run the app on a -physical device. - -## Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -### tvOS, macOS, watchOS and Catalyst -Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on -tvOS, macOS, watchOS and Catalyst. - -For tvOS, checkout the [Sample](Example/tvOSSample). -For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the -[Independent Watch App Sample](Example/watchOSSample). - -Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this -repository is actively developed primarily for iOS. While we can catch basic unit test issues with -Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you -encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). - -During app setup in the console, you may get to a step that mentions something like "Checking if the app -has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst. -**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected. - -To install, add a subset of the following to the Podfile: - -``` -pod 'Firebase/ABTesting' # No watchOS support yet -pod 'Firebase/Auth' # No watchOS support yet -pod 'Firebase/Crashlytics' # No watchOS support yet -pod 'Firebase/Database' # No watchOS support yet -pod 'Firebase/Firestore' # No watchOS support yet -pod 'Firebase/Functions' # No watchOS support yet -pod 'Firebase/Messaging' -pod 'Firebase/RemoteConfig' # No watchOS support yet -pod 'Firebase/Storage' -``` - -#### Additional Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - -## Roadmap - -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source -plans and directions. - -## Contributing - -See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. - -## License - -The contents of this repository is licensed under the -[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). - -Your use of Firebase is governed by the -[Terms of Service for Firebase Services](https://firebase.google.com/terms/). - -[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions -[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg -[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg -[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg -[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg -[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg -[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg -[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg -[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg -[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg -[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg -[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m deleted file mode 100644 index 3e5f57b..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Public/GDTCORAssert.h" - -GDTCORAssertionBlock GDTCORAssertionBlockToRunInstead(void) { - // This class is only compiled in by unit tests, and this should fail quickly in optimized builds. - Class GDTCORAssertClass = NSClassFromString(@"GDTCORAssertHelper"); - if (__builtin_expect(!!GDTCORAssertClass, 0)) { - SEL assertionBlockSEL = NSSelectorFromString(@"assertionBlock"); - if (assertionBlockSEL) { - IMP assertionBlockIMP = [GDTCORAssertClass methodForSelector:assertionBlockSEL]; - if (assertionBlockIMP) { - GDTCORAssertionBlock assertionBlock = ((GDTCORAssertionBlock(*)(id, SEL))assertionBlockIMP)( - GDTCORAssertClass, assertionBlockSEL); - if (assertionBlock) { - return assertionBlock; - } - } - } - } - return NULL; -} diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORClock.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORClock.m deleted file mode 100644 index f0ea8ab..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORClock.m +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Public/GDTCORClock.h" - -#import <sys/sysctl.h> - -// Using a monotonic clock is necessary because CFAbsoluteTimeGetCurrent(), NSDate, and related all -// are subject to drift. That it to say, multiple consecutive calls do not always result in a -// time that is in the future. Clocks may be adjusted by the user, NTP, or any number of external -// factors. This class attempts to determine the wall-clock time at the time of the event by -// capturing the kernel start and time since boot to determine a wallclock time in UTC. -// -// Timezone offsets at the time of a snapshot are also captured in order to provide local-time -// details. Other classes in this library depend on comparing times at some time in the future to -// a time captured in the past, and this class needs to provide a mechanism to do that. -// -// TL;DR: This class attempts to accomplish two things: 1. Provide accurate event times. 2. Provide -// a monotonic clock mechanism to accurately check if some clock snapshot was before or after -// by using a shared reference point (kernel boot time). -// -// Note: Much of the mach time stuff doesn't work properly in the simulator. So this class can be -// difficult to unit test. - -/** Returns the kernel boottime property from sysctl. - * - * Inspired by https://stackoverflow.com/a/40497811 - * - * @return The KERN_BOOTTIME property from sysctl, in nanoseconds. - */ -static int64_t KernelBootTimeInNanoseconds() { - // Caching the result is not possible because clock drift would not be accounted for. - struct timeval boottime; - int mib[2] = {CTL_KERN, KERN_BOOTTIME}; - size_t size = sizeof(boottime); - int rc = sysctl(mib, 2, &boottime, &size, NULL, 0); - if (rc != 0) { - return 0; - } - return (int64_t)boottime.tv_sec * NSEC_PER_MSEC + (int64_t)boottime.tv_usec; -} - -/** Returns value of gettimeofday, in nanoseconds. - * - * Inspired by https://stackoverflow.com/a/40497811 - * - * @return The value of gettimeofday, in nanoseconds. - */ -static int64_t UptimeInNanoseconds() { - int64_t before_now; - int64_t after_now; - struct timeval now; - - before_now = KernelBootTimeInNanoseconds(); - // Addresses a race condition in which the system time has updated, but the boottime has not. - do { - gettimeofday(&now, NULL); - after_now = KernelBootTimeInNanoseconds(); - } while (after_now != before_now); - return (int64_t)now.tv_sec * NSEC_PER_MSEC + (int64_t)now.tv_usec - before_now; -} - -// TODO: Consider adding a 'trustedTime' property that can be populated by the response from a BE. -@implementation GDTCORClock - -- (instancetype)init { - self = [super init]; - if (self) { - _kernelBootTime = KernelBootTimeInNanoseconds(); - _uptime = UptimeInNanoseconds(); - _timeMillis = - (int64_t)((CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970) * NSEC_PER_USEC); - CFTimeZoneRef timeZoneRef = CFTimeZoneCopySystem(); - _timezoneOffsetSeconds = CFTimeZoneGetSecondsFromGMT(timeZoneRef, 0); - CFRelease(timeZoneRef); - } - return self; -} - -+ (GDTCORClock *)snapshot { - return [[GDTCORClock alloc] init]; -} - -+ (instancetype)clockSnapshotInTheFuture:(uint64_t)millisInTheFuture { - GDTCORClock *snapshot = [self snapshot]; - snapshot->_timeMillis += millisInTheFuture; - return snapshot; -} - -- (BOOL)isAfter:(GDTCORClock *)otherClock { - // These clocks are trivially comparable when they share a kernel boot time. - if (_kernelBootTime == otherClock->_kernelBootTime) { - int64_t timeDiff = (_timeMillis + _timezoneOffsetSeconds) - - (otherClock->_timeMillis + otherClock->_timezoneOffsetSeconds); - return timeDiff > 0; - } else { - int64_t kernelBootTimeDiff = otherClock->_kernelBootTime - _kernelBootTime; - // This isn't a great solution, but essentially, if the other clock's boot time is 'later', NO - // is returned. This can be altered by changing the system time and rebooting. - return kernelBootTimeDiff < 0 ? YES : NO; - } -} - -- (NSUInteger)hash { - return [@(_kernelBootTime) hash] ^ [@(_uptime) hash] ^ [@(_timeMillis) hash] ^ - [@(_timezoneOffsetSeconds) hash]; -} - -- (BOOL)isEqual:(id)object { - return [self hash] == [object hash]; -} - -#pragma mark - NSSecureCoding - -/** NSKeyedCoder key for timeMillis property. */ -static NSString *const kGDTCORClockTimeMillisKey = @"GDTCORClockTimeMillis"; - -/** NSKeyedCoder key for timezoneOffsetMillis property. */ -static NSString *const kGDTCORClockTimezoneOffsetSeconds = @"GDTCORClockTimezoneOffsetSeconds"; - -/** NSKeyedCoder key for _kernelBootTime ivar. */ -static NSString *const kGDTCORClockKernelBootTime = @"GDTCORClockKernelBootTime"; - -/** NSKeyedCoder key for _uptime ivar. */ -static NSString *const kGDTCORClockUptime = @"GDTCORClockUptime"; - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - self = [super init]; - if (self) { - // TODO: If the kernelBootTime is more recent, we need to change the kernel boot time and - // uptimeMillis ivars - _timeMillis = [aDecoder decodeInt64ForKey:kGDTCORClockTimeMillisKey]; - _timezoneOffsetSeconds = [aDecoder decodeInt64ForKey:kGDTCORClockTimezoneOffsetSeconds]; - _kernelBootTime = [aDecoder decodeInt64ForKey:kGDTCORClockKernelBootTime]; - _uptime = [aDecoder decodeInt64ForKey:kGDTCORClockUptime]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - [aCoder encodeInt64:_timeMillis forKey:kGDTCORClockTimeMillisKey]; - [aCoder encodeInt64:_timezoneOffsetSeconds forKey:kGDTCORClockTimezoneOffsetSeconds]; - [aCoder encodeInt64:_kernelBootTime forKey:kGDTCORClockKernelBootTime]; - [aCoder encodeInt64:_uptime forKey:kGDTCORClockUptime]; -} - -@end diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m deleted file mode 100644 index 0f5170d..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Public/GDTCORConsoleLogger.h" - -volatile NSInteger GDTCORConsoleLoggerLoggingLevel = GDTCORLoggingLevelErrors; - -/** The console logger prefix. */ -static NSString *kGDTCORConsoleLogger = @"[GoogleDataTransport]"; - -NSString *GDTCORMessageCodeEnumToString(GDTCORMessageCode code) { - return [[NSString alloc] initWithFormat:@"I-GDTCOR%06ld", (long)code]; -} - -void GDTCORLog(GDTCORMessageCode code, GDTCORLoggingLevel logLevel, NSString *format, ...) { -// Don't log anything in not debug builds. -#if !NDEBUG - if (logLevel >= GDTCORConsoleLoggerLoggingLevel) { - NSString *logFormat = [NSString stringWithFormat:@"%@[%@] %@", kGDTCORConsoleLogger, - GDTCORMessageCodeEnumToString(code), format]; - va_list args; - va_start(args, format); - NSLogv(logFormat, args); - va_end(args); - } -#endif // !NDEBUG -} - -void GDTCORLogAssert( - BOOL wasFatal, NSString *_Nonnull file, NSInteger line, NSString *_Nullable format, ...) { -// Don't log anything in not debug builds. -#if !NDEBUG - GDTCORMessageCode code = wasFatal ? GDTCORMCEFatalAssertion : GDTCORMCEGeneralError; - NSString *logFormat = - [NSString stringWithFormat:@"%@[%@] (%@:%ld) : %@", kGDTCORConsoleLogger, - GDTCORMessageCodeEnumToString(code), file, (long)line, format]; - va_list args; - va_start(args, format); - NSLogv(logFormat, args); - va_end(args); -#endif // !NDEBUG -} diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORDataFuture.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORDataFuture.m deleted file mode 100644 index 04903d4..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORDataFuture.m +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Private/GDTCORDataFuture.h" - -@implementation GDTCORDataFuture - -- (instancetype)initWithFileURL:(NSURL *)fileURL { - self = [super init]; - if (self) { - _fileURL = fileURL; - } - return self; -} - -- (BOOL)isEqual:(id)object { - return [self hash] == [object hash]; -} - -- (NSUInteger)hash { - // In reality, only one of these should be populated. - return [_fileURL hash]; -} - -#pragma mark - NSSecureCoding - -/** Coding key for _fileURL ivar. */ -static NSString *kGDTCORDataFutureFileURLKey = @"GDTCORDataFutureFileURLKey"; - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (void)encodeWithCoder:(nonnull NSCoder *)aCoder { - [aCoder encodeObject:_fileURL forKey:kGDTCORDataFutureFileURLKey]; -} - -- (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder { - self = [self init]; - if (self) { - _fileURL = [aDecoder decodeObjectOfClass:[NSURL class] forKey:kGDTCORDataFutureFileURLKey]; - } - return self; -} - -@end diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCOREvent.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCOREvent.m deleted file mode 100644 index 6514312..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCOREvent.m +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Public/GDTCOREvent.h" - -#import <GoogleDataTransport/GDTCORAssert.h> -#import <GoogleDataTransport/GDTCORClock.h> -#import <GoogleDataTransport/GDTCORConsoleLogger.h> -#import <GoogleDataTransport/GDTCORPlatform.h> - -#import "GDTCORLibrary/Private/GDTCORDataFuture.h" -#import "GDTCORLibrary/Private/GDTCOREvent_Private.h" - -@implementation GDTCOREvent - -+ (NSNumber *)nextEventID { - static unsigned long long nextEventID = 0; - static NSString *counterPath; - static dispatch_queue_t eventIDQueue; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - eventIDQueue = dispatch_queue_create("com.google.GDTCOREventIDQueue", DISPATCH_QUEUE_SERIAL); - counterPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0]; - counterPath = [NSString stringWithFormat:@"%@/google-sdks-events/count", counterPath]; - NSError *error; - NSString *countText = [NSString stringWithContentsOfFile:counterPath - encoding:NSUTF8StringEncoding - error:&error]; - const char *countChars = [countText UTF8String]; - unsigned long long count = 0ULL; - if (countChars) { - count = strtoull([countText UTF8String], NULL, 10); - } - nextEventID = error ? 0 : count; - }); - - __block NSNumber *result; - dispatch_sync(eventIDQueue, ^{ - result = @(nextEventID); - nextEventID++; - NSError *error; - [[result stringValue] writeToFile:counterPath - atomically:YES - encoding:NSUTF8StringEncoding - error:&error]; - GDTCORAssert(error == nil, @"There was an error saving the new counter value to disk."); - }); - return result; -} - -- (nullable instancetype)initWithMappingID:(NSString *)mappingID target:(NSInteger)target { - GDTCORAssert(mappingID.length > 0, @"Please give a valid mapping ID"); - GDTCORAssert(target > 0, @"A target cannot be negative or 0"); - if (mappingID == nil || mappingID.length == 0 || target <= 0) { - return nil; - } - self = [super init]; - if (self) { - _eventID = [GDTCOREvent nextEventID]; - _mappingID = mappingID; - _target = target; - _qosTier = GDTCOREventQosDefault; - } - GDTCORLogDebug(@"Event %@ created. mappingID: %@ target:%ld", self, mappingID, (long)target); - return self; -} - -- (instancetype)copy { - GDTCOREvent *copy = [[GDTCOREvent alloc] initWithMappingID:_mappingID target:_target]; - copy->_eventID = _eventID; - copy.dataObject = _dataObject; - copy.qosTier = _qosTier; - copy.clockSnapshot = _clockSnapshot; - copy.customBytes = _customBytes; - copy->_GDTFilePath = _GDTFilePath; - GDTCORLogDebug(@"Copying event %@ to event %@", self, copy); - return copy; -} - -- (NSUInteger)hash { - // This loses some precision, but it's probably fine. - NSUInteger eventIDHash = [_eventID hash]; - NSUInteger mappingIDHash = [_mappingID hash]; - NSUInteger timeHash = [_clockSnapshot hash]; - NSInteger dataObjectHash = [_dataObject hash]; - NSUInteger fileURL = [_GDTFilePath hash]; - - return eventIDHash ^ mappingIDHash ^ _target ^ _qosTier ^ timeHash ^ dataObjectHash ^ fileURL; -} - -- (BOOL)isEqual:(id)object { - return [self hash] == [object hash]; -} - -#pragma mark - Property overrides - -- (void)setDataObject:(id<GDTCOREventDataObject>)dataObject { - // If you're looking here because of a performance issue in -transportBytes slowing the assignment - // of -dataObject, one way to address this is to add a queue to this class, - // dispatch_(barrier_ if concurrent)async here, and implement the getter with a dispatch_sync. - if (dataObject != _dataObject) { - _dataObject = dataObject; - } -} - -- (NSURL *)fileURL { - if (!_GDTFilePath) { - _GDTFilePath = [NSString stringWithFormat:@"event-%lu", (unsigned long)self.hash]; - } - return [GDTCORRootDirectory() URLByAppendingPathComponent:_GDTFilePath]; -} - -#pragma mark - Private methods - -- (BOOL)writeToGDTPath:(NSString *)filePath error:(NSError **)error { - NSData *dataTransportBytes = [_dataObject transportBytes]; - if (dataTransportBytes == nil) { - _GDTFilePath = nil; - _dataObject = nil; - return NO; - } - NSURL *fileURL = [GDTCORRootDirectory() URLByAppendingPathComponent:filePath]; - BOOL writingSuccess = [dataTransportBytes writeToURL:fileURL - options:NSDataWritingAtomic - error:error]; - if (!writingSuccess) { - GDTCORLogError(GDTCORMCEFileWriteError, @"An event file could not be written: %@", fileURL); - return NO; - } - _GDTFilePath = filePath; - _dataObject = nil; - return YES; -} - -#pragma mark - NSSecureCoding and NSCoding Protocols - -/** NSCoding key for eventID property. */ -static NSString *eventIDKey = @"_eventID"; - -/** NSCoding key for mappingID property. */ -static NSString *mappingIDKey = @"_mappingID"; - -/** NSCoding key for target property. */ -static NSString *targetKey = @"_target"; - -/** NSCoding key for qosTier property. */ -static NSString *qosTierKey = @"_qosTier"; - -/** NSCoding key for clockSnapshot property. */ -static NSString *clockSnapshotKey = @"_clockSnapshot"; - -/** NSCoding key for fileURL property. */ -static NSString *fileURLKey = @"_fileURL"; - -/** NSCoding key for GDTFilePath property. */ -static NSString *kGDTFilePathKey = @"_GDTFilePath"; - -/** NSCoding key for backwards compatibility of GDTCORStoredEvent mappingID property.*/ -static NSString *kStoredEventMappingIDKey = @"GDTCORStoredEventMappingIDKey"; - -/** NSCoding key for backwards compatibility of GDTCORStoredEvent target property.*/ -static NSString *kStoredEventTargetKey = @"GDTCORStoredEventTargetKey"; - -/** NSCoding key for backwards compatibility of GDTCORStoredEvent qosTier property.*/ -static NSString *kStoredEventQosTierKey = @"GDTCORStoredEventQosTierKey"; - -/** NSCoding key for backwards compatibility of GDTCORStoredEvent clockSnapshot property.*/ -static NSString *kStoredEventClockSnapshotKey = @"GDTCORStoredEventClockSnapshotKey"; - -/** NSCoding key for backwards compatibility of GDTCORStoredEvent dataFuture property.*/ -static NSString *kStoredEventDataFutureKey = @"GDTCORStoredEventDataFutureKey"; - -/** NSCoding key for customData property. */ -static NSString *kCustomDataKey = @"GDTCOREventCustomDataKey"; - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (id)initWithCoder:(NSCoder *)aDecoder { - GDTCORDataFuture *dataFuture = [aDecoder decodeObjectOfClass:[GDTCORDataFuture class] - forKey:kStoredEventDataFutureKey]; - if (dataFuture) { - return [self initWithCoderForStoredEventBackwardCompatibility:aDecoder - fileURL:dataFuture.fileURL]; - } - NSString *mappingID = [aDecoder decodeObjectOfClass:[NSString class] forKey:mappingIDKey]; - NSInteger target = [aDecoder decodeIntegerForKey:targetKey]; - self = [self initWithMappingID:mappingID target:target]; - if (self) { - _eventID = [aDecoder decodeObjectOfClass:[NSNumber class] forKey:eventIDKey]; - if (_eventID == nil) { - _eventID = [GDTCOREvent nextEventID]; - } - _qosTier = [aDecoder decodeIntegerForKey:qosTierKey]; - _clockSnapshot = [aDecoder decodeObjectOfClass:[GDTCORClock class] forKey:clockSnapshotKey]; - NSURL *fileURL = [aDecoder decodeObjectOfClass:[NSURL class] forKey:fileURLKey]; - if (fileURL) { - _GDTFilePath = [fileURL lastPathComponent]; - } else { - _GDTFilePath = [aDecoder decodeObjectOfClass:[NSString class] forKey:kGDTFilePathKey]; - } - _customBytes = [aDecoder decodeObjectOfClass:[NSData class] forKey:kCustomDataKey]; - } - return self; -} - -- (id)initWithCoderForStoredEventBackwardCompatibility:(NSCoder *)aDecoder - fileURL:(NSURL *)fileURL { - NSString *mappingID = [aDecoder decodeObjectOfClass:[NSString class] - forKey:kStoredEventMappingIDKey]; - NSInteger target = [[aDecoder decodeObjectOfClass:[NSNumber class] - forKey:kStoredEventTargetKey] integerValue]; - self = [self initWithMappingID:mappingID target:target]; - if (self) { - _eventID = [aDecoder decodeObjectOfClass:[NSNumber class] forKey:eventIDKey]; - if (_eventID == nil) { - _eventID = [GDTCOREvent nextEventID]; - } - _qosTier = [[aDecoder decodeObjectOfClass:[NSNumber class] - forKey:kStoredEventQosTierKey] integerValue]; - _clockSnapshot = [aDecoder decodeObjectOfClass:[GDTCORClock class] - forKey:kStoredEventClockSnapshotKey]; - if (fileURL) { - _GDTFilePath = [fileURL lastPathComponent]; - } else { - _GDTFilePath = [aDecoder decodeObjectOfClass:[NSString class] forKey:kGDTFilePathKey]; - } - _customBytes = [aDecoder decodeObjectOfClass:[NSData class] forKey:kCustomDataKey]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - [aCoder encodeObject:_eventID forKey:eventIDKey]; - [aCoder encodeObject:_mappingID forKey:mappingIDKey]; - [aCoder encodeInteger:_target forKey:targetKey]; - [aCoder encodeInteger:_qosTier forKey:qosTierKey]; - [aCoder encodeObject:_clockSnapshot forKey:clockSnapshotKey]; - [aCoder encodeObject:_GDTFilePath forKey:kGDTFilePathKey]; - [aCoder encodeObject:_customBytes forKey:kCustomDataKey]; -} - -@end diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORFlatFileStorage.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORFlatFileStorage.m deleted file mode 100644 index 224fb58..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORFlatFileStorage.m +++ /dev/null @@ -1,342 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Private/GDTCORFlatFileStorage.h" - -#import <GoogleDataTransport/GDTCORAssert.h> -#import <GoogleDataTransport/GDTCORConsoleLogger.h> -#import <GoogleDataTransport/GDTCOREvent.h> -#import <GoogleDataTransport/GDTCORLifecycle.h> -#import <GoogleDataTransport/GDTCORPrioritizer.h> - -#import "GDTCORLibrary/Private/GDTCOREvent_Private.h" -#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h" -#import "GDTCORLibrary/Private/GDTCORUploadCoordinator.h" - -@implementation GDTCORFlatFileStorage - -+ (void)load { - [[GDTCORRegistrar sharedInstance] registerStorage:[self sharedInstance] target:kGDTCORTargetCCT]; - [[GDTCORRegistrar sharedInstance] registerStorage:[self sharedInstance] target:kGDTCORTargetFLL]; - [[GDTCORRegistrar sharedInstance] registerStorage:[self sharedInstance] target:kGDTCORTargetCSH]; - - // Sets a global translation mapping to decode GDTCORStoredEvent objects encoded as instances of - // GDTCOREvent instead. Then we do the same thing with GDTCORStorage. This must be done in load - // because there are no direct references to this class and the NSCoding methods won't be called - // unless the class name is mapped early. - [NSKeyedUnarchiver setClass:[GDTCOREvent class] forClassName:@"GDTCORStoredEvent"]; - [NSKeyedUnarchiver setClass:[GDTCORFlatFileStorage class] forClassName:@"GDTCORStorage"]; -} - -+ (NSString *)archivePath { - static NSString *archivePath; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - archivePath = - [GDTCORRootDirectory() URLByAppendingPathComponent:@"GDTCORFlatFileStorageArchive"].path; - }); - return archivePath; -} - -+ (instancetype)sharedInstance { - static GDTCORFlatFileStorage *sharedStorage; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedStorage = [[GDTCORFlatFileStorage alloc] init]; - }); - return sharedStorage; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _storageQueue = - dispatch_queue_create("com.google.GDTCORFlatFileStorage", DISPATCH_QUEUE_SERIAL); - _targetToEventSet = [[NSMutableDictionary alloc] init]; - _storedEvents = [[NSMutableDictionary alloc] init]; - _uploadCoordinator = [GDTCORUploadCoordinator sharedInstance]; - } - return self; -} - -- (void)storeEvent:(GDTCOREvent *)event - onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion { - GDTCORLogDebug(@"Saving event: %@", event); - if (event == nil) { - GDTCORLogDebug(@"%@", @"The event was nil, so it was not saved."); - return; - } - BOOL hadOriginalCompletion = completion != nil; - if (!completion) { - completion = ^(BOOL wasWritten, NSError *_Nullable error) { - GDTCORLogDebug(@"event %@ stored. success:%@ error:%@", event, wasWritten ? @"YES" : @"NO", - error); - }; - } - - __block GDTCORBackgroundIdentifier bgID = GDTCORBackgroundIdentifierInvalid; - bgID = [[GDTCORApplication sharedApplication] - beginBackgroundTaskWithName:@"GDTStorage" - expirationHandler:^{ - // End the background task if it's still valid. - [[GDTCORApplication sharedApplication] endBackgroundTask:bgID]; - bgID = GDTCORBackgroundIdentifierInvalid; - }]; - - dispatch_async(_storageQueue, ^{ - // Check that a backend implementation is available for this target. - NSInteger target = event.target; - - // Check that a prioritizer is available for this target. - id<GDTCORPrioritizer> prioritizer = - [GDTCORRegistrar sharedInstance].targetToPrioritizer[@(target)]; - GDTCORAssert(prioritizer, @"There's no prioritizer registered for the given target. Are you " - @"sure you've added the support library for the backend you need?"); - - // Write the transport bytes to disk, get a filename. - GDTCORAssert([event.dataObject transportBytes], - @"The event should have been serialized to bytes"); - NSError *error = nil; - NSURL *eventFile = [self saveEventBytesToDisk:event eventHash:event.hash error:&error]; - if (!eventFile || error) { - GDTCORLogError(GDTCORMCEFileWriteError, @"Event failed to save to disk: %@", error); - completion(NO, error); - return; - } else { - GDTCORLogDebug(@"Event saved to disk: %@", eventFile); - completion(YES, error); - } - - // Add event to tracking collections. - [self addEventToTrackingCollections:event]; - - // Have the prioritizer prioritize the event and save state if there was an onComplete block. - [prioritizer prioritizeEvent:event]; - if (hadOriginalCompletion && [prioritizer respondsToSelector:@selector(saveState)]) { - [prioritizer saveState]; - GDTCORLogDebug(@"Prioritizer %@ has saved state due to an event's onComplete block.", - prioritizer); - } - - // Check the QoS, if it's high priority, notify the target that it has a high priority event. - if (event.qosTier == GDTCOREventQoSFast) { - [self.uploadCoordinator forceUploadForTarget:target]; - } - - // Write state to disk if there was an onComplete block or if we're in the background. - if (hadOriginalCompletion || [[GDTCORApplication sharedApplication] isRunningInBackground]) { - if (hadOriginalCompletion) { - GDTCORLogDebug(@"%@", - @"Saving flat file storage state because a completion block was passed."); - } else { - GDTCORLogDebug( - @"%@", @"Saving flat file storage state because the app is running in the background"); - } - NSError *error; - GDTCOREncodeArchive(self, [GDTCORFlatFileStorage archivePath], &error); - if (error) { - GDTCORLogDebug(@"Serializing GDTCORFlatFileStorage to an archive failed: %@", error); - } - } - - // Cancel or end the associated background task if it's still valid. - [[GDTCORApplication sharedApplication] endBackgroundTask:bgID]; - bgID = GDTCORBackgroundIdentifierInvalid; - GDTCORLogDebug(@"Event %@ is stored. There are %ld events stored on disk", event, - (unsigned long)self->_storedEvents.count); - }); -} - -- (void)removeEvents:(NSSet<NSNumber *> *)eventIDs { - NSSet<NSNumber *> *eventsToRemove = [eventIDs copy]; - dispatch_async(_storageQueue, ^{ - for (NSNumber *eventID in eventsToRemove) { - // Remove from disk, first and foremost. - GDTCOREvent *event = self->_storedEvents[eventID]; - if (event) { - NSError *error; - if (event.fileURL) { - NSURL *fileURL = event.fileURL; - BOOL result = [[NSFileManager defaultManager] removeItemAtPath:fileURL.path error:&error]; - if (!result || error) { - GDTCORLogWarning(GDTCORMCWFileReadError, - @"There was an error removing an event file: %@", error); - } else { - GDTCORLogDebug(@"Removed event from disk: %@", fileURL); - } - } - - // Remove from the tracking collections. - [self.storedEvents removeObjectForKey:event.eventID]; - [self.targetToEventSet[@(event.target)] removeObject:event]; - } - } - }); -} - -#pragma mark - Private helper methods - -/** Saves the event's dataObject to a file using NSData mechanisms. - * - * @note This method should only be called from a method within a block on _storageQueue to maintain - * thread safety. - * - * @param event The event. - * @param eventHash The hash value of the event. - * @return The filename - */ -- (NSURL *)saveEventBytesToDisk:(GDTCOREvent *)event - eventHash:(NSUInteger)eventHash - error:(NSError **)error { - NSString *eventFileName = [NSString stringWithFormat:@"event-%lu", (unsigned long)eventHash]; - NSError *writingError; - [event writeToGDTPath:eventFileName error:&writingError]; - if (writingError) { - GDTCORLogDebug(@"There was an error saving an event to disk: %@", writingError); - } - return event.fileURL; -} - -/** Adds the event to internal tracking collections. - * - * @note This method should only be called from a method within a block on _storageQueue to maintain - * thread safety. - * - * @param event The event to track. - */ -- (void)addEventToTrackingCollections:(GDTCOREvent *)event { - _storedEvents[event.eventID] = event; - NSNumber *target = @(event.target); - NSMutableSet<GDTCOREvent *> *events = self.targetToEventSet[target]; - events = events ? events : [[NSMutableSet alloc] init]; - [events addObject:event]; - _targetToEventSet[target] = events; -} - -#pragma mark - GDTCORLifecycleProtocol - -- (void)appWillForeground:(GDTCORApplication *)app { - dispatch_async(_storageQueue, ^{ - NSError *error; - GDTCORDecodeArchive([GDTCORFlatFileStorage class], [GDTCORFlatFileStorage archivePath], nil, - &error); - if (error) { - GDTCORLogDebug(@"Deserializing GDTCORFlatFileStorage from an archive failed: %@", error); - } - }); -} - -- (void)appWillBackground:(GDTCORApplication *)app { - dispatch_async(_storageQueue, ^{ - // Immediately request a background task to run until the end of the current queue of work, and - // cancel it once the work is done. - __block GDTCORBackgroundIdentifier bgID = - [app beginBackgroundTaskWithName:@"GDTStorage" - expirationHandler:^{ - [app endBackgroundTask:bgID]; - bgID = GDTCORBackgroundIdentifierInvalid; - }]; - NSError *error; - GDTCOREncodeArchive(self, [GDTCORFlatFileStorage archivePath], &error); - if (error) { - GDTCORLogDebug(@"Serializing GDTCORFlatFileStorage to an archive failed: %@", error); - } else { - GDTCORLogDebug(@"Serialized GDTCORFlatFileStorage to %@", - [GDTCORFlatFileStorage archivePath]); - } - - // End the background task if it's still valid. - [app endBackgroundTask:bgID]; - bgID = GDTCORBackgroundIdentifierInvalid; - }); -} - -- (void)appWillTerminate:(GDTCORApplication *)application { - dispatch_sync(_storageQueue, ^{ - NSError *error; - GDTCOREncodeArchive(self, [GDTCORFlatFileStorage archivePath], &error); - if (error) { - GDTCORLogDebug(@"Serializing GDTCORFlatFileStorage to an archive failed: %@", error); - } else { - GDTCORLogDebug(@"Serialized GDTCORFlatFileStorage to %@", - [GDTCORFlatFileStorage archivePath]); - } - }); -} - -#pragma mark - NSSecureCoding - -/** The NSKeyedCoder key for the storedEvents property. */ -static NSString *const kGDTCORFlatFileStorageStoredEventsKey = @"GDTCORStorageStoredEventsKey"; - -/** The NSKeyedCoder key for the targetToEventSet property. */ -static NSString *const kGDTCORFlatFileStorageTargetToEventSetKey = - @"GDTCORStorageTargetToEventSetKey"; - -/** The NSKeyedCoder key for the uploadCoordinator property. */ -static NSString *const kGDTCORFlatFileStorageUploadCoordinatorKey = - @"GDTCORStorageUploadCoordinatorKey"; - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - // Create the singleton and populate its ivars. - GDTCORFlatFileStorage *sharedInstance = [self.class sharedInstance]; - NSSet *classes = [NSSet setWithObjects:[NSMutableOrderedSet class], [NSMutableDictionary class], - [GDTCOREvent class], nil]; - id storedEvents = [aDecoder decodeObjectOfClasses:classes - forKey:kGDTCORFlatFileStorageStoredEventsKey]; - NSMutableDictionary<NSNumber *, GDTCOREvent *> *events = [[NSMutableDictionary alloc] init]; - if ([storedEvents isKindOfClass:[NSMutableOrderedSet class]]) { - [(NSMutableOrderedSet *)storedEvents - enumerateObjectsUsingBlock:^(GDTCOREvent *_Nonnull obj, NSUInteger idx, - BOOL *_Nonnull stop) { - events[obj.eventID] = obj; - }]; - } else if ([storedEvents isKindOfClass:[NSMutableDictionary class]]) { - events = (NSMutableDictionary *)storedEvents; - } - sharedInstance->_storedEvents = events; - classes = [NSSet - setWithObjects:[NSMutableDictionary class], [NSMutableSet class], [GDTCOREvent class], nil]; - sharedInstance->_targetToEventSet = - [aDecoder decodeObjectOfClasses:classes forKey:kGDTCORFlatFileStorageTargetToEventSetKey]; - sharedInstance->_uploadCoordinator = - [aDecoder decodeObjectOfClass:[GDTCORUploadCoordinator class] - forKey:kGDTCORFlatFileStorageUploadCoordinatorKey]; - return sharedInstance; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - GDTCORFlatFileStorage *sharedInstance = [self.class sharedInstance]; - NSMutableDictionary<NSNumber *, GDTCOREvent *> *storedEvents = sharedInstance->_storedEvents; - if (storedEvents) { - [aCoder encodeObject:storedEvents forKey:kGDTCORFlatFileStorageStoredEventsKey]; - } - NSMutableDictionary<NSNumber *, NSMutableSet<GDTCOREvent *> *> *targetToEventSet = - sharedInstance->_targetToEventSet; - if (targetToEventSet) { - [aCoder encodeObject:targetToEventSet forKey:kGDTCORFlatFileStorageTargetToEventSetKey]; - } - GDTCORUploadCoordinator *uploadCoordinator = sharedInstance->_uploadCoordinator; - if (uploadCoordinator) { - [aCoder encodeObject:uploadCoordinator forKey:kGDTCORFlatFileStorageUploadCoordinatorKey]; - } -} - -@end diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORLifecycle.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORLifecycle.m deleted file mode 100644 index 9228c34..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORLifecycle.m +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Public/GDTCORLifecycle.h" - -#import <GoogleDataTransport/GDTCORConsoleLogger.h> -#import <GoogleDataTransport/GDTCOREvent.h> - -#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h" -#import "GDTCORLibrary/Private/GDTCORTransformer_Private.h" -#import "GDTCORLibrary/Private/GDTCORUploadCoordinator.h" - -@implementation GDTCORLifecycle - -+ (void)load { - [self sharedInstance]; -} - -/** Creates/returns the singleton instance of this class. - * - * @return The singleton instance of this class. - */ -+ (instancetype)sharedInstance { - static GDTCORLifecycle *sharedInstance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[GDTCORLifecycle alloc] init]; - }); - return sharedInstance; -} - -- (instancetype)init { - self = [super init]; - if (self) { - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - [notificationCenter addObserver:self - selector:@selector(applicationDidEnterBackground:) - name:kGDTCORApplicationDidEnterBackgroundNotification - object:nil]; - [notificationCenter addObserver:self - selector:@selector(applicationWillEnterForeground:) - name:kGDTCORApplicationWillEnterForegroundNotification - object:nil]; - - NSString *name = kGDTCORApplicationWillTerminateNotification; - [notificationCenter addObserver:self - selector:@selector(applicationWillTerminate:) - name:name - object:nil]; - } - return self; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -- (void)applicationDidEnterBackground:(NSNotification *)notification { - GDTCORApplication *application = [GDTCORApplication sharedApplication]; - if ([[GDTCORTransformer sharedInstance] respondsToSelector:@selector(appWillBackground:)]) { - GDTCORLogDebug(@"%@", @"Signaling GDTCORTransformer that the app is backgrounding."); - [[GDTCORTransformer sharedInstance] appWillBackground:application]; - } - if ([[GDTCORUploadCoordinator sharedInstance] respondsToSelector:@selector(appWillBackground:)]) { - GDTCORLogDebug(@"%@", @"Signaling GDTCORUploadCoordinator that the app is backgrounding."); - [[GDTCORUploadCoordinator sharedInstance] appWillBackground:application]; - } - if ([[GDTCORRegistrar sharedInstance] respondsToSelector:@selector(appWillBackground:)]) { - GDTCORLogDebug(@"%@", @"Signaling GDTCORRegistrar that the app is backgrounding."); - [[GDTCORRegistrar sharedInstance] appWillBackground:application]; - } -} - -- (void)applicationWillEnterForeground:(NSNotification *)notification { - GDTCORApplication *application = [GDTCORApplication sharedApplication]; - if ([[GDTCORTransformer sharedInstance] respondsToSelector:@selector(appWillForeground:)]) { - GDTCORLogDebug(@"%@", @"Signaling GDTCORTransformer that the app is foregrounding."); - [[GDTCORTransformer sharedInstance] appWillForeground:application]; - } - if ([[GDTCORUploadCoordinator sharedInstance] respondsToSelector:@selector(appWillForeground:)]) { - GDTCORLogDebug(@"%@", @"Signaling GDTCORUploadCoordinator that the app is foregrounding."); - [[GDTCORUploadCoordinator sharedInstance] appWillForeground:application]; - } - if ([[GDTCORRegistrar sharedInstance] respondsToSelector:@selector(appWillForeground:)]) { - GDTCORLogDebug(@"%@", @"Signaling GDTCORRegistrar that the app is foregrounding."); - [[GDTCORRegistrar sharedInstance] appWillForeground:application]; - } -} - -- (void)applicationWillTerminate:(NSNotification *)notification { - GDTCORApplication *application = [GDTCORApplication sharedApplication]; - if ([[GDTCORTransformer sharedInstance] respondsToSelector:@selector(appWillTerminate:)]) { - GDTCORLogDebug(@"%@", @"Signaling GDTCORTransformer that the app is terminating."); - [[GDTCORTransformer sharedInstance] appWillTerminate:application]; - } - if ([[GDTCORUploadCoordinator sharedInstance] respondsToSelector:@selector(appWillTerminate:)]) { - GDTCORLogDebug(@"%@", @"Signaling GDTCORUploadCoordinator that the app is terminating."); - [[GDTCORUploadCoordinator sharedInstance] appWillTerminate:application]; - } - if ([[GDTCORRegistrar sharedInstance] respondsToSelector:@selector(appWillTerminate:)]) { - GDTCORLogDebug(@"%@", @"Signaling GDTCORRegistrar that the app is terminating."); - [[GDTCORRegistrar sharedInstance] appWillTerminate:application]; - } -} - -@end diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORPlatform.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORPlatform.m deleted file mode 100644 index 151d9b1..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORPlatform.m +++ /dev/null @@ -1,407 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <GoogleDataTransport/GDTCORPlatform.h> - -#import <GoogleDataTransport/GDTCORAssert.h> -#import <GoogleDataTransport/GDTCORConsoleLogger.h> -#import <GoogleDataTransport/GDTCORReachability.h> - -#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h" - -#ifdef GDTCOR_VERSION -#define STR(x) STR_EXPAND(x) -#define STR_EXPAND(x) #x -NSString *const kGDTCORVersion = @STR(GDTCOR_VERSION); -#else -NSString *const kGDTCORVersion = @"Unknown"; -#endif // GDTCOR_VERSION - -const GDTCORBackgroundIdentifier GDTCORBackgroundIdentifierInvalid = 0; - -NSString *const kGDTCORApplicationDidEnterBackgroundNotification = - @"GDTCORApplicationDidEnterBackgroundNotification"; - -NSString *const kGDTCORApplicationWillEnterForegroundNotification = - @"GDTCORApplicationWillEnterForegroundNotification"; - -NSString *const kGDTCORApplicationWillTerminateNotification = - @"GDTCORApplicationWillTerminateNotification"; - -NSURL *GDTCORRootDirectory(void) { - static NSURL *GDTPath; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSString *cachePath = - NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0]; - GDTPath = - [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/google-sdks-events", cachePath]]; - GDTCORLogDebug(@"GDT's state will be saved to: %@", GDTPath); - if (![[NSFileManager defaultManager] fileExistsAtPath:GDTPath.path]) { - NSError *error; - [[NSFileManager defaultManager] createDirectoryAtPath:GDTPath.path - withIntermediateDirectories:YES - attributes:nil - error:&error]; - GDTCORAssert(error == nil, @"There was an error creating GDT's path"); - } - }); - return GDTPath; -} - -#if !TARGET_OS_WATCH -BOOL GDTCORReachabilityFlagsContainWWAN(SCNetworkReachabilityFlags flags) { -#if TARGET_OS_IOS - return (flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN; -#else - return NO; -#endif // TARGET_OS_IOS -} -#endif // !TARGET_OS_WATCH - -GDTCORNetworkType GDTCORNetworkTypeMessage() { -#if !TARGET_OS_WATCH - SCNetworkReachabilityFlags reachabilityFlags = [GDTCORReachability currentFlags]; - if ((reachabilityFlags & kSCNetworkReachabilityFlagsReachable) == - kSCNetworkReachabilityFlagsReachable) { - if (GDTCORReachabilityFlagsContainWWAN(reachabilityFlags)) { - return GDTCORNetworkTypeMobile; - } else { - return GDTCORNetworkTypeWIFI; - } - } -#endif - return GDTCORNetworkTypeUNKNOWN; -} - -GDTCORNetworkMobileSubtype GDTCORNetworkMobileSubTypeMessage() { -#if TARGET_OS_IOS - static NSDictionary<NSString *, NSNumber *> *CTRadioAccessTechnologyToNetworkSubTypeMessage; - static CTTelephonyNetworkInfo *networkInfo; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - CTRadioAccessTechnologyToNetworkSubTypeMessage = @{ - CTRadioAccessTechnologyGPRS : @(GDTCORNetworkMobileSubtypeGPRS), - CTRadioAccessTechnologyEdge : @(GDTCORNetworkMobileSubtypeEdge), - CTRadioAccessTechnologyWCDMA : @(GDTCORNetworkMobileSubtypeWCDMA), - CTRadioAccessTechnologyHSDPA : @(GDTCORNetworkMobileSubtypeHSDPA), - CTRadioAccessTechnologyHSUPA : @(GDTCORNetworkMobileSubtypeHSUPA), - CTRadioAccessTechnologyCDMA1x : @(GDTCORNetworkMobileSubtypeCDMA1x), - CTRadioAccessTechnologyCDMAEVDORev0 : @(GDTCORNetworkMobileSubtypeCDMAEVDORev0), - CTRadioAccessTechnologyCDMAEVDORevA : @(GDTCORNetworkMobileSubtypeCDMAEVDORevA), - CTRadioAccessTechnologyCDMAEVDORevB : @(GDTCORNetworkMobileSubtypeCDMAEVDORevB), - CTRadioAccessTechnologyeHRPD : @(GDTCORNetworkMobileSubtypeHRPD), - CTRadioAccessTechnologyLTE : @(GDTCORNetworkMobileSubtypeLTE), - }; - networkInfo = [[CTTelephonyNetworkInfo alloc] init]; - }); - NSString *networkCurrentRadioAccessTechnology; -#if TARGET_OS_MACCATALYST - NSDictionary<NSString *, NSString *> *networkCurrentRadioAccessTechnologyDict = - networkInfo.serviceCurrentRadioAccessTechnology; - if (networkCurrentRadioAccessTechnologyDict.count) { - networkCurrentRadioAccessTechnology = networkCurrentRadioAccessTechnologyDict.allValues[0]; - } -#else // TARGET_OS_MACCATALYST -#if defined(__IPHONE_12_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 120000 - if (@available(iOS 12.0, *)) { - NSDictionary<NSString *, NSString *> *networkCurrentRadioAccessTechnologyDict = - networkInfo.serviceCurrentRadioAccessTechnology; - if (networkCurrentRadioAccessTechnologyDict.count) { - // In iOS 12, multiple radio technologies can be captured. We prefer not particular radio - // tech to another, so we'll just return the first value in the dictionary. - networkCurrentRadioAccessTechnology = networkCurrentRadioAccessTechnologyDict.allValues[0]; - } - } else { -#else // defined(__IPHONE_12_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 120000 - networkCurrentRadioAccessTechnology = networkInfo.currentRadioAccessTechnology; -#endif // // defined(__IPHONE_12_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 120000 - } -#endif // TARGET_OS_MACCATALYST - if (networkCurrentRadioAccessTechnology) { - NSNumber *networkMobileSubtype = - CTRadioAccessTechnologyToNetworkSubTypeMessage[networkCurrentRadioAccessTechnology]; - return networkMobileSubtype.intValue; - } else { - return GDTCORNetworkMobileSubtypeUNKNOWN; - } -#else - return GDTCORNetworkMobileSubtypeUNKNOWN; -#endif -} - -NSData *_Nullable GDTCOREncodeArchive(id<NSSecureCoding> obj, - NSString *archivePath, - NSError *_Nullable *error) { - NSData *resultData; -#if (defined(__IPHONE_11_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || \ - (defined(__MAC_10_13) && MAC_OS_X_VERSION_MAX_ALLOWED >= 101300) || \ - (defined(__TVOS_11_0) && __TV_OS_VERSION_MAX_ALLOWED >= 110000) || \ - (defined(__WATCHOS_4_0) && __WATCH_OS_VERSION_MAX_ALLOWED >= 040000) || \ - (defined(TARGET_OS_MACCATALYST) && TARGET_OS_MACCATALYST) - if (@available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4, *)) { - resultData = [NSKeyedArchiver archivedDataWithRootObject:obj - requiringSecureCoding:YES - error:error]; - if (*error) { - GDTCORLogDebug(@"Encoding an object failed: %@", *error); - return nil; - } - if (archivePath) { - BOOL result = [resultData writeToFile:archivePath options:NSDataWritingAtomic error:error]; - if (result == NO || *error) { - GDTCORLogDebug(@"Attempt to write archive failed: URL:%@ error:%@", archivePath, *error); - } else { - GDTCORLogDebug(@"Writing archive succeeded: %@", archivePath); - } - } - } else { -#endif - BOOL result = NO; - @try { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - resultData = [NSKeyedArchiver archivedDataWithRootObject:obj]; -#pragma clang diagnostic pop - if (archivePath) { - result = [resultData writeToFile:archivePath options:NSDataWritingAtomic error:error]; - if (result == NO || *error) { - GDTCORLogDebug(@"Attempt to write archive failed: URL:%@ error:%@", archivePath, *error); - } else { - GDTCORLogDebug(@"Writing archive succeeded: %@", archivePath); - } - } - } @catch (NSException *exception) { - NSString *errorString = - [NSString stringWithFormat:@"An exception was thrown during encoding: %@", exception]; - *error = [NSError errorWithDomain:NSCocoaErrorDomain - code:-1 - userInfo:@{NSLocalizedFailureReasonErrorKey : errorString}]; - } - GDTCORLogDebug(@"Attempt to write archive. successful:%@ URL:%@ error:%@", - result ? @"YES" : @"NO", archivePath, *error); - } - return resultData; -} - -id<NSSecureCoding> _Nullable GDTCORDecodeArchive(Class archiveClass, - NSString *_Nullable archivePath, - NSData *_Nullable archiveData, - NSError *_Nullable *error) { - id<NSSecureCoding> unarchivedObject = nil; -#if (defined(__IPHONE_11_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || \ - (defined(__MAC_10_13) && MAC_OS_X_VERSION_MAX_ALLOWED >= 101300) || \ - (defined(__TVOS_11_0) && __TV_OS_VERSION_MAX_ALLOWED >= 110000) || \ - (defined(__WATCHOS_4_0) && __WATCH_OS_VERSION_MAX_ALLOWED >= 040000) || \ - (defined(TARGET_OS_MACCATALYST) && TARGET_OS_MACCATALYST) - if (@available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4, *)) { - NSData *data = archiveData ? archiveData : [NSData dataWithContentsOfFile:archivePath]; - if (data) { - unarchivedObject = [NSKeyedUnarchiver unarchivedObjectOfClass:archiveClass - fromData:data - error:error]; - } - } else { -#endif - @try { - NSData *archivedData = - archiveData ? archiveData : [NSData dataWithContentsOfFile:archivePath]; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - unarchivedObject = [NSKeyedUnarchiver unarchiveObjectWithData:archivedData]; -#pragma clang diagnostic pop - } @catch (NSException *exception) { - NSString *errorString = - [NSString stringWithFormat:@"An exception was thrown during encoding: %@", exception]; - *error = [NSError errorWithDomain:NSCocoaErrorDomain - code:-1 - userInfo:@{NSLocalizedFailureReasonErrorKey : errorString}]; - } - } - return unarchivedObject; -} - -@interface GDTCORApplication () -/** - Private flag to match the existing `readonly` public flag. This will be accurate for all platforms, - since we handle each platform's lifecycle notifications separately. - */ -@property(atomic, readwrite) BOOL isRunningInBackground; - -@end - -@implementation GDTCORApplication - -+ (void)load { - GDTCORLogDebug( - @"%@", @"GDT is initializing. Please note that if you quit the app via the " - "debugger and not through a lifecycle event, event data will remain on disk but " - "storage won't have a reference to them since the singleton wasn't saved to disk."); -#if TARGET_OS_IOS || TARGET_OS_TV - // If this asserts, please file a bug at https://github.com/firebase/firebase-ios-sdk/issues. - GDTCORFatalAssert( - GDTCORBackgroundIdentifierInvalid == UIBackgroundTaskInvalid, - @"GDTCORBackgroundIdentifierInvalid and UIBackgroundTaskInvalid should be the same."); -#endif - [self sharedApplication]; -} - -+ (nullable GDTCORApplication *)sharedApplication { - static GDTCORApplication *application; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - application = [[GDTCORApplication alloc] init]; - }); - return application; -} - -- (instancetype)init { - self = [super init]; - if (self) { - // This class will be instantiated in the foreground. - _isRunningInBackground = NO; - -#if TARGET_OS_IOS || TARGET_OS_TV - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - [notificationCenter addObserver:self - selector:@selector(iOSApplicationDidEnterBackground:) - name:UIApplicationDidEnterBackgroundNotification - object:nil]; - [notificationCenter addObserver:self - selector:@selector(iOSApplicationWillEnterForeground:) - name:UIApplicationWillEnterForegroundNotification - object:nil]; - - NSString *name = UIApplicationWillTerminateNotification; - [notificationCenter addObserver:self - selector:@selector(iOSApplicationWillTerminate:) - name:name - object:nil]; - -#if defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 - if (@available(iOS 13, tvOS 13.0, *)) { - [notificationCenter addObserver:self - selector:@selector(iOSApplicationWillEnterForeground:) - name:UISceneWillEnterForegroundNotification - object:nil]; - [notificationCenter addObserver:self - selector:@selector(iOSApplicationDidEnterBackground:) - name:UISceneWillDeactivateNotification - object:nil]; - } -#endif // defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 - -#elif TARGET_OS_OSX - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - [notificationCenter addObserver:self - selector:@selector(macOSApplicationWillTerminate:) - name:NSApplicationWillTerminateNotification - object:nil]; -#endif // TARGET_OS_IOS || TARGET_OS_TV - } - return self; -} - -- (GDTCORBackgroundIdentifier)beginBackgroundTaskWithName:(NSString *)name - expirationHandler:(void (^)(void))handler { - GDTCORBackgroundIdentifier bgID = - [[self sharedApplicationForBackgroundTask] beginBackgroundTaskWithName:name - expirationHandler:handler]; -#if !NDEBUG - if (bgID != GDTCORBackgroundIdentifierInvalid) { - GDTCORLogDebug(@"Creating background task with name:%@ bgID:%ld", name, (long)bgID); - } -#endif // !NDEBUG - return bgID; -} - -- (void)endBackgroundTask:(GDTCORBackgroundIdentifier)bgID { - if (bgID != GDTCORBackgroundIdentifierInvalid) { - GDTCORLogDebug(@"Ending background task with ID:%ld was successful", (long)bgID); - [[self sharedApplicationForBackgroundTask] endBackgroundTask:bgID]; - return; - } -} - -#pragma mark - App environment helpers - -- (BOOL)isAppExtension { -#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH - BOOL appExtension = [[[NSBundle mainBundle] bundlePath] hasSuffix:@".appex"]; - return appExtension; -#elif TARGET_OS_OSX - return NO; -#endif -} - -/** Returns a UIApplication instance if on the appropriate platform. - * - * @return The shared UIApplication if on the appropriate platform. - */ -#if TARGET_OS_IOS || TARGET_OS_TV -- (nullable UIApplication *)sharedApplicationForBackgroundTask { -#else -- (nullable id)sharedApplicationForBackgroundTask { -#endif - if ([self isAppExtension]) { - return nil; - } - id sharedApplication = nil; - Class uiApplicationClass = NSClassFromString(@"UIApplication"); - if (uiApplicationClass && - [uiApplicationClass respondsToSelector:(NSSelectorFromString(@"sharedApplication"))]) { - sharedApplication = [uiApplicationClass sharedApplication]; - } - return sharedApplication; -} - -#pragma mark - UIApplicationDelegate - -#if TARGET_OS_IOS || TARGET_OS_TV -- (void)iOSApplicationDidEnterBackground:(NSNotification *)notif { - _isRunningInBackground = YES; - - NSNotificationCenter *notifCenter = [NSNotificationCenter defaultCenter]; - GDTCORLogDebug(@"%@", @"GDTCORPlatform is sending a notif that the app is backgrounding."); - [notifCenter postNotificationName:kGDTCORApplicationDidEnterBackgroundNotification object:nil]; -} - -- (void)iOSApplicationWillEnterForeground:(NSNotification *)notif { - _isRunningInBackground = NO; - - NSNotificationCenter *notifCenter = [NSNotificationCenter defaultCenter]; - GDTCORLogDebug(@"%@", @"GDTCORPlatform is sending a notif that the app is foregrounding."); - [notifCenter postNotificationName:kGDTCORApplicationWillEnterForegroundNotification object:nil]; -} - -- (void)iOSApplicationWillTerminate:(NSNotification *)notif { - NSNotificationCenter *notifCenter = [NSNotificationCenter defaultCenter]; - GDTCORLogDebug(@"%@", @"GDTCORPlatform is sending a notif that the app is terminating."); - [notifCenter postNotificationName:kGDTCORApplicationWillTerminateNotification object:nil]; -} -#endif // TARGET_OS_IOS || TARGET_OS_TV - -#pragma mark - NSApplicationDelegate - -#if TARGET_OS_OSX -- (void)macOSApplicationWillTerminate:(NSNotification *)notif { - NSNotificationCenter *notifCenter = [NSNotificationCenter defaultCenter]; - GDTCORLogDebug(@"%@", @"GDTCORPlatform is sending a notif that the app is terminating."); - [notifCenter postNotificationName:kGDTCORApplicationWillTerminateNotification object:nil]; -} -#endif // TARGET_OS_OSX - -@end diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORReachability.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORReachability.m deleted file mode 100644 index 3fb4e0d..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORReachability.m +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Public/GDTCORReachability.h" -#import "GDTCORLibrary/Private/GDTCORReachability_Private.h" -#if !TARGET_OS_WATCH - -#import <GoogleDataTransport/GDTCORConsoleLogger.h> - -#import <netinet/in.h> - -/** Sets the _callbackFlag ivar whenever the network changes. - * - * @param reachability The reachability object calling back. - * @param flags The new flag values. - * @param info Any data that might be passed in by the callback. - */ -static void GDTCORReachabilityCallback(SCNetworkReachabilityRef reachability, - SCNetworkReachabilityFlags flags, - void *info); - -@implementation GDTCORReachability { - /** The reachability object. */ - SCNetworkReachabilityRef _reachabilityRef; - - /** The queue on which callbacks and all work will occur. */ - dispatch_queue_t _reachabilityQueue; - - /** Flags specified by reachability callbacks. */ - SCNetworkConnectionFlags _callbackFlags; -} - -+ (void)load { - [self sharedInstance]; -} - -+ (instancetype)sharedInstance { - static GDTCORReachability *sharedInstance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[GDTCORReachability alloc] init]; - }); - return sharedInstance; -} - -+ (SCNetworkReachabilityFlags)currentFlags { - __block SCNetworkReachabilityFlags currentFlags; - dispatch_sync([GDTCORReachability sharedInstance] -> _reachabilityQueue, ^{ - GDTCORReachability *reachability = [GDTCORReachability sharedInstance]; - currentFlags = - reachability->_callbackFlags ? reachability->_callbackFlags : reachability->_flags; - GDTCORLogDebug(@"Initial reachability flags determined: %d", currentFlags); - }); - return currentFlags; -} - -- (instancetype)init { - self = [super init]; - if (self) { - struct sockaddr_in zeroAddress; - bzero(&zeroAddress, sizeof(zeroAddress)); - zeroAddress.sin_len = sizeof(zeroAddress); - zeroAddress.sin_family = AF_INET; - - _reachabilityQueue = - dispatch_queue_create("com.google.GDTCORReachability", DISPATCH_QUEUE_SERIAL); - _reachabilityRef = SCNetworkReachabilityCreateWithAddress( - kCFAllocatorDefault, (const struct sockaddr *)&zeroAddress); - Boolean success = SCNetworkReachabilitySetDispatchQueue(_reachabilityRef, _reachabilityQueue); - if (!success) { - GDTCORLogWarning(GDTCORMCWReachabilityFailed, @"%@", @"The reachability queue wasn't set."); - } - success = SCNetworkReachabilitySetCallback(_reachabilityRef, GDTCORReachabilityCallback, NULL); - if (!success) { - GDTCORLogWarning(GDTCORMCWReachabilityFailed, @"%@", - @"The reachability callback wasn't set."); - } - - // Get the initial set of flags. - dispatch_async(_reachabilityQueue, ^{ - Boolean valid = SCNetworkReachabilityGetFlags(self->_reachabilityRef, &self->_flags); - if (!valid) { - GDTCORLogDebug(@"%@", @"Determining reachability failed."); - self->_flags = 0; - } - }); - } - return self; -} - -- (void)setCallbackFlags:(SCNetworkReachabilityFlags)flags { - if (_callbackFlags != flags) { - self->_callbackFlags = flags; - } -} - -@end - -static void GDTCORReachabilityCallback(SCNetworkReachabilityRef reachability, - SCNetworkReachabilityFlags flags, - void *info) { - GDTCORLogDebug(@"Reachability changed, new flags: %d", flags); - [[GDTCORReachability sharedInstance] setCallbackFlags:flags]; -} - -#endif diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORRegistrar.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORRegistrar.m deleted file mode 100644 index 536da66..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORRegistrar.m +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Public/GDTCORRegistrar.h" -#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h" - -#import "GDTCORLibrary/Public/GDTCORConsoleLogger.h" - -@implementation GDTCORRegistrar { - /** Backing ivar for targetToUploader property. */ - NSMutableDictionary<NSNumber *, id<GDTCORUploader>> *_targetToUploader; - - /** Backing ivar for targetToPrioritizer property. */ - NSMutableDictionary<NSNumber *, id<GDTCORPrioritizer>> *_targetToPrioritizer; - - /** Backing ivar for targetToStorage property. */ - NSMutableDictionary<NSNumber *, id<GDTCORStorageProtocol>> *_targetToStorage; -} - -+ (instancetype)sharedInstance { - static GDTCORRegistrar *sharedInstance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[GDTCORRegistrar alloc] init]; - }); - return sharedInstance; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _registrarQueue = dispatch_queue_create("com.google.GDTCORRegistrar", DISPATCH_QUEUE_SERIAL); - _targetToPrioritizer = [[NSMutableDictionary alloc] init]; - _targetToUploader = [[NSMutableDictionary alloc] init]; - _targetToStorage = [[NSMutableDictionary alloc] init]; - } - return self; -} - -- (void)registerUploader:(id<GDTCORUploader>)backend target:(GDTCORTarget)target { - __weak GDTCORRegistrar *weakSelf = self; - dispatch_async(_registrarQueue, ^{ - GDTCORRegistrar *strongSelf = weakSelf; - if (strongSelf) { - GDTCORLogDebug(@"Registered an uploader: %@ for target:%ld", backend, (long)target); - strongSelf->_targetToUploader[@(target)] = backend; - } - }); -} - -- (void)registerStorage:(id<GDTCORStorageProtocol>)storage target:(GDTCORTarget)target { - __weak GDTCORRegistrar *weakSelf = self; - dispatch_async(_registrarQueue, ^{ - GDTCORRegistrar *strongSelf = weakSelf; - if (strongSelf) { - GDTCORLogDebug(@"Registered storage: %@ for target:%ld", storage, (long)target); - strongSelf->_targetToStorage[@(target)] = storage; - } - }); -} - -- (void)registerPrioritizer:(id<GDTCORPrioritizer>)prioritizer target:(GDTCORTarget)target { - __weak GDTCORRegistrar *weakSelf = self; - dispatch_async(_registrarQueue, ^{ - GDTCORRegistrar *strongSelf = weakSelf; - if (strongSelf) { - GDTCORLogDebug(@"Registered a prioritizer: %@ for target:%ld", prioritizer, (long)target); - strongSelf->_targetToPrioritizer[@(target)] = prioritizer; - } - }); -} - -- (NSMutableDictionary<NSNumber *, id<GDTCORUploader>> *)targetToUploader { - __block NSMutableDictionary<NSNumber *, id<GDTCORUploader>> *targetToUploader; - __weak GDTCORRegistrar *weakSelf = self; - dispatch_sync(_registrarQueue, ^{ - GDTCORRegistrar *strongSelf = weakSelf; - if (strongSelf) { - targetToUploader = strongSelf->_targetToUploader; - } - }); - return targetToUploader; -} - -- (NSMutableDictionary<NSNumber *, id<GDTCORPrioritizer>> *)targetToPrioritizer { - __block NSMutableDictionary<NSNumber *, id<GDTCORPrioritizer>> *targetToPrioritizer; - __weak GDTCORRegistrar *weakSelf = self; - dispatch_sync(_registrarQueue, ^{ - GDTCORRegistrar *strongSelf = weakSelf; - if (strongSelf) { - targetToPrioritizer = strongSelf->_targetToPrioritizer; - } - }); - return targetToPrioritizer; -} - -- (NSMutableDictionary<NSNumber *, id<GDTCORStorageProtocol>> *)targetToStorage { - __block NSMutableDictionary<NSNumber *, id<GDTCORStorageProtocol>> *targetToStorage; - __weak GDTCORRegistrar *weakSelf = self; - dispatch_sync(_registrarQueue, ^{ - GDTCORRegistrar *strongSelf = weakSelf; - if (strongSelf) { - targetToStorage = strongSelf->_targetToStorage; - } - }); - return targetToStorage; -} - -#pragma mark - GDTCORLifecycleProtocol - -- (void)appWillBackground:(nonnull GDTCORApplication *)app { - NSArray<id<GDTCORUploader>> *uploaders = [self.targetToUploader allValues]; - for (id<GDTCORUploader> uploader in uploaders) { - if ([uploader respondsToSelector:@selector(appWillBackground:)]) { - [uploader appWillBackground:app]; - } - } - NSArray<id<GDTCORPrioritizer>> *prioritizers = [self.targetToPrioritizer allValues]; - for (id<GDTCORPrioritizer> prioritizer in prioritizers) { - if ([prioritizer respondsToSelector:@selector(appWillBackground:)]) { - [prioritizer appWillBackground:app]; - } - } - NSArray<id<GDTCORStorageProtocol>> *storages = [self.targetToStorage allValues]; - for (id<GDTCORStorageProtocol> storage in storages) { - if ([storage respondsToSelector:@selector(appWillBackground:)]) { - [storage appWillBackground:app]; - } - } -} - -- (void)appWillForeground:(nonnull GDTCORApplication *)app { - NSArray<id<GDTCORUploader>> *uploaders = [self.targetToUploader allValues]; - for (id<GDTCORUploader> uploader in uploaders) { - if ([uploader respondsToSelector:@selector(appWillForeground:)]) { - [uploader appWillForeground:app]; - } - } - NSArray<id<GDTCORPrioritizer>> *prioritizers = [self.targetToPrioritizer allValues]; - for (id<GDTCORPrioritizer> prioritizer in prioritizers) { - if ([prioritizer respondsToSelector:@selector(appWillForeground:)]) { - [prioritizer appWillForeground:app]; - } - } - NSArray<id<GDTCORStorageProtocol>> *storages = [self.targetToStorage allValues]; - for (id<GDTCORStorageProtocol> storage in storages) { - if ([storage respondsToSelector:@selector(appWillForeground:)]) { - [storage appWillForeground:app]; - } - } -} - -- (void)appWillTerminate:(nonnull GDTCORApplication *)app { - NSArray<id<GDTCORUploader>> *uploaders = [self.targetToUploader allValues]; - for (id<GDTCORUploader> uploader in uploaders) { - if ([uploader respondsToSelector:@selector(appWillTerminate:)]) { - [uploader appWillTerminate:app]; - } - } - NSArray<id<GDTCORPrioritizer>> *prioritizers = [self.targetToPrioritizer allValues]; - for (id<GDTCORPrioritizer> prioritizer in prioritizers) { - if ([prioritizer respondsToSelector:@selector(appWillTerminate:)]) { - [prioritizer appWillTerminate:app]; - } - } - NSArray<id<GDTCORStorageProtocol>> *storages = [self.targetToStorage allValues]; - for (id<GDTCORStorageProtocol> storage in storages) { - if ([storage respondsToSelector:@selector(appWillTerminate:)]) { - [storage appWillTerminate:app]; - } - } -} - -@end diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransformer.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransformer.m deleted file mode 100644 index 35f456e..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransformer.m +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Private/GDTCORTransformer.h" -#import "GDTCORLibrary/Private/GDTCORTransformer_Private.h" - -#import <GoogleDataTransport/GDTCORAssert.h> -#import <GoogleDataTransport/GDTCORConsoleLogger.h> -#import <GoogleDataTransport/GDTCOREvent.h> -#import <GoogleDataTransport/GDTCOREventTransformer.h> -#import <GoogleDataTransport/GDTCORLifecycle.h> -#import <GoogleDataTransport/GDTCORStorageProtocol.h> - -#import "GDTCORLibrary/Private/GDTCOREvent_Private.h" -#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h" - -@implementation GDTCORTransformer - -+ (instancetype)sharedInstance { - static GDTCORTransformer *eventTransformer; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - eventTransformer = [[self alloc] init]; - }); - return eventTransformer; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _eventWritingQueue = - dispatch_queue_create("com.google.GDTCORTransformer", DISPATCH_QUEUE_SERIAL); - } - return self; -} - -- (void)transformEvent:(GDTCOREvent *)event - withTransformers:(NSArray<id<GDTCOREventTransformer>> *)transformers - onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion { - GDTCORAssert(event, @"You can't write a nil event"); - BOOL hadOriginalCompletion = completion != nil; - if (!completion) { - completion = ^(BOOL wasWritten, NSError *_Nullable error) { - }; - } - - __block GDTCORBackgroundIdentifier bgID = GDTCORBackgroundIdentifierInvalid; - bgID = [[GDTCORApplication sharedApplication] - beginBackgroundTaskWithName:@"GDTTransformer" - expirationHandler:^{ - [[GDTCORApplication sharedApplication] endBackgroundTask:bgID]; - bgID = GDTCORBackgroundIdentifierInvalid; - }]; - dispatch_async(_eventWritingQueue, ^{ - GDTCOREvent *transformedEvent = event; - for (id<GDTCOREventTransformer> transformer in transformers) { - if ([transformer respondsToSelector:@selector(transform:)]) { - GDTCORLogDebug(@"Applying a transformer to event %@", event); - transformedEvent = [transformer transform:transformedEvent]; - if (!transformedEvent) { - completion(NO, nil); - return; - } - } else { - GDTCORLogError(GDTCORMCETransformerDoesntImplementTransform, - @"Transformer doesn't implement transform: %@", transformer); - completion(NO, nil); - return; - } - } - - id<GDTCORStorageProtocol> storage = - [GDTCORRegistrar sharedInstance].targetToStorage[@(event.target)]; - - [storage storeEvent:transformedEvent onComplete:hadOriginalCompletion ? completion : nil]; - - // The work is done, cancel the background task if it's valid. - [[GDTCORApplication sharedApplication] endBackgroundTask:bgID]; - bgID = GDTCORBackgroundIdentifierInvalid; - }); -} - -#pragma mark - GDTCORLifecycleProtocol - -- (void)appWillTerminate:(GDTCORApplication *)application { - // Flush the queue immediately. - dispatch_sync(_eventWritingQueue, ^{ - }); -} - -@end diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransport.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransport.m deleted file mode 100644 index 6c6af23..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransport.m +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Public/GDTCORTransport.h" -#import "GDTCORLibrary/Private/GDTCORTransport_Private.h" - -#import <GoogleDataTransport/GDTCORAssert.h> -#import <GoogleDataTransport/GDTCORClock.h> -#import <GoogleDataTransport/GDTCOREvent.h> - -#import "GDTCORLibrary/Private/GDTCORTransformer.h" - -@implementation GDTCORTransport - -- (nullable instancetype)initWithMappingID:(NSString *)mappingID - transformers: - (nullable NSArray<id<GDTCOREventTransformer>> *)transformers - target:(NSInteger)target { - GDTCORAssert(mappingID.length > 0, @"A mapping ID cannot be nil or empty"); - GDTCORAssert(target > 0, @"A target cannot be negative or 0"); - if (mappingID == nil || mappingID.length == 0 || target <= 0) { - return nil; - } - self = [super init]; - if (self) { - _mappingID = mappingID; - _transformers = transformers; - _target = target; - _transformerInstance = [GDTCORTransformer sharedInstance]; - } - GDTCORLogDebug(@"Transport object created. mappingID:%@ transformers:%@ target:%ld", mappingID, - transformers, (long)target); - return self; -} - -- (void)sendTelemetryEvent:(GDTCOREvent *)event - onComplete: - (void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion { - event.qosTier = GDTCOREventQoSTelemetry; - [self sendEvent:event onComplete:completion]; -} - -- (void)sendDataEvent:(GDTCOREvent *)event - onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion { - GDTCORAssert(event.qosTier != GDTCOREventQoSTelemetry, @"Use -sendTelemetryEvent, please."); - [self sendEvent:event onComplete:completion]; -} - -- (void)sendTelemetryEvent:(GDTCOREvent *)event { - [self sendTelemetryEvent:event onComplete:nil]; -} - -- (void)sendDataEvent:(GDTCOREvent *)event { - [self sendDataEvent:event onComplete:nil]; -} - -- (GDTCOREvent *)eventForTransport { - return [[GDTCOREvent alloc] initWithMappingID:_mappingID target:_target]; -} - -#pragma mark - Private helper methods - -/** Sends the given event through the transport pipeline. - * - * @param event The event to send. - * @param completion A block that will be called when the event has been written or dropped. - */ -- (void)sendEvent:(GDTCOREvent *)event - onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion { - // TODO: Determine if sending an event before registration is allowed. - GDTCORAssert(event, @"You can't send a nil event"); - GDTCOREvent *copiedEvent = [event copy]; - copiedEvent.clockSnapshot = [GDTCORClock snapshot]; - [self.transformerInstance transformEvent:copiedEvent - withTransformers:_transformers - onComplete:completion]; -} - -@end diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadCoordinator.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadCoordinator.m deleted file mode 100644 index 639ecb0..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadCoordinator.m +++ /dev/null @@ -1,285 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Private/GDTCORUploadCoordinator.h" - -#import <GoogleDataTransport/GDTCORAssert.h> -#import <GoogleDataTransport/GDTCORClock.h> -#import <GoogleDataTransport/GDTCORConsoleLogger.h> -#import <GoogleDataTransport/GDTCORReachability.h> - -#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h" - -@implementation GDTCORUploadCoordinator - -+ (instancetype)sharedInstance { - static GDTCORUploadCoordinator *sharedUploader; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedUploader = [[GDTCORUploadCoordinator alloc] init]; - [sharedUploader startTimer]; - }); - return sharedUploader; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _coordinationQueue = - dispatch_queue_create("com.google.GDTCORUploadCoordinator", DISPATCH_QUEUE_SERIAL); - _registrar = [GDTCORRegistrar sharedInstance]; - _timerInterval = 30 * NSEC_PER_SEC; - _timerLeeway = 5 * NSEC_PER_SEC; - _targetToInFlightPackages = [[NSMutableDictionary alloc] init]; - } - return self; -} - -- (void)forceUploadForTarget:(GDTCORTarget)target { - dispatch_async(_coordinationQueue, ^{ - GDTCORLogDebug(@"Forcing an upload of target %ld", (long)target); - GDTCORUploadConditions conditions = [self uploadConditions]; - conditions |= GDTCORUploadConditionHighPriority; - [self uploadTargets:@[ @(target) ] conditions:conditions]; - }); -} - -#pragma mark - Private helper methods - -/** Starts a timer that checks whether or not events can be uploaded at regular intervals. It will - * check the next-upload clocks of all targets to determine if an upload attempt can be made. - */ -- (void)startTimer { - dispatch_sync(_coordinationQueue, ^{ - self->_timer = - dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, self->_coordinationQueue); - dispatch_source_set_timer(self->_timer, DISPATCH_TIME_NOW, self->_timerInterval, - self->_timerLeeway); - dispatch_source_set_event_handler(self->_timer, ^{ - if (![[GDTCORApplication sharedApplication] isRunningInBackground]) { - GDTCORUploadConditions conditions = [self uploadConditions]; - GDTCORLogDebug(@"%@", @"Upload timer fired"); - [self uploadTargets:[self.registrar.targetToUploader allKeys] conditions:conditions]; - } - }); - GDTCORLogDebug(@"%@", @"Upload timer started"); - dispatch_resume(self->_timer); - }); -} - -/** Stops the currently running timer. */ -- (void)stopTimer { - if (_timer) { - dispatch_source_cancel(_timer); - } -} - -/** Triggers the uploader implementations for the given targets to upload. - * - * @param targets An array of targets to trigger. - * @param conditions The set of upload conditions. - */ -- (void)uploadTargets:(NSArray<NSNumber *> *)targets conditions:(GDTCORUploadConditions)conditions { - dispatch_async(_coordinationQueue, ^{ - if ((conditions & GDTCORUploadConditionNoNetwork) == GDTCORUploadConditionNoNetwork) { - return; - } - for (NSNumber *target in targets) { - // Don't trigger uploads for targets that have an in-flight package already. - if (self->_targetToInFlightPackages[target]) { - GDTCORLogDebug(@"Target %@ will not upload, there's an upload in flight", target); - continue; - } - // Ask the uploader if they can upload and do so, if it can. - id<GDTCORUploader> uploader = self.registrar.targetToUploader[target]; - if ([uploader readyToUploadTarget:target.intValue conditions:conditions]) { - id<GDTCORPrioritizer> prioritizer = self.registrar.targetToPrioritizer[target]; - GDTCORUploadPackage *package = [prioritizer uploadPackageWithTarget:target.intValue - conditions:conditions]; - if (package.events.count) { - self->_targetToInFlightPackages[target] = package; - GDTCORLogDebug(@"Package of %ld events is being handed over to an uploader", - (long)package.events.count); - [uploader uploadPackage:package]; - } else { - [package completeDelivery]; - } - } - GDTCORLogDebug(@"Target %@ is not ready to upload", target); - } - }); -} - -/** Returns the registered storage for the given NSNumber wrapped GDTCORTarget. - * - * @param target The NSNumber wrapping of a GDTCORTarget to find the storage instance of. - * @return The storage instance for the given target. - */ -- (nullable id<GDTCORStorageProtocol>)storageForTarget:(NSNumber *)target { - id<GDTCORStorageProtocol> storage = [GDTCORRegistrar sharedInstance].targetToStorage[target]; - GDTCORAssert(storage, @"A storage must be registered for target %@", target); - return storage; -} - -/** Returns the current upload conditions after making determinations about the network connection. - * - * @return The current upload conditions. - */ -- (GDTCORUploadConditions)uploadConditions { -#if TARGET_OS_WATCH - return GDTCORUploadConditionNoNetwork; -#else - SCNetworkReachabilityFlags currentFlags = [GDTCORReachability currentFlags]; - BOOL reachable = - (currentFlags & kSCNetworkReachabilityFlagsReachable) == kSCNetworkReachabilityFlagsReachable; - BOOL connectionRequired = (currentFlags & kSCNetworkReachabilityFlagsConnectionRequired) == - kSCNetworkReachabilityFlagsConnectionRequired; - BOOL networkConnected = reachable && !connectionRequired; - - if (!networkConnected) { - return GDTCORUploadConditionNoNetwork; - } - - BOOL isWWAN = GDTCORReachabilityFlagsContainWWAN(currentFlags); - if (isWWAN) { - return GDTCORUploadConditionMobileData; - } else { - return GDTCORUploadConditionWifiData; - } -#endif -} - -#pragma mark - NSSecureCoding support - -/** The NSKeyedCoder key for the targetToInFlightPackages property. */ -static NSString *const ktargetToInFlightPackagesKey = - @"GDTCORUploadCoordinatortargetToInFlightPackages"; - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - GDTCORUploadCoordinator *sharedCoordinator = [GDTCORUploadCoordinator sharedInstance]; - dispatch_sync(sharedCoordinator->_coordinationQueue, ^{ - @try { - NSSet *classes = - [NSSet setWithObjects:[NSMutableDictionary class], [GDTCORUploadPackage class], nil]; - sharedCoordinator->_targetToInFlightPackages = - [aDecoder decodeObjectOfClasses:classes forKey:ktargetToInFlightPackagesKey]; - - } @catch (NSException *exception) { - sharedCoordinator->_targetToInFlightPackages = [NSMutableDictionary dictionary]; - } - }); - return sharedCoordinator; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - dispatch_sync(_coordinationQueue, ^{ - // All packages that have been given to uploaders need to be tracked so that their expiration - // timers can be called. - if (self->_targetToInFlightPackages.count > 0) { - [aCoder encodeObject:self->_targetToInFlightPackages forKey:ktargetToInFlightPackagesKey]; - } - }); -} - -#pragma mark - GDTCORLifecycleProtocol - -- (void)appWillForeground:(GDTCORApplication *)app { - // -startTimer is thread-safe. - [self startTimer]; -} - -- (void)appWillBackground:(GDTCORApplication *)app { - dispatch_sync(_coordinationQueue, ^{ - [self stopTimer]; - }); -} - -- (void)appWillTerminate:(GDTCORApplication *)application { - dispatch_sync(_coordinationQueue, ^{ - [self stopTimer]; - }); -} - -#pragma mark - GDTCORUploadPackageProtocol - -- (void)packageDelivered:(GDTCORUploadPackage *)package successful:(BOOL)successful { - if (!_coordinationQueue) { - return; - } - dispatch_async(_coordinationQueue, ^{ - NSNumber *targetNumber = @(package.target); - NSMutableDictionary<NSNumber *, GDTCORUploadPackage *> *targetToInFlightPackages = - self->_targetToInFlightPackages; - GDTCORRegistrar *registrar = self->_registrar; - if (targetToInFlightPackages) { - [targetToInFlightPackages removeObjectForKey:targetNumber]; - } - NSSet<GDTCOREvent *> *packageEvents = [package.events copy]; - if (registrar) { - id<GDTCORPrioritizer> prioritizer = registrar.targetToPrioritizer[targetNumber]; - if (!prioritizer) { - GDTCORLogError(GDTCORMCEPrioritizerError, - @"A prioritizer should be registered for this target: %@", targetNumber); - } - if ([prioritizer respondsToSelector:@selector(packageDelivered:successful:)]) { - [prioritizer packageDelivered:[package copy] successful:successful]; - } - } - if (successful && packageEvents.count) { - NSMutableSet *eventIDs = [[NSMutableSet alloc] init]; - for (GDTCOREvent *event in packageEvents) { - NSNumber *eventID = event.eventID; - if (eventID != nil) { - [eventIDs addObject:eventID]; - } else { - GDTCORLogDebug(@"An event was missing its ID: %@", event); - } - } - [[self storageForTarget:@(package.target)] removeEvents:eventIDs]; - } - }); -} - -- (void)packageExpired:(GDTCORUploadPackage *)package { - if (!_coordinationQueue) { - return; - } - dispatch_async(_coordinationQueue, ^{ - NSNumber *targetNumber = @(package.target); - NSMutableDictionary<NSNumber *, GDTCORUploadPackage *> *targetToInFlightPackages = - self->_targetToInFlightPackages; - GDTCORRegistrar *registrar = self->_registrar; - if (targetToInFlightPackages) { - [targetToInFlightPackages removeObjectForKey:targetNumber]; - } - if (registrar) { - id<GDTCORPrioritizer> prioritizer = registrar.targetToPrioritizer[targetNumber]; - id<GDTCORUploader> uploader = registrar.targetToUploader[targetNumber]; - if ([prioritizer respondsToSelector:@selector(packageExpired:)]) { - [prioritizer packageExpired:package]; - } - if ([uploader respondsToSelector:@selector(packageExpired:)]) { - [uploader packageExpired:package]; - } - } - }); -} - -@end diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadPackage.m b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadPackage.m deleted file mode 100644 index 38b7a7c..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadPackage.m +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Public/GDTCORUploadPackage.h" - -#import <GoogleDataTransport/GDTCORClock.h> -#import <GoogleDataTransport/GDTCORConsoleLogger.h> - -#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h" -#import "GDTCORLibrary/Private/GDTCORUploadCoordinator.h" -#import "GDTCORLibrary/Private/GDTCORUploadPackage_Private.h" - -/** A class that holds a weak reference to an upload package, for use by the package's NSTimer. */ -@interface GDTCORUploadPackageTimerHolder : NSObject - -/** The upload package. */ -@property(weak, nonatomic) GDTCORUploadPackage *package; - -@end - -@implementation GDTCORUploadPackageTimerHolder - -/** Calls checkIfPackageIsExpired on the package if non-nil. Invalidates if the package is nil. - * - * @param timer The timer instance calling this method. - */ -- (void)timerFired:(NSTimer *)timer { - if (_package) { - [_package checkIfPackageIsExpired]; - } else { - [timer invalidate]; - } -} - -@end - -@implementation GDTCORUploadPackage { - /** If YES, the package's -completeDelivery method has been called. */ - BOOL _isDelivered; - - /** If YES, is being handled by the handler. */ - BOOL _isHandled; - - /** A timer that will regularly check to see whether this package has expired or not. */ - NSTimer *_expirationTimer; -} - -- (instancetype)initWithTarget:(GDTCORTarget)target { - self = [super init]; - if (self) { - _target = target; - _storage = [GDTCORRegistrar sharedInstance].targetToStorage[@(target)]; - _deliverByTime = [GDTCORClock clockSnapshotInTheFuture:180000]; - _handler = [GDTCORUploadCoordinator sharedInstance]; - GDTCORUploadPackageTimerHolder *holder = [[GDTCORUploadPackageTimerHolder alloc] init]; - holder.package = self; - _expirationTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 - target:holder - selector:@selector(timerFired:) - userInfo:nil - repeats:YES]; - } - GDTCORLogDebug(@"Upload package created %@", self); - return self; -} - -- (instancetype)copy { - GDTCORUploadPackage *newPackage = [[GDTCORUploadPackage alloc] init]; - newPackage->_target = _target; - newPackage->_storage = _storage; - newPackage->_deliverByTime = _deliverByTime; - newPackage->_handler = _handler; - GDTCORUploadPackageTimerHolder *holder = [[GDTCORUploadPackageTimerHolder alloc] init]; - holder.package = newPackage; - newPackage->_expirationTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 - target:holder - selector:@selector(timerFired:) - userInfo:nil - repeats:YES]; - newPackage->_events = [_events copy]; - GDTCORLogDebug(@"Copying UploadPackage %@ to %@", self, newPackage); - return newPackage; -} - -- (NSUInteger)hash { - return [_events hash]; -} - -- (BOOL)isEqual:(id)object { - return [self hash] == [object hash]; -} - -- (void)dealloc { - [_expirationTimer invalidate]; -} - -- (void)completeDelivery { - if (_isDelivered) { - GDTCORLogError(GDTCORMCEDeliverTwice, @"%@", - @"It's an API violation to call -completeDelivery twice."); - } - _isDelivered = YES; - [_expirationTimer invalidate]; - if (!_isHandled && _handler && - [_handler respondsToSelector:@selector(packageDelivered:successful:)]) { - _isHandled = YES; - [_handler packageDelivered:[self copy] successful:YES]; - } - GDTCORLogDebug(@"Upload package delivered: %@", self); -} - -- (void)retryDeliveryInTheFuture { - [_expirationTimer invalidate]; - if (!_isHandled && _handler && - [_handler respondsToSelector:@selector(packageDelivered:successful:)]) { - _isHandled = YES; - [_handler packageDelivered:[self copy] successful:NO]; - } - GDTCORLogDebug(@"Upload package will retry in the future: %@", self); -} - -- (void)checkIfPackageIsExpired { - if ([[GDTCORClock snapshot] isAfter:_deliverByTime]) { - [_expirationTimer invalidate]; - if (_handler && [_handler respondsToSelector:@selector(packageExpired:)]) { - _isHandled = YES; - GDTCORLogDebug(@"Upload package expired: %@", self); - [_handler packageExpired:self]; - } - } -} - -#pragma mark - NSSecureCoding - -/** The keyed archiver key for the events property. */ -static NSString *const kEventsKey = @"GDTCORUploadPackageEventsKey"; - -/** The keyed archiver key for the _isHandled property. */ -static NSString *const kDeliverByTimeKey = @"GDTCORUploadPackageDeliveryByTimeKey"; - -/** The keyed archiver key for the _isHandled ivar. */ -static NSString *const kIsHandledKey = @"GDTCORUploadPackageIsHandledKey"; - -/** The keyed archiver key for the handler property. */ -static NSString *const kHandlerKey = @"GDTCORUploadPackageHandlerKey"; - -/** The keyed archiver key for the target property. */ -static NSString *const kTargetKey = @"GDTCORUploadPackageTargetKey"; - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (void)encodeWithCoder:(nonnull NSCoder *)aCoder { - [aCoder encodeObject:_events forKey:kEventsKey]; - [aCoder encodeObject:_deliverByTime forKey:kDeliverByTimeKey]; - [aCoder encodeBool:_isHandled forKey:kIsHandledKey]; - [aCoder encodeObject:_handler forKey:kHandlerKey]; - [aCoder encodeInteger:_target forKey:kTargetKey]; -} - -- (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder { - // Sets a global translation mapping to decode GDTCORStoredEvent objects encoded as instances of - // GDTCOREvent instead. - [NSKeyedUnarchiver setClass:[GDTCOREvent class] forClassName:@"GDTCORStoredEvent"]; - - GDTCORTarget target = [aDecoder decodeIntegerForKey:kTargetKey]; - self = [self initWithTarget:target]; - if (self) { - NSSet *classes = [NSSet setWithObjects:[NSSet class], [GDTCOREvent class], nil]; - _events = [aDecoder decodeObjectOfClasses:classes forKey:kEventsKey]; - _deliverByTime = [aDecoder decodeObjectOfClass:[GDTCORClock class] forKey:kDeliverByTimeKey]; - _isHandled = [aDecoder decodeBoolForKey:kIsHandledKey]; - // _handler isn't technically NSSecureCoding, because we don't know the class of this object. - // but it gets decoded anyway. - } - return self; -} - -@end diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORDataFuture.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORDataFuture.h deleted file mode 100644 index 685cf2b..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORDataFuture.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -/** This class represents a future data object, determined at instantiation time. */ -@interface GDTCORDataFuture : NSObject <NSSecureCoding> - -/** If not nil, this data future was instantiated with this file URL. */ -@property(nullable, readonly, nonatomic) NSURL *fileURL; - -/** Initializes an instance with the given the fileURL. - * - * @param fileURL The fileURL containing the data to return in -data. - * @return An instance of this class. - */ -- (instancetype)initWithFileURL:(NSURL *)fileURL; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h deleted file mode 100644 index 485d6bb..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <GoogleDataTransport/GDTCOREvent.h> - -#import <GoogleDataTransport/GDTCORClock.h> - -NS_ASSUME_NONNULL_BEGIN - -@interface GDTCOREvent () - -/** The unique ID of the event. This property is for testing only. */ -@property(nonatomic, readwrite) NSNumber *eventID; - -/** The GDT relative file path of the event. */ -@property(nullable, nonatomic, readonly) NSString *GDTFilePath; - -/** Writes [dataObject transportBytes] to the given URL, populates fileURL with the filename, then - * nils the dataObject property. This method should not be called twice on the same event. - * - * @param filePath The GDTCORRootDirectory-relative path that dataObject will be written to. - * @param error If populated, the error encountered during writing to disk. - * @return YES if writing dataObject to disk was successful, NO otherwise. - */ -- (BOOL)writeToGDTPath:(NSString *)filePath error:(NSError **)error; - -/** Generates incrementing event IDs, stored in a file in the app's cache. - * - * @return An event ID that is incremented based on a number in a file stored in the app cache. - */ -+ (NSNumber *)nextEventID; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage.h deleted file mode 100644 index 837c3ea..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import <GoogleDataTransport/GDTCORLifecycle.h> -#import <GoogleDataTransport/GDTCORStorageProtocol.h> - -@class GDTCOREvent; -@class GDTCORUploadCoordinator; - -NS_ASSUME_NONNULL_BEGIN - -/** Manages the storage of events. This class is thread-safe. */ -@interface GDTCORFlatFileStorage - : NSObject <NSSecureCoding, GDTCORStorageProtocol, GDTCORLifecycleProtocol> - -/** The queue on which all storage work will occur. */ -@property(nonatomic) dispatch_queue_t storageQueue; - -/** A map of targets to a set of stored events. */ -@property(nonatomic) - NSMutableDictionary<NSNumber *, NSMutableSet<GDTCOREvent *> *> *targetToEventSet; - -/** All the events that have been stored. */ -@property(readonly, nonatomic) NSMutableDictionary<NSNumber *, GDTCOREvent *> *storedEvents; - -/** The upload coordinator instance used by this storage instance. */ -@property(nonatomic) GDTCORUploadCoordinator *uploadCoordinator; - -/** Creates and/or returns the storage singleton. - * - * @return The storage singleton. - */ -+ (instancetype)sharedInstance; - -/** Returns the path to the keyed archive of the singleton. This is where the singleton is saved - * to disk during certain app lifecycle events. - * - * @return File path to serialized singleton. - */ -+ (NSString *)archivePath; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability_Private.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability_Private.h deleted file mode 100644 index d577dbb..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability_Private.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Public/GDTCORReachability.h" - -@interface GDTCORReachability () - -#if !TARGET_OS_WATCH -/** Allows manually setting the flags for testing purposes. */ -@property(nonatomic, readwrite) SCNetworkReachabilityFlags flags; -#endif - -/** Creates/returns the singleton instance of this class. - * - * @return The singleton instance of this class. - */ -+ (instancetype)sharedInstance; - -@end diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h deleted file mode 100644 index 8b29839..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <GoogleDataTransport/GDTCORRegistrar.h> - -@interface GDTCORRegistrar () - -NS_ASSUME_NONNULL_BEGIN - -/** The concurrent queue on which all registration occurs. */ -@property(nonatomic, readonly) dispatch_queue_t registrarQueue; - -/** A map of targets to backend implementations. */ -@property(atomic, readonly) NSMutableDictionary<NSNumber *, id<GDTCORUploader>> *targetToUploader; - -/** A map of targets to prioritizer implementations. */ -@property(atomic, readonly) - NSMutableDictionary<NSNumber *, id<GDTCORPrioritizer>> *targetToPrioritizer; - -/** A map of targets to storage instances. */ -@property(atomic, readonly) - NSMutableDictionary<NSNumber *, id<GDTCORStorageProtocol>> *targetToStorage; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer.h deleted file mode 100644 index e2dbff1..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import <GoogleDataTransport/GDTCORLifecycle.h> - -@class GDTCOREvent; - -@protocol GDTCOREventTransformer; - -NS_ASSUME_NONNULL_BEGIN - -/** Manages the transforming of events. It's desirable for this to be its own class - * because running all events through a single instance ensures that transformers are thread-safe. - * Having a per-transport queue to run on isn't sufficient because transformer objects could - * maintain state (or at least, there's nothing to stop them from doing that) and the same instances - * may be used across multiple instances. - */ -@interface GDTCORTransformer : NSObject <GDTCORLifecycleProtocol> - -/** Instantiates or returns the event transformer singleton. - * - * @return The singleton instance of the event transformer. - */ -+ (instancetype)sharedInstance; - -/** Writes the result of applying the given transformers' -transform method on the given event. - * - * @note If the app is suspended, a background task will be created to complete work in-progress, - * but this method will not send any further events until the app is resumed. - * - * @param event The event to apply transformers on. - * @param transformers The list of transformers to apply. - * @param completion A block to run when an event was written to disk or dropped. - */ -- (void)transformEvent:(GDTCOREvent *)event - withTransformers:(nullable NSArray<id<GDTCOREventTransformer>> *)transformers - onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer_Private.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer_Private.h deleted file mode 100644 index 4adcf93..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer_Private.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Private/GDTCORTransformer.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface GDTCORTransformer () - -/** The queue on which all work will occur. */ -@property(nonatomic) dispatch_queue_t eventWritingQueue; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransport_Private.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransport_Private.h deleted file mode 100644 index 71f73a6..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransport_Private.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <GoogleDataTransport/GDTCORTransport.h> - -@class GDTCORTransformer; - -NS_ASSUME_NONNULL_BEGIN - -@interface GDTCORTransport () - -/** The mapping identifier that the target backend will use to map the transport bytes to proto. */ -@property(nonatomic) NSString *mappingID; - -/** The transformers that will operate on events sent by this transport. */ -@property(nonatomic) NSArray<id<GDTCOREventTransformer>> *transformers; - -/** The target backend of this transport. */ -@property(nonatomic) NSInteger target; - -/** The transformer instance to used to transform events. Allows injecting a fake during testing. */ -@property(nonatomic) GDTCORTransformer *transformerInstance; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h deleted file mode 100644 index b678ef2..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import <GoogleDataTransport/GDTCORLifecycle.h> -#import <GoogleDataTransport/GDTCORRegistrar.h> - -#import "GDTCORLibrary/Private/GDTCORUploadPackage_Private.h" - -@class GDTCORClock; - -NS_ASSUME_NONNULL_BEGIN - -/** This class connects storage and uploader implementations, providing events to an uploader - * and informing the storage what events were successfully uploaded or not. - */ -@interface GDTCORUploadCoordinator - : NSObject <NSSecureCoding, GDTCORLifecycleProtocol, GDTCORUploadPackageProtocol> - -/** The queue on which all upload coordination will occur. Also used by a dispatch timer. */ -/** Creates and/or returrns the singleton. - * - * @return The singleton instance of this class. - */ -+ (instancetype)sharedInstance; - -/** The queue on which all upload coordination will occur. */ -@property(nonatomic, readonly) dispatch_queue_t coordinationQueue; - -/** A timer that will causes regular checks for events to upload. */ -@property(nonatomic, readonly) dispatch_source_t timer; - -/** The interval the timer will fire. */ -@property(nonatomic, readonly) uint64_t timerInterval; - -/** Some leeway given to libdispatch for the timer interval event. */ -@property(nonatomic, readonly) uint64_t timerLeeway; - -/** The map of targets to in-flight packages. */ -@property(nonatomic, readonly) - NSMutableDictionary<NSNumber *, GDTCORUploadPackage *> *targetToInFlightPackages; - -/** The registrar object the coordinator will use. Generally used for testing. */ -@property(nonatomic) GDTCORRegistrar *registrar; - -/** Forces the backend specified by the target to upload the provided set of events. This should - * only ever happen when the QoS tier of an event requires it. - * - * @param target The target that should force an upload. - */ -- (void)forceUploadForTarget:(GDTCORTarget)target; - -/** Starts the upload timer. */ -- (void)startTimer; - -/** Stops the upload timer from running. */ -- (void)stopTimer; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadPackage_Private.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadPackage_Private.h deleted file mode 100644 index 1ab6432..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadPackage_Private.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <GoogleDataTransport/GDTCORUploadPackage.h> - -@interface GDTCORUploadPackage () - -/** The storage object this upload package will use to resolve event hashes to files. */ -@property(nonatomic) id<GDTCORStorageProtocol> storage; - -/** A handler that will receive callbacks for certain events. */ -@property(nonatomic) id<NSSecureCoding, GDTCORUploadPackageProtocol> handler; - -/** Checks if the package is expired and calls -packageExpired: on the handler if necessary. */ -- (void)checkIfPackageIsExpired; - -@end diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORAssert.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORAssert.h deleted file mode 100644 index c0f9712..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORAssert.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import <GoogleDataTransport/GDTCORConsoleLogger.h> - -NS_ASSUME_NONNULL_BEGIN - -/** A block type that could be run instead of normal assertion logging. No return type, no params. - */ -typedef void (^GDTCORAssertionBlock)(void); - -/** Returns the result of executing a soft-linked method present in unit tests that allows a block - * to be run instead of normal assertion logging. This helps ameliorate issues with catching - * exceptions that occur on a dispatch_queue. - * - * @return A block that can be run instead of normal assert printing. - */ -FOUNDATION_EXPORT GDTCORAssertionBlock _Nullable GDTCORAssertionBlockToRunInstead(void); - -#if defined(NS_BLOCK_ASSERTIONS) - -#define GDTCORAssert(condition, ...) \ - do { \ - } while (0); - -#define GDTCORFatalAssert(condition, ...) \ - do { \ - } while (0); - -#else // defined(NS_BLOCK_ASSERTIONS) - -/** Asserts using a console log, unless a block was specified to be run instead. - * - * @param condition The condition you'd expect to be YES. - */ -#define GDTCORAssert(condition, format, ...) \ - do { \ - __PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS \ - if (__builtin_expect(!(condition), 0)) { \ - GDTCORAssertionBlock assertionBlock = GDTCORAssertionBlockToRunInstead(); \ - if (assertionBlock) { \ - assertionBlock(); \ - } else { \ - NSString *__assert_file__ = [NSString stringWithUTF8String:__FILE__]; \ - __assert_file__ = __assert_file__ ? __assert_file__ : @"<Unknown File>"; \ - GDTCORLogAssert(NO, __assert_file__, __LINE__, format, ##__VA_ARGS__); \ - __PRAGMA_POP_NO_EXTRA_ARG_WARNINGS \ - } \ - } \ - } while (0); - -/** Asserts by logging to the console and throwing an exception if NS_BLOCK_ASSERTIONS is not - * defined. - * - * @param condition The condition you'd expect to be YES. - */ -#define GDTCORFatalAssert(condition, format, ...) \ - do { \ - __PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS \ - if (__builtin_expect(!(condition), 0)) { \ - GDTCORAssertionBlock assertionBlock = GDTCORAssertionBlockToRunInstead(); \ - if (assertionBlock) { \ - assertionBlock(); \ - } else { \ - NSString *__assert_file__ = [NSString stringWithUTF8String:__FILE__]; \ - __assert_file__ = __assert_file__ ? __assert_file__ : @"<Unknown File>"; \ - GDTCORLogAssert(YES, __assert_file__, __LINE__, format, ##__VA_ARGS__); \ - [[NSAssertionHandler currentHandler] handleFailureInMethod:_cmd \ - object:self \ - file:__assert_file__ \ - lineNumber:__LINE__ \ - description:format, ##__VA_ARGS__]; \ - __PRAGMA_POP_NO_EXTRA_ARG_WARNINGS \ - } \ - } \ - } while (0); - -#endif // defined(NS_BLOCK_ASSERTIONS) - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORClock.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORClock.h deleted file mode 100644 index 01de21a..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORClock.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -/** This class manages the device clock and produces snapshots of the current time. */ -@interface GDTCORClock : NSObject <NSSecureCoding> - -/** The wallclock time, UTC, in milliseconds. */ -@property(nonatomic, readonly) int64_t timeMillis; - -/** The offset from UTC in seconds. */ -@property(nonatomic, readonly) int64_t timezoneOffsetSeconds; - -/** The kernel boot time when this clock was created. */ -@property(nonatomic, readonly) int64_t kernelBootTime; - -/** The device uptime when this clock was created. */ -@property(nonatomic, readonly) int64_t uptime; - -/** Creates a GDTCORClock object using the current time and offsets. - * - * @return A new GDTCORClock object representing the current time state. - */ -+ (instancetype)snapshot; - -/** Creates a GDTCORClock object representing a time in the future, relative to now. - * - * @param millisInTheFuture The millis in the future from now this clock should represent. - * @return An instance representing a future time. - */ -+ (instancetype)clockSnapshotInTheFuture:(uint64_t)millisInTheFuture; - -/** Compares one clock with another, returns YES if the caller is after the parameter. - * - * @return YES if the calling clock's time is after the given clock's time. - */ -- (BOOL)isAfter:(GDTCORClock *)otherClock; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORConsoleLogger.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORConsoleLogger.h deleted file mode 100644 index d306f18..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORConsoleLogger.h +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -/** The current logging level. This value and higher will be printed. Declared as volatile to make - * getting and setting atomic. - */ -FOUNDATION_EXPORT volatile NSInteger GDTCORConsoleLoggerLoggingLevel; - -/** A list of logging levels that GDT supports. */ -typedef NS_ENUM(NSInteger, GDTCORLoggingLevel) { - - /** Causes all logs to be printed. */ - GDTCORLoggingLevelDebug = 1, - - /** Causes all non-debug logs to be printed. */ - GDTCORLoggingLevelVerbose = 2, - - /** Causes warnings and errors to be printed. */ - GDTCORLoggingLevelWarnings = 3, - - /** Causes errors to be printed. This is the default value. */ - GDTCORLoggingLevelErrors = 4 -}; - -/** A list of message codes to print in the logger that help to correspond printed messages with - * code locations. - * - * Prefixes: - * - MCD => MessageCodeDebug - * - MCW => MessageCodeWarning - * - MCE => MessageCodeError - */ -typedef NS_ENUM(NSInteger, GDTCORMessageCode) { - - /** For debug logs. */ - GDTCORMCDDebugLog = 0, - - /** For warning messages concerning transportBytes: not being implemented by a data object. */ - GDTCORMCWDataObjectMissingBytesImpl = 1, - - /** For warning messages concerning a failed event upload. */ - GDTCORMCWUploadFailed = 2, - - /** For warning messages concerning a forced event upload. */ - GDTCORMCWForcedUpload = 3, - - /** For warning messages concerning a failed reachability call. */ - GDTCORMCWReachabilityFailed = 4, - - /** For warning messages concerning a database warning. */ - GDTCORMCWDatabaseWarning = 5, - - /** For warning messages concerning the reading of a event file. */ - GDTCORMCWFileReadError = 6, - - /** For error messages concerning transform: not being implemented by an event transformer. */ - GDTCORMCETransformerDoesntImplementTransform = 1000, - - /** For error messages concerning the creation of a directory failing. */ - GDTCORMCEDirectoryCreationError = 1001, - - /** For error messages concerning the writing of a event file. */ - GDTCORMCEFileWriteError = 1002, - - /** For error messages concerning the lack of a prioritizer for a given backend. */ - GDTCORMCEPrioritizerError = 1003, - - /** For error messages concerning a package delivery API violation. */ - GDTCORMCEDeliverTwice = 1004, - - /** For error messages concerning an error in an implementation of -transportBytes. */ - GDTCORMCETransportBytesError = 1005, - - /** For general purpose error messages in a dependency. */ - GDTCORMCEGeneralError = 1006, - - /** For fatal errors. Please go to https://github.com/firebase/firebase-ios-sdk/issues and open - * an issue if you encounter an error with this code. - */ - GDTCORMCEFatalAssertion = 1007, - - /** For error messages concerning the reading of a event file. */ - GDTCORMCEFileReadError = 1008, - - /** For errors related to running sqlite. */ - GDTCORMCEDatabaseError = 1009, -}; - -/** Prints the given code and format string to the console. - * - * @param code The message code describing the nature of the log. - * @param logLevel The log level of this log. - * @param format The format string. - */ -FOUNDATION_EXPORT -void GDTCORLog(GDTCORMessageCode code, GDTCORLoggingLevel logLevel, NSString *_Nonnull format, ...) - NS_FORMAT_FUNCTION(3, 4); - -/** Prints an assert log to the console. - * - * @param wasFatal Send YES if the assertion should be fatal, NO otherwise. - * @param file The file in which the failure occurred. - * @param line The line number of the failure. - * @param format The format string. - */ -FOUNDATION_EXPORT void GDTCORLogAssert(BOOL wasFatal, - NSString *_Nonnull file, - NSInteger line, - NSString *_Nullable format, - ...) NS_FORMAT_FUNCTION(4, 5); - -/** Returns the string that represents some message code. - * - * @param code The code to convert to a string. - * @return The string representing the message code. - */ -FOUNDATION_EXPORT NSString *_Nonnull GDTCORMessageCodeEnumToString(GDTCORMessageCode code); - -#define GDTCORLogDebug(MESSAGE_FORMAT, ...) \ - GDTCORLog(GDTCORMCDDebugLog, GDTCORLoggingLevelDebug, MESSAGE_FORMAT, __VA_ARGS__); - -// A define to wrap GULLogWarning with slightly more convenient usage. -#define GDTCORLogWarning(MESSAGE_CODE, MESSAGE_FORMAT, ...) \ - GDTCORLog(MESSAGE_CODE, GDTCORLoggingLevelWarnings, MESSAGE_FORMAT, __VA_ARGS__); - -// A define to wrap GULLogError with slightly more convenient usage and a failing assert. -#define GDTCORLogError(MESSAGE_CODE, MESSAGE_FORMAT, ...) \ - GDTCORLog(MESSAGE_CODE, GDTCORLoggingLevelErrors, MESSAGE_FORMAT, __VA_ARGS__); diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREvent.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREvent.h deleted file mode 100644 index 4d6ffce..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREvent.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import <GoogleDataTransport/GDTCOREventDataObject.h> - -@class GDTCORClock; - -NS_ASSUME_NONNULL_BEGIN - -/** The different possible quality of service specifiers. High values indicate high priority. */ -typedef NS_ENUM(NSInteger, GDTCOREventQoS) { - /** The QoS tier wasn't set, and won't ever be sent. */ - GDTCOREventQoSUnknown = 0, - - /** This event is internal telemetry data that should not be sent on its own if possible. */ - GDTCOREventQoSTelemetry = 1, - - /** This event should be sent, but in a batch only roughly once per day. */ - GDTCOREventQoSDaily = 2, - - /** This event should be sent when requested by the uploader. */ - GDTCOREventQosDefault = 3, - - /** This event should be sent immediately along with any other data that can be batched. */ - GDTCOREventQoSFast = 4, - - /** This event should only be uploaded on wifi. */ - GDTCOREventQoSWifiOnly = 5, -}; - -@interface GDTCOREvent : NSObject <NSSecureCoding> - -/** The unique ID of the event. */ -@property(nonatomic, readonly) NSNumber *eventID; - -/** The mapping identifier, to allow backends to map the transport bytes to a proto. */ -@property(readonly, nonatomic) NSString *mappingID; - -/** The identifier for the backend this event will eventually be sent to. */ -@property(readonly, nonatomic) NSInteger target; - -/** The data object encapsulated in the transport of your choice, as long as it implements - * the GDTCOREventDataObject protocol. */ -@property(nullable, nonatomic) id<GDTCOREventDataObject> dataObject; - -/** The quality of service tier this event belongs to. */ -@property(nonatomic) GDTCOREventQoS qosTier; - -/** The clock snapshot at the time of the event. */ -@property(nonatomic) GDTCORClock *clockSnapshot; - -/** The resulting file URL when [dataObject -transportBytes] has been saved to disk.*/ -@property(nullable, readonly, nonatomic) NSURL *fileURL; - -/** Bytes that can be used by a prioritizer or uploader later on. It's the prioritizer or uploader's - * responsibility to serialize and deserialize these bytes. - */ -@property(nullable, nonatomic) NSData *customBytes; - -// Please use the designated initializer. -- (instancetype)init NS_UNAVAILABLE; - -/** Initializes an instance using the given mappingID. - * - * @param mappingID The mapping identifier. - * @param target The event's target identifier. - * @return An instance of this class. - */ -- (nullable instancetype)initWithMappingID:(NSString *)mappingID - target:(NSInteger)target NS_DESIGNATED_INITIALIZER; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventDataObject.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventDataObject.h deleted file mode 100644 index 34ef624..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventDataObject.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -/** This protocol defines the common interface that event protos should implement regardless of the - * underlying transport technology (protobuf, nanopb, etc). - */ -@protocol GDTCOREventDataObject <NSObject> - -@required - -/** Returns the serialized proto bytes of the implementing event proto. - * - * @return the serialized proto bytes of the implementing event proto. - */ -- (NSData *)transportBytes; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventTransformer.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventTransformer.h deleted file mode 100644 index 29f9592..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventTransformer.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@class GDTCOREvent; - -NS_ASSUME_NONNULL_BEGIN - -/** Defines the API that event transformers must adopt. */ -@protocol GDTCOREventTransformer <NSObject> - -@required - -/** Transforms an event by applying some logic to it. Events returned can be nil, for example, in - * instances where the event should be sampled. - * - * @param event The event to transform. - * @return A transformed event, or nil if the transformation dropped the event. - */ -- (nullable GDTCOREvent *)transform:(GDTCOREvent *)event; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORLifecycle.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORLifecycle.h deleted file mode 100644 index a08a456..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORLifecycle.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import <GoogleDataTransport/GDTCORPlatform.h> - -@class GDTCOREvent; - -NS_ASSUME_NONNULL_BEGIN - -/** A protocol defining the lifecycle events objects in the library must respond to immediately. */ -@protocol GDTCORLifecycleProtocol <NSObject> - -@optional - -/** Indicates an imminent app termination in the rare occurrence when -applicationWillTerminate: has - * been called. - * - * @param app The GDTCORApplication instance. - */ -- (void)appWillTerminate:(GDTCORApplication *)app; - -/** Indicates that the app is moving to background and eventual suspension or the current UIScene is - * deactivating. - * - * @param app The GDTCORApplication instance. - */ -- (void)appWillBackground:(GDTCORApplication *)app; - -/** Indicates that the app is resuming operation or a UIScene is activating. - * - * @param app The GDTCORApplication instance. - */ -- (void)appWillForeground:(GDTCORApplication *)app; - -@end - -/** This class manages the library's response to app lifecycle events. - * - * When backgrounding, the library doesn't stop processing events, it's just that several background - * tasks will end up being created for every event that's sent, and the stateful objects of the - * library (GDTCORStorage and GDTCORUploadCoordinator instances) will deserialize themselves from - * and to disk before and after every operation, respectively. - */ -@interface GDTCORLifecycle : NSObject <GDTCORApplicationDelegate> - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPlatform.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPlatform.h deleted file mode 100644 index f44f39f..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPlatform.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#if !TARGET_OS_WATCH -#import <SystemConfiguration/SystemConfiguration.h> -#endif -#if TARGET_OS_IOS || TARGET_OS_TV -#import <UIKit/UIKit.h> -#elif TARGET_OS_OSX -#import <AppKit/AppKit.h> -#endif // TARGET_OS_IOS || TARGET_OS_TV - -#if TARGET_OS_IOS -#import <CoreTelephony/CTTelephonyNetworkInfo.h> -#endif - -NS_ASSUME_NONNULL_BEGIN - -/** The GoogleDataTransport library version. */ -FOUNDATION_EXPORT NSString *const kGDTCORVersion; - -/** A notification sent out if the app is backgrounding. */ -FOUNDATION_EXPORT NSString *const kGDTCORApplicationDidEnterBackgroundNotification; - -/** A notification sent out if the app is foregrounding. */ -FOUNDATION_EXPORT NSString *const kGDTCORApplicationWillEnterForegroundNotification; - -/** A notification sent out if the app is terminating. */ -FOUNDATION_EXPORT NSString *const kGDTCORApplicationWillTerminateNotification; - -/** The different possible network connection type. */ -typedef NS_ENUM(NSInteger, GDTCORNetworkType) { - GDTCORNetworkTypeUNKNOWN = 0, - GDTCORNetworkTypeWIFI = 1, - GDTCORNetworkTypeMobile = 2, -}; - -/** The different possible network connection mobile subtype. */ -typedef NS_ENUM(NSInteger, GDTCORNetworkMobileSubtype) { - GDTCORNetworkMobileSubtypeUNKNOWN = 0, - GDTCORNetworkMobileSubtypeGPRS = 1, - GDTCORNetworkMobileSubtypeEdge = 2, - GDTCORNetworkMobileSubtypeWCDMA = 3, - GDTCORNetworkMobileSubtypeHSDPA = 4, - GDTCORNetworkMobileSubtypeHSUPA = 5, - GDTCORNetworkMobileSubtypeCDMA1x = 6, - GDTCORNetworkMobileSubtypeCDMAEVDORev0 = 7, - GDTCORNetworkMobileSubtypeCDMAEVDORevA = 8, - GDTCORNetworkMobileSubtypeCDMAEVDORevB = 9, - GDTCORNetworkMobileSubtypeHRPD = 10, - GDTCORNetworkMobileSubtypeLTE = 11, -}; - -/** Returns a URL to the root directory under which all GDT-associated data must be saved. - * - * @return A URL to the root directory under which all GDT-associated data must be saved. - */ -NSURL *GDTCORRootDirectory(void); - -#if !TARGET_OS_WATCH -/** Compares flags with the WWAN reachability flag, if available, and returns YES if present. - * - * @param flags The set of reachability flags. - * @return YES if the WWAN flag is set, NO otherwise. - */ -BOOL GDTCORReachabilityFlagsContainWWAN(SCNetworkReachabilityFlags flags); -#endif - -/** Generates an enum message GDTCORNetworkType representing network connection type. - * - * @return A GDTCORNetworkType representing network connection type. - */ -GDTCORNetworkType GDTCORNetworkTypeMessage(void); - -/** Generates an enum message GDTCORNetworkMobileSubtype representing network connection mobile - * subtype. - * - * @return A GDTCORNetworkMobileSubtype representing network connection mobile subtype. - */ -GDTCORNetworkMobileSubtype GDTCORNetworkMobileSubTypeMessage(void); - -/** Writes the given object to the given fileURL and populates the given error if it fails. - * - * @param obj The object to encode. - * @param filePath The path to write the object to. Can be nil if you just need the data. - * @param error The error to populate if something goes wrong. - * @return The data of the archive. If error is nil, it's been written to disk. - */ -NSData *_Nullable GDTCOREncodeArchive(id<NSSecureCoding> obj, - NSString *_Nullable filePath, - NSError *_Nullable *error); - -/** Decodes an object of the given class from the given archive path or data and populates the given - * error if it fails. - * - * @param archiveClass The class of the archive's root object. - * @param archivePath The path to the archived data. Don't use with the archiveData param. - * @param archiveData The data to decode. Don't use with the archivePath param. - * @param error The error to populate if something goes wrong. - */ -id<NSSecureCoding> _Nullable GDTCORDecodeArchive(Class archiveClass, - NSString *_Nullable archivePath, - NSData *_Nullable archiveData, - NSError *_Nullable *error); - -/** A typedef identify background identifiers. */ -typedef volatile NSUInteger GDTCORBackgroundIdentifier; - -/** A background task's invalid sentinel value. */ -FOUNDATION_EXPORT const GDTCORBackgroundIdentifier GDTCORBackgroundIdentifierInvalid; - -#if TARGET_OS_IOS || TARGET_OS_TV -/** A protocol that wraps UIApplicationDelegate or NSObject protocol, depending on the platform. */ -@protocol GDTCORApplicationDelegate <UIApplicationDelegate> -#elif TARGET_OS_OSX -@protocol GDTCORApplicationDelegate <NSApplicationDelegate> -#else -@protocol GDTCORApplicationDelegate <NSObject> -#endif // TARGET_OS_IOS || TARGET_OS_TV - -@end - -/** A cross-platform application class. */ -@interface GDTCORApplication : NSObject <GDTCORApplicationDelegate> - -/** Flag to determine if the application is running in the background. */ -@property(atomic, readonly) BOOL isRunningInBackground; - -/** Creates and/or returns the shared application instance. - * - * @return The shared application instance. - */ -+ (nullable GDTCORApplication *)sharedApplication; - -/** Creates a background task with the returned identifier if on a suitable platform. - * - * @name name The name of the task, useful for debugging which background tasks are running. - * @param handler The handler block that is called if the background task expires. - * @return An identifier for the background task, or GDTCORBackgroundIdentifierInvalid if one - * couldn't be created. - */ -- (GDTCORBackgroundIdentifier)beginBackgroundTaskWithName:(NSString *)name - expirationHandler:(void (^__nullable)(void))handler; - -/** Ends the background task if the identifier is valid. - * - * @param bgID The background task to end. - */ -- (void)endBackgroundTask:(GDTCORBackgroundIdentifier)bgID; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPrioritizer.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPrioritizer.h deleted file mode 100644 index d1f6754..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPrioritizer.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import <GoogleDataTransport/GDTCOREvent.h> -#import <GoogleDataTransport/GDTCORLifecycle.h> -#import <GoogleDataTransport/GDTCORUploadPackage.h> - -NS_ASSUME_NONNULL_BEGIN - -/** Options that define a set of upload conditions. This is used to help minimize end user data - * consumption impact. - */ -typedef NS_OPTIONS(NSInteger, GDTCORUploadConditions) { - - /** An upload shouldn't be attempted, because there's no network. */ - GDTCORUploadConditionNoNetwork = 1 << 0, - - /** An upload would likely use mobile data. */ - GDTCORUploadConditionMobileData = 1 << 1, - - /** An upload would likely use wifi data. */ - GDTCORUploadConditionWifiData = 1 << 2, - - /** An upload uses some sort of network connection, but it's unclear which. */ - GDTCORUploadConditionUnclearConnection = 1 << 3, - - /** A high priority event has occurred. */ - GDTCORUploadConditionHighPriority = 1 << 4, -}; - -/** This protocol defines the common interface of event prioritization. Prioritizers are - * stateful objects that prioritize events upon insertion into storage and remain prepared to return - * a set of filenames to the storage system. - */ -@protocol GDTCORPrioritizer <NSObject, GDTCORLifecycleProtocol, GDTCORUploadPackageProtocol> - -@required - -/** Accepts an event and uses the event metadata to make choices on how to prioritize the event. - * This method exists as a way to help prioritize which events should be sent, which is dependent on - * the request proto structure of your backend. - * - * @param event The event to prioritize. - */ -- (void)prioritizeEvent:(GDTCOREvent *)event; - -/** Returns a set of events to upload given a set of conditions. - * - * @param target The target to create an upload package for. - * @param conditions A bit mask specifying the current upload conditions. - * @return An object to be used by the uploader to determine file URLs to upload with respect to the - * current conditions. - */ -- (GDTCORUploadPackage *)uploadPackageWithTarget:(GDTCORTarget)target - conditions:(GDTCORUploadConditions)conditions; - -@optional - -/** Saves the state of the prioritizer. */ -- (void)saveState; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORReachability.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORReachability.h deleted file mode 100644 index 7879b59..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORReachability.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#if !TARGET_OS_WATCH -#import <SystemConfiguration/SCNetworkReachability.h> -#endif - -NS_ASSUME_NONNULL_BEGIN - -/** This class helps determine upload conditions by determining connectivity. */ -@interface GDTCORReachability : NSObject -#if !TARGET_OS_WATCH -/** The current set flags indicating network conditions */ -+ (SCNetworkReachabilityFlags)currentFlags; -#endif - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORRegistrar.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORRegistrar.h deleted file mode 100644 index 63f82a7..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORRegistrar.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import <GoogleDataTransport/GDTCORPrioritizer.h> -#import <GoogleDataTransport/GDTCORStorageProtocol.h> -#import <GoogleDataTransport/GDTCORTargets.h> -#import <GoogleDataTransport/GDTCORUploader.h> - -NS_ASSUME_NONNULL_BEGIN - -/** Manages the registration of targets with the transport SDK. */ -@interface GDTCORRegistrar : NSObject <GDTCORLifecycleProtocol> - -/** Creates and/or returns the singleton instance. - * - * @return The singleton instance of this class. - */ -+ (instancetype)sharedInstance; - -/** Registers a backend implementation with the GoogleDataTransport infrastructure. - * - * @param backend The backend object to register. - * @param target The target this backend object will be responsible for. - */ -- (void)registerUploader:(id<GDTCORUploader>)backend target:(GDTCORTarget)target; - -/** Registers a storage implementation with the GoogleDataTransport infrastructure. - * - * @param storage The storage instance to be associated with this uploader and target. - * @param target The target this backend object will be responsible for. - */ -- (void)registerStorage:(id<GDTCORStorageProtocol>)storage target:(GDTCORTarget)target; - -/** Registers a event prioritizer implementation with the GoogleDataTransport infrastructure. - * - * @param prioritizer The prioritizer object to register. - * @param target The target this prioritizer object will be responsible for. - */ -- (void)registerPrioritizer:(id<GDTCORPrioritizer>)prioritizer target:(GDTCORTarget)target; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORStorageProtocol.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORStorageProtocol.h deleted file mode 100644 index 99e9344..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORStorageProtocol.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2020 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import <GoogleDataTransport/GDTCORLifecycle.h> - -@class GDTCOREvent; - -NS_ASSUME_NONNULL_BEGIN - -/** Defines the interface a storage subsystem is expected to implement. */ -@protocol GDTCORStorageProtocol <NSObject, GDTCORLifecycleProtocol> - -/** Stores an event and calls onComplete with a non-nil error if anything went wrong. - * - * @param event The event to store - * @param completion The completion block to call after an attempt to store the event has been made. - */ -- (void)storeEvent:(GDTCOREvent *)event - onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion; - -/** Removes the events from storage. */ -- (void)removeEvents:(NSSet<NSNumber *> *)eventIDs; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTargets.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTargets.h deleted file mode 100644 index 5db8852..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTargets.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -/** The list of targets supported by the shared transport infrastructure. If adding a new target, - * please use the previous value +1. - */ -typedef NS_ENUM(NSInteger, GDTCORTarget) { - - /** A target only used in testing. */ - kGDTCORTargetTest = 999, - - /** The CCT target. */ - kGDTCORTargetCCT = 1000, - - /** The FLL target. */ - kGDTCORTargetFLL = 1001, - - /** The CSH target. The CSH target is a special-purpose backend. Please do not use it without - * permission. - */ - kGDTCORTargetCSH = 1002 -}; diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTransport.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTransport.h deleted file mode 100644 index 445ff72..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTransport.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import <GoogleDataTransport/GDTCOREventTransformer.h> - -@class GDTCOREvent; - -NS_ASSUME_NONNULL_BEGIN - -@interface GDTCORTransport : NSObject - -// Please use the designated initializer. -- (instancetype)init NS_UNAVAILABLE; - -/** Initializes a new transport that will send events to the given target backend. - * - * @param mappingID The mapping identifier used by the backend to map the data object transport - * bytes to a proto. - * @param transformers A list of transformers to be applied to events that are sent. - * @param target The target backend of this transport. - * @return A transport that will send events. - */ -- (nullable instancetype)initWithMappingID:(NSString *)mappingID - transformers: - (nullable NSArray<id<GDTCOREventTransformer>> *)transformers - target:(NSInteger)target NS_DESIGNATED_INITIALIZER; - -/** Copies and sends an internal telemetry event. Events sent using this API are lower in priority, - * and sometimes won't be sent on their own. - * - * @note This will convert the event's data object to data and release the original event. - * - * @param event The event to send. - * @param completion A block that will be called when the event has been written or dropped. - */ -- (void)sendTelemetryEvent:(GDTCOREvent *)event - onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion; - -/** Copies and sends an internal telemetry event. Events sent using this API are lower in priority, - * and sometimes won't be sent on their own. - * - * @note This will convert the event's data object to data and release the original event. - * - * @param event The event to send. - */ -- (void)sendTelemetryEvent:(GDTCOREvent *)event; - -/** Copies and sends an SDK service data event. Events send using this API are higher in priority, - * and will cause a network request at some point in the relative near future. - * - * @note This will convert the event's data object to data and release the original event. - * - * @param event The event to send. - * @param completion A block that will be called when the event has been written or dropped. - */ -- (void)sendDataEvent:(GDTCOREvent *)event - onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion; - -/** Copies and sends an SDK service data event. Events send using this API are higher in priority, - * and will cause a network request at some point in the relative near future. - * - * @note This will convert the event's data object to data and release the original event. - * - * @param event The event to send. - */ -- (void)sendDataEvent:(GDTCOREvent *)event; - -/** Creates an event for use by this transport. - * - * @return An event that is suited for use by this transport. - */ -- (GDTCOREvent *)eventForTransport; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploadPackage.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploadPackage.h deleted file mode 100644 index 4f1d9da..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploadPackage.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> -#import <GoogleDataTransport/GDTCORTargets.h> - -@class GDTCORClock; -@class GDTCOREvent; -@class GDTCORUploadPackage; - -/** A protocol that allows a handler to respond to package lifecycle events. */ -@protocol GDTCORUploadPackageProtocol <NSObject> - -@optional - -/** Indicates that the package has expired. - * - * @note Package expiration will only be checked every 5 seconds. - * - * @param package The package that has expired. - */ -- (void)packageExpired:(GDTCORUploadPackage *)package; - -/** Indicates that the package was successfully delivered. - * - * @param package The package that was delivered. - */ -- (void)packageDelivered:(GDTCORUploadPackage *)package successful:(BOOL)successful; - -@end - -/** This class is a container that's handed off to uploaders. */ -@interface GDTCORUploadPackage : NSObject <NSSecureCoding> - -/** The set of stored events in this upload package. */ -@property(nonatomic) NSSet<GDTCOREvent *> *events; - -/** The expiration time. If [[GDTCORClock snapshot] isAfter:deliverByTime] this package has expired. - * - * @note By default, the expiration time will be 3 minutes from creation. - */ -@property(nonatomic) GDTCORClock *deliverByTime; - -/** The target of this package. */ -@property(nonatomic, readonly) GDTCORTarget target; - -/** Initializes a package instance. - * - * @param target The target/destination of this package. - * @return An instance of this class. - */ -- (instancetype)initWithTarget:(GDTCORTarget)target; - -/** Completes delivery of the package. - * - * @note This *needs* to be called by an uploader for the package to not expire. - */ -- (void)completeDelivery; - -/** Sends the package back, indicating that delivery should be attempted again in the future. */ -- (void)retryDeliveryInTheFuture; - -@end diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploader.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploader.h deleted file mode 100644 index cadee47..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploader.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import <GoogleDataTransport/GDTCORClock.h> -#import <GoogleDataTransport/GDTCORLifecycle.h> -#import <GoogleDataTransport/GDTCORPrioritizer.h> -#import <GoogleDataTransport/GDTCORTargets.h> -#import <GoogleDataTransport/GDTCORUploadPackage.h> - -NS_ASSUME_NONNULL_BEGIN - -/** This protocol defines the common interface for uploader implementations. */ -@protocol GDTCORUploader <NSObject, GDTCORLifecycleProtocol, GDTCORUploadPackageProtocol> - -@required - -/** Returns YES if the uploader can make an upload attempt, NO otherwise. - * - * @param target The target being checked. - * @param conditions The conditions that the upload attempt is likely to occur under. - * @return YES if the uploader can make an upload attempt, NO otherwise. - */ -- (BOOL)readyToUploadTarget:(GDTCORTarget)target conditions:(GDTCORUploadConditions)conditions; - -/** Uploads events to the backend using this specific backend's chosen format. - * - * @param package The event package to upload. Make sure to call -completeDelivery. - */ -- (void)uploadPackage:(GDTCORUploadPackage *)package; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport.h b/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport.h deleted file mode 100644 index a02451a..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORClock.h" -#import "GDTCORConsoleLogger.h" -#import "GDTCOREvent.h" -#import "GDTCOREventDataObject.h" -#import "GDTCOREventTransformer.h" -#import "GDTCORLifecycle.h" -#import "GDTCORPrioritizer.h" -#import "GDTCORRegistrar.h" -#import "GDTCORTargets.h" -#import "GDTCORTransport.h" -#import "GDTCORUploadPackage.h" -#import "GDTCORUploader.h" diff --git a/assign5/openTok/Pods/GoogleDataTransport/LICENSE b/assign5/openTok/Pods/GoogleDataTransport/LICENSE deleted file mode 100644 index d645695..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/assign5/openTok/Pods/GoogleDataTransport/README.md b/assign5/openTok/Pods/GoogleDataTransport/README.md deleted file mode 100644 index b04a270..0000000 --- a/assign5/openTok/Pods/GoogleDataTransport/README.md +++ /dev/null @@ -1,282 +0,0 @@ -# Firebase iOS Open Source Development - [![Actions Status][gh-auth-badge]][gh-actions] - [![Actions Status][gh-core-badge]][gh-actions] - [![Actions Status][gh-datatransport-badge]][gh-actions] - [![Actions Status][gh-dynamiclinks-badge]][gh-actions] - [![Actions Status][gh-firebasepod-badge]][gh-actions] - [![Actions Status][gh-firestore-badge]][gh-actions] - [![Actions Status][gh-interop-badge]][gh-actions] - [![Actions Status][gh-messaging-badge]][gh-actions] - [![Actions Status][gh-storage-badge]][gh-actions] - [![Actions Status][gh-symbolcollision-badge]][gh-actions] - [![Actions Status][gh-zip-badge]][gh-actions] - [](https://travis-ci.org/firebase/firebase-ios-sdk) - -This repository contains all Firebase iOS SDK source except FirebaseAnalytics, -FirebasePerformance, and FirebaseML. - -The repository also includes GoogleUtilities source. The -[GoogleUtilities](GoogleUtilities/README.md) pod is -a set of utilities used by Firebase and other Google products. - -Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -## Installation - -See the three subsections for details about three different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) - -### Standard pod install - -Go to -[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). - -### Installing from GitHub - -For releases starting with 5.0.0, the source for each release is also deployed -to CocoaPods master and available via standard -[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). - -These instructions can be used to access the Firebase repo at other branches, -tags, or commits. - -#### Background - -See -[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) -for instructions and options about overriding pod source locations. - -#### Accessing Firebase Source Snapshots - -All of the official releases are tagged in this repo and available via CocoaPods. To access a local -source snapshot or unreleased branch, use Podfile directives like the following: - -To access FirebaseFirestore via a branch: -``` -pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -``` - -To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: - -``` -pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' -pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' -``` - -### Carthage (iOS only) - -Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). - -### Rome - -Instructions for installing binary frameworks via -[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). - -### Using Firebase from a Framework or a library - -[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md) - -## Development - -To develop Firebase software in this repository, ensure that you have at least -the following software: - - * Xcode 10.1 (or later) - * CocoaPods 1.7.2 (or later) - * [CocoaPods generate](https://github.com/square/cocoapods-generate) - -For the pod that you want to develop: - -`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios` - -Note: If the CocoaPods cache is out of date, you may need to run -`pod repo update` before the `pod gen` command. - -Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for -those platforms. Since 10.2, Xcode does not properly handle multi-platform -CocoaPods workspaces. - -Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). - -### Development for Catalyst -* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` -* Check the Mac box in the App-iOS Build Settings -* Sign the App in the Settings Signing & Capabilities tab -* Click Pods in the Project Manager -* Add Signing to the iOS host app and unit test targets -* Select the Unit-unit scheme -* Run it to build and test - -### Adding a New Firebase Pod - -See [AddNewPod.md](AddNewPod.md). - -### Code Formatting - -To ensure that the code is formatted consistently, run the script -[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) -before creating a PR. - -Travis will verify that any code changes are done in a style compliant way. Install -`clang-format` and `swiftformat`. -These commands will get the right versions: - -``` -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c6f1cbd/Formula/clang-format.rb -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c13eda8/Formula/swiftformat.rb -``` - -Note: if you already have a newer version of these installed you may need to -`brew switch` to this version. - -To update this section, find the versions of clang-format and swiftformat.rb to -match the versions in the CI failure logs -[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). - -### Running Unit Tests - -Select a scheme and press Command-u to build a component and run its unit tests. - -#### Viewing Code Coverage (Deprecated) - -First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. - -After running the `AllUnitTests_iOS` scheme in Xcode, execute -`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` -at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. - -### Running Sample Apps -In order to run the sample apps and integration tests, you'll need valid -`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist -files without real values, but can be replaced with real plist files. To get your own -`GoogleService-Info.plist` files: - -1. Go to the [Firebase Console](https://console.firebase.google.com/) -2. Create a new Firebase project, if you don't already have one -3. For each sample app you want to test, create a new Firebase app with the sample app's bundle -identifier (e.g. `com.google.Database-Example`) -4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file -(e.g. in [Example/Database/App/](Example/Database/App/)); - -Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require -special Apple capabilities, and you will have to change the sample app to use a unique bundle -identifier that you can control in your own Apple Developer account. - -## Specific Component Instructions -See the sections below for any special instructions for those components. - -### Firebase Auth - -If you're doing specific Firebase Auth development, see -[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about -building and running the FirebaseAuth pod along with various samples and tests. - -### Firebase Database - -To run the Database Integration tests, make your database authentication rules -[public](https://firebase.google.com/docs/database/security/quickstart). - -### Firebase Storage - -To run the Storage Integration tests, follow the instructions in -[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m). - -#### Push Notifications - -Push notifications can only be delivered to specially provisioned App IDs in the developer portal. -In order to actually test receiving push notifications, you will need to: - -1. Change the bundle identifier of the sample app to something you own in your Apple Developer -account, and enable that App ID for push notifications. -2. You'll also need to -[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) -at **Project Settings > Cloud Messaging > [Your Firebase App]**. -3. Ensure your iOS device is added to your Apple Developer portal as a test device. - -#### iOS Simulator - -The iOS Simulator cannot register for remote notifications, and will not receive push notifications. -In order to receive push notifications, you'll have to follow the steps above and run the app on a -physical device. - -## Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -### tvOS, macOS, watchOS and Catalyst -Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on -tvOS, macOS, watchOS and Catalyst. - -For tvOS, checkout the [Sample](Example/tvOSSample). -For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the -[Independent Watch App Sample](Example/watchOSSample). - -Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this -repository is actively developed primarily for iOS. While we can catch basic unit test issues with -Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you -encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). - -During app setup in the console, you may get to a step that mentions something like "Checking if the app -has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst. -**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected. - -To install, add a subset of the following to the Podfile: - -``` -pod 'Firebase/ABTesting' # No watchOS support yet -pod 'Firebase/Auth' # No watchOS support yet -pod 'Firebase/Crashlytics' # No watchOS support yet -pod 'Firebase/Database' # No watchOS support yet -pod 'Firebase/Firestore' # No watchOS support yet -pod 'Firebase/Functions' # No watchOS support yet -pod 'Firebase/Messaging' -pod 'Firebase/RemoteConfig' # No watchOS support yet -pod 'Firebase/Storage' -``` - -#### Additional Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - -## Roadmap - -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source -plans and directions. - -## Contributing - -See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. - -## License - -The contents of this repository is licensed under the -[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). - -Your use of Firebase is governed by the -[Terms of Service for Firebase Services](https://firebase.google.com/terms/). - -[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions -[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg -[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg -[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg -[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg -[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg -[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg -[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg -[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg -[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg -[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg -[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTCompressionHelper.m b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTCompressionHelper.m deleted file mode 100644 index 9e3745f..0000000 --- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTCompressionHelper.m +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright 2020 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCCTLibrary/Private/GDTCCTCompressionHelper.h" - -#import <zlib.h> - -@implementation GDTCCTCompressionHelper - -+ (nullable NSData *)gzippedData:(NSData *)data { -#if defined(__LP64__) && __LP64__ - // Don't support > 32bit length for 64 bit, see note in header. - if (data.length > UINT_MAX) { - return nil; - } -#endif - - const uint kChunkSize = 1024; - - const void *bytes = [data bytes]; - NSUInteger length = [data length]; - - int level = Z_DEFAULT_COMPRESSION; - if (!bytes || !length) { - return nil; - } - - z_stream strm; - bzero(&strm, sizeof(z_stream)); - - int memLevel = 8; // Default. - int windowBits = 15 + 16; // Enable gzip header instead of zlib header. - - int retCode; - if (deflateInit2(&strm, level, Z_DEFLATED, windowBits, memLevel, Z_DEFAULT_STRATEGY) != Z_OK) { - return nil; - } - - // Hint the size at 1/4 the input size. - NSMutableData *result = [NSMutableData dataWithCapacity:(length / 4)]; - unsigned char output[kChunkSize]; - - // Setup the input. - strm.avail_in = (unsigned int)length; - strm.next_in = (unsigned char *)bytes; - - // Collect the data. - do { - // update what we're passing in - strm.avail_out = kChunkSize; - strm.next_out = output; - retCode = deflate(&strm, Z_FINISH); - if ((retCode != Z_OK) && (retCode != Z_STREAM_END)) { - deflateEnd(&strm); - return nil; - } - // Collect what we got. - unsigned gotBack = kChunkSize - strm.avail_out; - if (gotBack > 0) { - [result appendBytes:output length:gotBack]; - } - - } while (retCode == Z_OK); - - // If the loop exits, it used all input and the stream ended. - NSAssert(strm.avail_in == 0, - @"Should have finished deflating without using all input, %u bytes left", strm.avail_in); - NSAssert(retCode == Z_STREAM_END, - @"thought we finished deflate w/o getting a result of stream end, code %d", retCode); - - // Clean up. - deflateEnd(&strm); - - return result; -} - -+ (BOOL)isGzipped:(NSData *)data { - const UInt8 *bytes = (const UInt8 *)data.bytes; - return (data.length >= 2 && bytes[0] == 0x1f && bytes[1] == 0x8b); -} - -@end diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTNanopbHelpers.m b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTNanopbHelpers.m deleted file mode 100644 index 4b63c61..0000000 --- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTNanopbHelpers.m +++ /dev/null @@ -1,270 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h" - -#if TARGET_OS_IOS || TARGET_OS_TV -#import <UIKit/UIKit.h> -#elif TARGET_OS_OSX -#import <AppKit/AppKit.h> -#endif // TARGET_OS_IOS || TARGET_OS_TV - -#import <GoogleDataTransport/GDTCORClock.h> -#import <GoogleDataTransport/GDTCORConsoleLogger.h> -#import <GoogleDataTransport/GDTCOREvent.h> -#import <GoogleDataTransport/GDTCORPlatform.h> - -#import <nanopb/pb.h> -#import <nanopb/pb_decode.h> -#import <nanopb/pb_encode.h> - -#import "GDTCCTLibrary/Private/GDTCOREvent+NetworkConnectionInfo.h" - -#pragma mark - General purpose encoders - -pb_bytes_array_t *GDTCCTEncodeString(NSString *string) { - NSData *stringBytes = [string dataUsingEncoding:NSUTF8StringEncoding]; - return GDTCCTEncodeData(stringBytes); -} - -pb_bytes_array_t *GDTCCTEncodeData(NSData *data) { - pb_bytes_array_t *pbBytesArray = calloc(1, PB_BYTES_ARRAY_T_ALLOCSIZE(data.length)); - if (pbBytesArray != NULL) { - [data getBytes:pbBytesArray->bytes length:data.length]; - pbBytesArray->size = (pb_size_t)data.length; - } - return pbBytesArray; -} - -#pragma mark - CCT object constructors - -NSData *_Nullable GDTCCTEncodeBatchedLogRequest(gdt_cct_BatchedLogRequest *batchedLogRequest) { - pb_ostream_t sizestream = PB_OSTREAM_SIZING; - // Encode 1 time to determine the size. - if (!pb_encode(&sizestream, gdt_cct_BatchedLogRequest_fields, batchedLogRequest)) { - GDTCORLogError(GDTCORMCEGeneralError, @"Error in nanopb encoding for size: %s", - PB_GET_ERROR(&sizestream)); - } - - // Encode a 2nd time to actually get the bytes from it. - size_t bufferSize = sizestream.bytes_written; - CFMutableDataRef dataRef = CFDataCreateMutable(CFAllocatorGetDefault(), bufferSize); - CFDataSetLength(dataRef, bufferSize); - pb_ostream_t ostream = pb_ostream_from_buffer((void *)CFDataGetBytePtr(dataRef), bufferSize); - if (!pb_encode(&ostream, gdt_cct_BatchedLogRequest_fields, batchedLogRequest)) { - GDTCORLogError(GDTCORMCEGeneralError, @"Error in nanopb encoding for bytes: %s", - PB_GET_ERROR(&ostream)); - } - - return CFBridgingRelease(dataRef); -} - -gdt_cct_BatchedLogRequest GDTCCTConstructBatchedLogRequest( - NSDictionary<NSString *, NSSet<GDTCOREvent *> *> *logMappingIDToLogSet) { - gdt_cct_BatchedLogRequest batchedLogRequest = gdt_cct_BatchedLogRequest_init_default; - NSUInteger numberOfLogRequests = logMappingIDToLogSet.count; - gdt_cct_LogRequest *logRequests = calloc(numberOfLogRequests, sizeof(gdt_cct_LogRequest)); - if (logRequests == NULL) { - return batchedLogRequest; - } - - __block int i = 0; - [logMappingIDToLogSet enumerateKeysAndObjectsUsingBlock:^(NSString *_Nonnull logMappingID, - NSSet<GDTCOREvent *> *_Nonnull logSet, - BOOL *_Nonnull stop) { - int32_t logSource = [logMappingID intValue]; - gdt_cct_LogRequest logRequest = GDTCCTConstructLogRequest(logSource, logSet); - logRequests[i] = logRequest; - i++; - }]; - - batchedLogRequest.log_request = logRequests; - batchedLogRequest.log_request_count = (pb_size_t)numberOfLogRequests; - return batchedLogRequest; -} - -gdt_cct_LogRequest GDTCCTConstructLogRequest(int32_t logSource, - NSSet<GDTCOREvent *> *_Nonnull logSet) { - if (logSet.count == 0) { - GDTCORLogError(GDTCORMCEGeneralError, @"%@", - @"An empty event set can't be serialized to proto."); - gdt_cct_LogRequest logRequest = gdt_cct_LogRequest_init_default; - return logRequest; - } - gdt_cct_LogRequest logRequest = gdt_cct_LogRequest_init_default; - logRequest.log_source = logSource; - logRequest.has_log_source = 1; - logRequest.client_info = GDTCCTConstructClientInfo(); - logRequest.has_client_info = 1; - logRequest.log_event = calloc(logSet.count, sizeof(gdt_cct_LogEvent)); - if (logRequest.log_event == NULL) { - return logRequest; - } - int i = 0; - for (GDTCOREvent *log in logSet) { - gdt_cct_LogEvent logEvent = GDTCCTConstructLogEvent(log); - logRequest.log_event[i] = logEvent; - i++; - } - logRequest.log_event_count = (pb_size_t)logSet.count; - - GDTCORClock *currentTime = [GDTCORClock snapshot]; - logRequest.request_time_ms = currentTime.timeMillis; - logRequest.has_request_time_ms = 1; - logRequest.request_uptime_ms = currentTime.uptime; - logRequest.has_request_uptime_ms = 1; - - return logRequest; -} - -gdt_cct_LogEvent GDTCCTConstructLogEvent(GDTCOREvent *event) { - gdt_cct_LogEvent logEvent = gdt_cct_LogEvent_init_default; - logEvent.event_time_ms = event.clockSnapshot.timeMillis; - logEvent.has_event_time_ms = 1; - logEvent.event_uptime_ms = event.clockSnapshot.uptime; - logEvent.has_event_uptime_ms = 1; - logEvent.timezone_offset_seconds = event.clockSnapshot.timezoneOffsetSeconds; - logEvent.has_timezone_offset_seconds = 1; - if (event.customBytes) { - NSData *networkConnectionInfoData = event.networkConnectionInfoData; - if (networkConnectionInfoData) { - [networkConnectionInfoData getBytes:&logEvent.network_connection_info - length:networkConnectionInfoData.length]; - logEvent.has_network_connection_info = 1; - } - } - NSError *error; - NSData *extensionBytes; - if (event.fileURL) { - extensionBytes = [NSData dataWithContentsOfFile:event.fileURL.path options:0 error:&error]; - } else { - GDTCORLogError(GDTCORMCEFileReadError, @"%@", @"An event's fileURL property was nil."); - return logEvent; - } - if (error) { - GDTCORLogWarning(GDTCORMCWFileReadError, - @"There was an error reading extension bytes from disk: %@", error); - return logEvent; - } - logEvent.source_extension = GDTCCTEncodeData(extensionBytes); // read bytes from the file. - return logEvent; -} - -gdt_cct_ClientInfo GDTCCTConstructClientInfo() { - gdt_cct_ClientInfo clientInfo = gdt_cct_ClientInfo_init_default; - clientInfo.client_type = gdt_cct_ClientInfo_ClientType_IOS_FIREBASE; - clientInfo.has_client_type = 1; -#if TARGET_OS_IOS || TARGET_OS_TV - clientInfo.ios_client_info = GDTCCTConstructiOSClientInfo(); - clientInfo.has_ios_client_info = 1; -#elif TARGET_OS_OSX - // TODO(mikehaney24): Expand the proto to include macOS client info. -#endif - return clientInfo; -} - -gdt_cct_IosClientInfo GDTCCTConstructiOSClientInfo() { - gdt_cct_IosClientInfo iOSClientInfo = gdt_cct_IosClientInfo_init_default; -#if TARGET_OS_IOS || TARGET_OS_TV - UIDevice *device = [UIDevice currentDevice]; - NSBundle *bundle = [NSBundle mainBundle]; - NSLocale *locale = [NSLocale currentLocale]; - iOSClientInfo.os_full_version = GDTCCTEncodeString(device.systemVersion); - NSArray *versionComponents = [device.systemVersion componentsSeparatedByString:@"."]; - iOSClientInfo.os_major_version = GDTCCTEncodeString(versionComponents[0]); - NSString *version = [bundle objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey]; - if (version) { - iOSClientInfo.application_build = GDTCCTEncodeString(version); - } - NSString *countryCode = [locale objectForKey:NSLocaleCountryCode]; - if (countryCode) { - iOSClientInfo.country = GDTCCTEncodeString([locale objectForKey:NSLocaleCountryCode]); - } - iOSClientInfo.model = GDTCCTEncodeString(device.model); - NSString *languageCode = bundle.preferredLocalizations.firstObject; - iOSClientInfo.language_code = - languageCode ? GDTCCTEncodeString(languageCode) : GDTCCTEncodeString(@"en"); - iOSClientInfo.application_bundle_id = GDTCCTEncodeString(bundle.bundleIdentifier); -#endif - return iOSClientInfo; -} - -NSData *GDTCCTConstructNetworkConnectionInfoData() { - gdt_cct_NetworkConnectionInfo networkConnectionInfo = gdt_cct_NetworkConnectionInfo_init_default; - NSInteger currentNetworkType = GDTCORNetworkTypeMessage(); - if (currentNetworkType) { - networkConnectionInfo.has_network_type = 1; - if (currentNetworkType == GDTCORNetworkTypeMobile) { - networkConnectionInfo.network_type = gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE; - networkConnectionInfo.mobile_subtype = GDTCCTNetworkConnectionInfoNetworkMobileSubtype(); - if (networkConnectionInfo.mobile_subtype != - gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE) { - networkConnectionInfo.has_mobile_subtype = 1; - } - } else { - networkConnectionInfo.network_type = gdt_cct_NetworkConnectionInfo_NetworkType_WIFI; - } - } - NSData *networkConnectionInfoData = [NSData dataWithBytes:&networkConnectionInfo - length:sizeof(networkConnectionInfo)]; - return networkConnectionInfoData; -} - -gdt_cct_NetworkConnectionInfo_MobileSubtype GDTCCTNetworkConnectionInfoNetworkMobileSubtype() { - NSNumber *networkMobileSubtypeMessage = @(GDTCORNetworkMobileSubTypeMessage()); - if (!networkMobileSubtypeMessage.intValue) { - return gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE; - } - static NSDictionary<NSNumber *, NSNumber *> *MessageToNetworkSubTypeMessage; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - MessageToNetworkSubTypeMessage = @{ - @(GDTCORNetworkMobileSubtypeGPRS) : @(gdt_cct_NetworkConnectionInfo_MobileSubtype_GPRS), - @(GDTCORNetworkMobileSubtypeEdge) : @(gdt_cct_NetworkConnectionInfo_MobileSubtype_EDGE), - @(GDTCORNetworkMobileSubtypeWCDMA) : - @(gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE), - @(GDTCORNetworkMobileSubtypeHSDPA) : @(gdt_cct_NetworkConnectionInfo_MobileSubtype_HSDPA), - @(GDTCORNetworkMobileSubtypeHSUPA) : @(gdt_cct_NetworkConnectionInfo_MobileSubtype_HSUPA), - @(GDTCORNetworkMobileSubtypeCDMA1x) : @(gdt_cct_NetworkConnectionInfo_MobileSubtype_CDMA), - @(GDTCORNetworkMobileSubtypeCDMAEVDORev0) : - @(gdt_cct_NetworkConnectionInfo_MobileSubtype_EVDO_0), - @(GDTCORNetworkMobileSubtypeCDMAEVDORevA) : - @(gdt_cct_NetworkConnectionInfo_MobileSubtype_EVDO_A), - @(GDTCORNetworkMobileSubtypeCDMAEVDORevB) : - @(gdt_cct_NetworkConnectionInfo_MobileSubtype_EVDO_B), - @(GDTCORNetworkMobileSubtypeHRPD) : @(gdt_cct_NetworkConnectionInfo_MobileSubtype_EHRPD), - @(GDTCORNetworkMobileSubtypeLTE) : @(gdt_cct_NetworkConnectionInfo_MobileSubtype_LTE), - }; - }); - NSNumber *networkMobileSubtype = MessageToNetworkSubTypeMessage[networkMobileSubtypeMessage]; - return networkMobileSubtype.intValue; -} - -#pragma mark - CCT Object decoders - -gdt_cct_LogResponse GDTCCTDecodeLogResponse(NSData *data, NSError **error) { - gdt_cct_LogResponse response = gdt_cct_LogResponse_init_default; - pb_istream_t istream = pb_istream_from_buffer([data bytes], [data length]); - if (!pb_decode(&istream, gdt_cct_LogResponse_fields, &response)) { - NSString *nanopb_error = [NSString stringWithFormat:@"%s", PB_GET_ERROR(&istream)]; - NSDictionary *userInfo = @{@"nanopb error:" : nanopb_error}; - if (error != NULL) { - *error = [NSError errorWithDomain:NSURLErrorDomain code:-1 userInfo:userInfo]; - } - response = (gdt_cct_LogResponse)gdt_cct_LogResponse_init_default; - } - return response; -} diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTPrioritizer.m b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTPrioritizer.m deleted file mode 100644 index 224e34c..0000000 --- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTPrioritizer.m +++ /dev/null @@ -1,426 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCCTLibrary/Private/GDTCCTPrioritizer.h" - -#import <GoogleDataTransport/GDTCORConsoleLogger.h> -#import <GoogleDataTransport/GDTCOREvent.h> -#import <GoogleDataTransport/GDTCORPlatform.h> -#import <GoogleDataTransport/GDTCORRegistrar.h> -#import <GoogleDataTransport/GDTCORTargets.h> - -#import "GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h" -#import "GDTCCTLibrary/Private/GDTCOREvent+NetworkConnectionInfo.h" - -const static int64_t kMillisPerDay = 8.64e+7; - -/** Creates and/or returns a singleton NSString that is the NSCoding file location. - * - * @return The NSCoding file path. - */ -static NSString *ArchivePath() { - static NSString *archivePath; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - archivePath = [GDTCORRootDirectory() URLByAppendingPathComponent:@"GDTCCTPrioritizer"].path; - }); - return archivePath; -} - -/** This class extension is for declaring private properties. */ -@interface GDTCCTPrioritizer () - -/** All CCT events that have been processed by this prioritizer. */ -@property(nonatomic) NSMutableSet<GDTCOREvent *> *CCTEvents; - -/** All FLL events that have been processed by this prioritizer. */ -@property(nonatomic) NSMutableSet<GDTCOREvent *> *FLLEvents; - -/** All CSH events that have been processed by this prioritizer. */ -@property(nonatomic) NSMutableSet<GDTCOREvent *> *CSHEvents; - -@end - -@implementation GDTCCTPrioritizer - -+ (void)load { - GDTCCTPrioritizer *prioritizer = [GDTCCTPrioritizer sharedInstance]; - [[GDTCORRegistrar sharedInstance] registerPrioritizer:prioritizer target:kGDTCORTargetCCT]; - [[GDTCORRegistrar sharedInstance] registerPrioritizer:prioritizer target:kGDTCORTargetFLL]; - [[GDTCORRegistrar sharedInstance] registerPrioritizer:prioritizer target:kGDTCORTargetCSH]; -} - -+ (BOOL)supportsSecureCoding { - return YES; -} - -+ (instancetype)sharedInstance { - static GDTCCTPrioritizer *sharedInstance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[GDTCCTPrioritizer alloc] init]; - }); - return sharedInstance; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _queue = dispatch_queue_create("com.google.GDTCCTPrioritizer", DISPATCH_QUEUE_SERIAL); - _CCTEvents = [[NSMutableSet alloc] init]; - _FLLEvents = [[NSMutableSet alloc] init]; - _CSHEvents = [[NSMutableSet alloc] init]; - } - return self; -} - -- (nullable NSSet *)eventsForTarget:(GDTCORTarget)target { - __block NSSet *events; - dispatch_sync(_queue, ^{ - switch (target) { - case kGDTCORTargetCCT: - events = [self->_CCTEvents copy]; - break; - - case kGDTCORTargetFLL: - events = [self->_FLLEvents copy]; - break; - - case kGDTCORTargetCSH: - events = [self->_CSHEvents copy]; - break; - - default: - break; - } - }); - return events; -} - -#pragma mark - GDTCORPrioritizer Protocol - -- (void)prioritizeEvent:(GDTCOREvent *)event { - if (event.needsNetworkConnectionInfoPopulated) { - event.networkConnectionInfoData = GDTCCTConstructNetworkConnectionInfoData(); - } - dispatch_async(_queue, ^{ - switch (event.target) { - case kGDTCORTargetCCT: - [self.CCTEvents addObject:event]; - break; - - case kGDTCORTargetFLL: - [self.FLLEvents addObject:event]; - break; - - case kGDTCORTargetCSH: - [self.CSHEvents addObject:event]; - break; - - default: - GDTCORLogDebug(@"GDTCCTPrioritizer doesn't support target %ld", (long)event.target); - break; - } - }); -} - -- (GDTCORUploadPackage *)uploadPackageWithTarget:(GDTCORTarget)target - conditions:(GDTCORUploadConditions)conditions { - GDTCORUploadPackage *package = [[GDTCORUploadPackage alloc] initWithTarget:target]; - dispatch_sync(_queue, ^{ - NSSet<GDTCOREvent *> *eventsThatWillBeSent = [self eventsForTarget:target - conditions:conditions]; - package.events = eventsThatWillBeSent; - }); - GDTCORLogDebug(@"CCT: %lu events are in the upload package", (unsigned long)package.events.count); - return package; -} - -#pragma mark - Private helper methods - -/** The different possible quality of service specifiers. High values indicate high priority. */ -typedef NS_ENUM(NSInteger, GDTCCTQoSTier) { - /** The QoS tier wasn't set, and won't ever be sent. */ - GDTCCTQoSDefault = 0, - - /** This event is internal telemetry data that should not be sent on its own if possible. */ - GDTCCTQoSTelemetry = 1, - - /** This event should be sent, but in a batch only roughly once per day. */ - GDTCCTQoSDaily = 2, - - /** This event should only be uploaded on wifi. */ - GDTCCTQoSWifiOnly = 5, -}; - -- (void)saveState { - dispatch_sync(_queue, ^{ - NSError *error; - GDTCOREncodeArchive(self, ArchivePath(), &error); - if (error) { - GDTCORLogDebug(@"Serializing GDTCCTPrioritizer to an archive failed: %@", error); - } - }); - GDTCORLogDebug(@"GDTCCTPrioritizer saved state to %@ as requested by GDT.", ArchivePath()); -} - -/** Converts a GDTCOREventQoS to a GDTCCTQoS tier. - * - * @param qosTier The GDTCOREventQoS value. - * @return A static NSNumber that represents the CCT QoS tier. - */ -FOUNDATION_STATIC_INLINE -NSNumber *GDTCCTQosTierFromGDTCOREventQosTier(GDTCOREventQoS qosTier) { - switch (qosTier) { - case GDTCOREventQoSWifiOnly: - return @(GDTCCTQoSWifiOnly); - break; - - case GDTCOREventQoSTelemetry: - // falls through. - case GDTCOREventQoSDaily: - return @(GDTCCTQoSDaily); - break; - - default: - return @(GDTCCTQoSDefault); - break; - } -} - -/** Constructs a set of events for upload to CCT, FLL, or CSH backends. These backends are - * request-proto and batching compatible, so they construct event batches the same way. - * - * @param conditions The set of conditions the upload package should be made under. - * @param target The target backend. - * @return A set of events for the target. - */ -- (NSSet<GDTCOREvent *> *)eventsForTarget:(GDTCORTarget)target - conditions:(GDTCORUploadConditions)conditions { - GDTCORClock __strong **timeOfLastDailyUpload = NULL; - NSSet<GDTCOREvent *> *eventsToFilter; - switch (target) { - case kGDTCORTargetCCT: - eventsToFilter = self.CCTEvents; - timeOfLastDailyUpload = &self->_CCTTimeOfLastDailyUpload; - break; - - case kGDTCORTargetFLL: - eventsToFilter = self.FLLEvents; - timeOfLastDailyUpload = &self->_FLLOfLastDailyUpload; - break; - - case kGDTCORTargetCSH: - // This backend doesn't batch and uploads all events as soon as possible without respect to - // any upload condition. - return self.CSHEvents; - break; - - default: - // Return an empty set. - return [[NSSet alloc] init]; - break; - } - - NSMutableSet<GDTCOREvent *> *eventsThatWillBeSent = [[NSMutableSet alloc] init]; - // A high priority event effectively flushes all events to be sent. - if ((conditions & GDTCORUploadConditionHighPriority) == GDTCORUploadConditionHighPriority) { - GDTCORLogDebug(@"%@", @"CCT: A high priority event is flushing all events."); - return eventsToFilter; - } - - // If on wifi, upload logs that are ok to send on wifi. - if ((conditions & GDTCORUploadConditionWifiData) == GDTCORUploadConditionWifiData) { - [eventsThatWillBeSent unionSet:[self logEventsOkToSendOnWifi:eventsToFilter]]; - GDTCORLogDebug(@"%@", @"CCT: events ok to send on wifi are being added to the upload package"); - } else { - [eventsThatWillBeSent unionSet:[self logEventsOkToSendOnMobileData:eventsToFilter]]; - GDTCORLogDebug(@"%@", - @"CCT: events ok to send on mobile are being added to the upload package"); - } - - // If it's been > 24h since the last daily upload, upload logs with the daily QoS. - if (*timeOfLastDailyUpload) { - int64_t millisSinceLastUpload = - [GDTCORClock snapshot].timeMillis - (*timeOfLastDailyUpload).timeMillis; - if (millisSinceLastUpload > kMillisPerDay) { - [eventsThatWillBeSent unionSet:[self logEventsOkToSendDaily:eventsToFilter]]; - GDTCORLogDebug(@"%@", @"CCT: events ok to send daily are being added to the upload package"); - } - } else { - *timeOfLastDailyUpload = [GDTCORClock snapshot]; - [eventsThatWillBeSent unionSet:[self logEventsOkToSendDaily:eventsToFilter]]; - GDTCORLogDebug(@"%@", @"CCT: events ok to send daily are being added to the upload package"); - } - return eventsThatWillBeSent; -} - -/** Returns a set of logs that are ok to upload whilst on mobile data. - * - * @note This should be called from a thread safe method. - * @return A set of logs that are ok to upload whilst on mobile data. - */ -- (NSSet<GDTCOREvent *> *)logEventsOkToSendOnMobileData:(NSSet<GDTCOREvent *> *)events { - return [events objectsPassingTest:^BOOL(GDTCOREvent *_Nonnull event, BOOL *_Nonnull stop) { - return [GDTCCTQosTierFromGDTCOREventQosTier(event.qosTier) isEqual:@(GDTCCTQoSDefault)]; - }]; -} - -/** Returns a set of logs that are ok to upload whilst on wifi. - * - * @note This should be called from a thread safe method. - * @return A set of logs that are ok to upload whilst on wifi. - */ -- (NSSet<GDTCOREvent *> *)logEventsOkToSendOnWifi:(NSSet<GDTCOREvent *> *)events { - return [events objectsPassingTest:^BOOL(GDTCOREvent *_Nonnull event, BOOL *_Nonnull stop) { - NSNumber *qosTier = GDTCCTQosTierFromGDTCOREventQosTier(event.qosTier); - return [qosTier isEqual:@(GDTCCTQoSDefault)] || [qosTier isEqual:@(GDTCCTQoSWifiOnly)] || - [qosTier isEqual:@(GDTCCTQoSDaily)]; - }]; -} - -/** Returns a set of logs that only should have a single upload attempt per day. - * - * @note This should be called from a thread safe method. - * @return A set of logs that are ok to upload only once per day. - */ -- (NSSet<GDTCOREvent *> *)logEventsOkToSendDaily:(NSSet<GDTCOREvent *> *)events { - return [events objectsPassingTest:^BOOL(GDTCOREvent *_Nonnull event, BOOL *_Nonnull stop) { - return [GDTCCTQosTierFromGDTCOREventQosTier(event.qosTier) isEqual:@(GDTCCTQoSDaily)]; - }]; -} - -#pragma mark - NSSecureCoding - -/** NSSecureCoding key for the CCTEvents property. */ -static NSString *const GDTCCTUploaderCCTEventsKey = @"GDTCCTUploaderCCTEventsKey"; - -/** NSSecureCoding key for the CCTEvents property. */ -static NSString *const GDTCCTUploaderFLLEventsKey = @"GDTCCTUploaderFLLEventsKey"; - -/** NSSecureCoding key for the CCTEvents property. */ -static NSString *const GDTCCTUploaderCSHEventsKey = @"GDTCCTUploaderCSHEventsKey"; - -- (instancetype)initWithCoder:(NSCoder *)coder { - GDTCCTPrioritizer *sharedInstance = [GDTCCTPrioritizer sharedInstance]; - if (sharedInstance) { - NSSet *classes = [NSSet setWithObjects:[NSMutableSet class], [GDTCOREvent class], nil]; - NSMutableSet *decodedCCTEvents = [coder decodeObjectOfClasses:classes - forKey:GDTCCTUploaderCCTEventsKey]; - if (decodedCCTEvents) { - sharedInstance->_CCTEvents = decodedCCTEvents; - } - NSMutableSet *decodedFLLEvents = [coder decodeObjectOfClasses:classes - forKey:GDTCCTUploaderFLLEventsKey]; - if (decodedFLLEvents) { - sharedInstance->_FLLEvents = decodedFLLEvents; - } - NSMutableSet *decodedCSHEvents = [coder decodeObjectOfClasses:classes - forKey:GDTCCTUploaderCSHEventsKey]; - if (decodedCSHEvents) { - sharedInstance->_CSHEvents = decodedCSHEvents; - } - } - return sharedInstance; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - GDTCCTPrioritizer *sharedInstance = [GDTCCTPrioritizer sharedInstance]; - if (!sharedInstance) { - return; - } - NSMutableSet<GDTCOREvent *> *CCTEvents = sharedInstance->_CCTEvents; - if (CCTEvents) { - [coder encodeObject:CCTEvents forKey:GDTCCTUploaderCCTEventsKey]; - } - NSMutableSet<GDTCOREvent *> *FLLEvents = sharedInstance->_FLLEvents; - if (FLLEvents) { - [coder encodeObject:FLLEvents forKey:GDTCCTUploaderFLLEventsKey]; - } - NSMutableSet<GDTCOREvent *> *CSHEvents = sharedInstance->_CSHEvents; - if (CSHEvents) { - [coder encodeObject:CSHEvents forKey:GDTCCTUploaderCSHEventsKey]; - } -} - -#pragma mark - GDTCORLifecycleProtocol - -- (void)appWillForeground:(GDTCORApplication *)app { - dispatch_async(_queue, ^{ - NSError *error; - GDTCORDecodeArchive([GDTCCTPrioritizer class], ArchivePath(), nil, &error); - if (error) { - GDTCORLogDebug(@"Deserializing GDTCCTPrioritizer from an archive failed: %@", error); - } - }); -} - -- (void)appWillBackground:(GDTCORApplication *)app { - dispatch_async(_queue, ^{ - // Immediately request a background task to run until the end of the current queue of work, and - // cancel it once the work is done. - __block GDTCORBackgroundIdentifier bgID = - [app beginBackgroundTaskWithName:@"GDTStorage" - expirationHandler:^{ - [app endBackgroundTask:bgID]; - bgID = GDTCORBackgroundIdentifierInvalid; - }]; - NSError *error; - GDTCOREncodeArchive(self, ArchivePath(), &error); - if (error) { - GDTCORLogDebug(@"Serializing GDTCCTPrioritizer to an archive failed: %@", error); - } - - // End the background task if it's still valid. - [app endBackgroundTask:bgID]; - bgID = GDTCORBackgroundIdentifierInvalid; - }); -} - -- (void)appWillTerminate:(GDTCORApplication *)application { - dispatch_sync(_queue, ^{ - NSError *error; - GDTCOREncodeArchive(self, ArchivePath(), &error); - if (error) { - GDTCORLogDebug(@"Serializing GDTCCTPrioritizer to an archive failed: %@", error); - } - }); -} - -#pragma mark - GDTCORUploadPackageProtocol - -- (void)packageDelivered:(GDTCORUploadPackage *)package successful:(BOOL)successful { - // If sending the package wasn't successful, we should keep track of these events. - if (!successful) { - return; - } - - dispatch_async(_queue, ^{ - NSSet<GDTCOREvent *> *events = [package.events copy]; - for (GDTCOREvent *event in events) { - // We don't know what collection the event was contained in, so attempt removal from all. - [self.CCTEvents removeObject:event]; - [self.FLLEvents removeObject:event]; - [self.CSHEvents removeObject:event]; - } - }); -} - -- (void)packageExpired:(GDTCORUploadPackage *)package { - [self packageDelivered:package successful:YES]; -} - -@end diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTUploader.m b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTUploader.m deleted file mode 100644 index f50c9bf..0000000 --- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTUploader.m +++ /dev/null @@ -1,441 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCCTLibrary/Private/GDTCCTUploader.h" - -#import <GoogleDataTransport/GDTCORConsoleLogger.h> -#import <GoogleDataTransport/GDTCORPlatform.h> -#import <GoogleDataTransport/GDTCORRegistrar.h> - -#import <nanopb/pb.h> -#import <nanopb/pb_decode.h> -#import <nanopb/pb_encode.h> - -#import "GDTCCTLibrary/Private/GDTCCTCompressionHelper.h" -#import "GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h" -#import "GDTCCTLibrary/Private/GDTCCTPrioritizer.h" - -#import "GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h" - -#ifdef GDTCCTSUPPORT_VERSION -#define STR(x) STR_EXPAND(x) -#define STR_EXPAND(x) #x -static NSString *const kGDTCCTSupportSDKVersion = @STR(GDTCCTSUPPORT_VERSION); -#else -static NSString *const kGDTCCTSupportSDKVersion = @"UNKNOWN"; -#endif // GDTCCTSUPPORT_VERSION - -#if !NDEBUG -NSNotificationName const GDTCCTUploadCompleteNotification = @"com.GDTCCTUploader.UploadComplete"; -#endif // #if !NDEBUG - -@interface GDTCCTUploader () <NSURLSessionDelegate> - -// Redeclared as readwrite. -@property(nullable, nonatomic, readwrite) NSURLSessionUploadTask *currentTask; - -@end - -@implementation GDTCCTUploader - -+ (void)load { - GDTCCTUploader *uploader = [GDTCCTUploader sharedInstance]; - [[GDTCORRegistrar sharedInstance] registerUploader:uploader target:kGDTCORTargetCCT]; - [[GDTCORRegistrar sharedInstance] registerUploader:uploader target:kGDTCORTargetFLL]; - [[GDTCORRegistrar sharedInstance] registerUploader:uploader target:kGDTCORTargetCSH]; -} - -+ (instancetype)sharedInstance { - static GDTCCTUploader *sharedInstance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[GDTCCTUploader alloc] init]; - }); - return sharedInstance; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _uploaderQueue = dispatch_queue_create("com.google.GDTCCTUploader", DISPATCH_QUEUE_SERIAL); - NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; - _uploaderSession = [NSURLSession sessionWithConfiguration:config - delegate:self - delegateQueue:nil]; - } - return self; -} - -/** - * - */ -- (nullable NSURL *)serverURLForTarget:(GDTCORTarget)target { - // These strings should be interleaved to construct the real URL. This is just to (hopefully) - // fool github URL scanning bots. - static NSURL *CCTServerURL; - static dispatch_once_t CCTOnceToken; - dispatch_once(&CCTOnceToken, ^{ - const char *p1 = "hts/frbslgiggolai.o/0clgbth"; - const char *p2 = "tp:/ieaeogn.ogepscmvc/o/ac"; - const char URL[54] = {p1[0], p2[0], p1[1], p2[1], p1[2], p2[2], p1[3], p2[3], p1[4], - p2[4], p1[5], p2[5], p1[6], p2[6], p1[7], p2[7], p1[8], p2[8], - p1[9], p2[9], p1[10], p2[10], p1[11], p2[11], p1[12], p2[12], p1[13], - p2[13], p1[14], p2[14], p1[15], p2[15], p1[16], p2[16], p1[17], p2[17], - p1[18], p2[18], p1[19], p2[19], p1[20], p2[20], p1[21], p2[21], p1[22], - p2[22], p1[23], p2[23], p1[24], p2[24], p1[25], p2[25], p1[26], '\0'}; - CCTServerURL = [NSURL URLWithString:[NSString stringWithUTF8String:URL]]; - }); - - static NSURL *FLLServerURL; - static dispatch_once_t FLLOnceToken; - dispatch_once(&FLLOnceToken, ^{ - const char *p1 = "hts/frbslgigp.ogepscmv/ieo/eaybtho"; - const char *p2 = "tp:/ieaeogn-agolai.o/1frlglgc/aclg"; - const char URL[69] = {p1[0], p2[0], p1[1], p2[1], p1[2], p2[2], p1[3], p2[3], p1[4], - p2[4], p1[5], p2[5], p1[6], p2[6], p1[7], p2[7], p1[8], p2[8], - p1[9], p2[9], p1[10], p2[10], p1[11], p2[11], p1[12], p2[12], p1[13], - p2[13], p1[14], p2[14], p1[15], p2[15], p1[16], p2[16], p1[17], p2[17], - p1[18], p2[18], p1[19], p2[19], p1[20], p2[20], p1[21], p2[21], p1[22], - p2[22], p1[23], p2[23], p1[24], p2[24], p1[25], p2[25], p1[26], p2[26], - p1[27], p2[27], p1[28], p2[28], p1[29], p2[29], p1[30], p2[30], p1[31], - p2[31], p1[32], p2[32], p1[33], p2[33], '\0'}; - FLLServerURL = [NSURL URLWithString:[NSString stringWithUTF8String:URL]]; - }); - - static NSURL *CSHServerURL; - static dispatch_once_t CSHOnceToken; - dispatch_once(&CSHOnceToken, ^{ - // These strings should be interleaved to construct the real URL. This is just to (hopefully) - // fool github URL scanning bots. - const char *p1 = "hts/cahyiseot-agolai.o/1frlglgc/aclg"; - const char *p2 = "tp:/rsltcrprsp.ogepscmv/ieo/eaybtho"; - const char URL[72] = {p1[0], p2[0], p1[1], p2[1], p1[2], p2[2], p1[3], p2[3], p1[4], - p2[4], p1[5], p2[5], p1[6], p2[6], p1[7], p2[7], p1[8], p2[8], - p1[9], p2[9], p1[10], p2[10], p1[11], p2[11], p1[12], p2[12], p1[13], - p2[13], p1[14], p2[14], p1[15], p2[15], p1[16], p2[16], p1[17], p2[17], - p1[18], p2[18], p1[19], p2[19], p1[20], p2[20], p1[21], p2[21], p1[22], - p2[22], p1[23], p2[23], p1[24], p2[24], p1[25], p2[25], p1[26], p2[26], - p1[27], p2[27], p1[28], p2[28], p1[29], p2[29], p1[30], p2[30], p1[31], - p2[31], p1[32], p2[32], p1[33], p2[33], p1[34], p2[34], p1[35], '\0'}; - CSHServerURL = [NSURL URLWithString:[NSString stringWithUTF8String:URL]]; - }); - -#if !NDEBUG - if (_testServerURL) { - return _testServerURL; - } -#endif // !NDEBUG - - switch (target) { - case kGDTCORTargetCCT: - return CCTServerURL; - - case kGDTCORTargetFLL: - return FLLServerURL; - - case kGDTCORTargetCSH: - return CSHServerURL; - - default: - GDTCORLogDebug(@"GDTCCTUploader doesn't support target %ld", (long)target); - return nil; - break; - } -} - -- (NSString *)FLLAndCSHAPIKey { - static NSString *defaultServerKey; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - // These strings should be interleaved to construct the real key. - const char *p1 = "AzSBG0honD6A-PxV5nBc"; - const char *p2 = "Iay44Iwtu2vV0AOrz1C"; - const char defaultKey[40] = {p1[0], p2[0], p1[1], p2[1], p1[2], p2[2], p1[3], p2[3], - p1[4], p2[4], p1[5], p2[5], p1[6], p2[6], p1[7], p2[7], - p1[8], p2[8], p1[9], p2[9], p1[10], p2[10], p1[11], p2[11], - p1[12], p2[12], p1[13], p2[13], p1[14], p2[14], p1[15], p2[15], - p1[16], p2[16], p1[17], p2[17], p1[18], p2[18], p1[19], '\0'}; - defaultServerKey = [NSString stringWithUTF8String:defaultKey]; - }); - return defaultServerKey; -} - -- (void)uploadPackage:(GDTCORUploadPackage *)package { - __block GDTCORBackgroundIdentifier bgID = GDTCORBackgroundIdentifierInvalid; - bgID = [[GDTCORApplication sharedApplication] - beginBackgroundTaskWithName:@"GDTCCTUploader-upload" - expirationHandler:^{ - if (bgID != GDTCORBackgroundIdentifierInvalid) { - // Cancel the upload and complete delivery. - [self.currentTask cancel]; - [self.currentUploadPackage completeDelivery]; - - // End the background task. - [[GDTCORApplication sharedApplication] endBackgroundTask:bgID]; - } - }]; - - dispatch_async(_uploaderQueue, ^{ - if (self->_currentTask || self->_currentUploadPackage) { - GDTCORLogWarning(GDTCORMCWUploadFailed, @"%@", - @"An upload shouldn't be initiated with another in progress."); - return; - } - GDTCORTarget target = package.target; - id completionHandler = ^(NSData *_Nullable data, NSURLResponse *_Nullable response, - NSError *_Nullable error) { - GDTCORLogDebug(@"%@", @"CCT: request completed"); - if (error) { - GDTCORLogWarning(GDTCORMCWUploadFailed, @"There was an error uploading events: %@", error); - } - NSError *decodingError; - GDTCORClock *futureUploadTime; - if (data) { - gdt_cct_LogResponse logResponse = GDTCCTDecodeLogResponse(data, &decodingError); - if (!decodingError && logResponse.has_next_request_wait_millis) { - GDTCORLogDebug( - @"CCT: The backend responded asking to not upload for %lld millis from now.", - logResponse.next_request_wait_millis); - futureUploadTime = - [GDTCORClock clockSnapshotInTheFuture:logResponse.next_request_wait_millis]; - } else if (decodingError) { - GDTCORLogDebug(@"There was a response decoding error: %@", decodingError); - } - pb_release(gdt_cct_LogResponse_fields, &logResponse); - } - if (!futureUploadTime) { - GDTCORLogDebug(@"%@", @"CCT: The backend response failed to parse, so the next request " - @"won't occur until 15 minutes from now"); - // 15 minutes from now. - futureUploadTime = [GDTCORClock clockSnapshotInTheFuture:15 * 60 * 1000]; - } - switch (target) { - case kGDTCORTargetCCT: - self->_CCTNextUploadTime = futureUploadTime; - break; - - case kGDTCORTargetFLL: - // Falls through. - case kGDTCORTargetCSH: - self->_FLLNextUploadTime = futureUploadTime; - default: - break; - } - - // Only retry if one of these codes is returned, or there was an error. - if (error || ((NSHTTPURLResponse *)response).statusCode == 429 || - ((NSHTTPURLResponse *)response).statusCode == 503) { - [package retryDeliveryInTheFuture]; - } else { -#if !NDEBUG - // Post a notification when in DEBUG mode to state how many packages were uploaded. Useful - // for validation during tests. - [[NSNotificationCenter defaultCenter] postNotificationName:GDTCCTUploadCompleteNotification - object:@(package.events.count)]; -#endif // #if !NDEBUG - GDTCORLogDebug(@"%@", @"CCT: package delivered"); - [package completeDelivery]; - } - - // End the background task if there was one. - if (bgID != GDTCORBackgroundIdentifierInvalid) { - [[GDTCORApplication sharedApplication] endBackgroundTask:bgID]; - bgID = GDTCORBackgroundIdentifierInvalid; - } - self.currentTask = nil; - self.currentUploadPackage = nil; - }; - self->_currentUploadPackage = package; - NSData *requestProtoData = - [self constructRequestProtoFromPackage:(GDTCORUploadPackage *)package]; - NSData *gzippedData = [GDTCCTCompressionHelper gzippedData:requestProtoData]; - BOOL usingGzipData = gzippedData != nil && gzippedData.length < requestProtoData.length; - NSData *dataToSend = usingGzipData ? gzippedData : requestProtoData; - NSURLRequest *request = [self constructRequestForTarget:target data:dataToSend]; - GDTCORLogDebug(@"CTT: request created: %@", request); - self.currentTask = [self.uploaderSession uploadTaskWithRequest:request - fromData:dataToSend - completionHandler:completionHandler]; - GDTCORLogDebug(@"%@", @"CCT: The upload task is about to begin."); - [self.currentTask resume]; - }); -} - -- (BOOL)readyToUploadTarget:(GDTCORTarget)target conditions:(GDTCORUploadConditions)conditions { - __block BOOL result = NO; - NSSet *CSHEvents = [[GDTCCTPrioritizer sharedInstance] eventsForTarget:kGDTCORTargetCSH]; - dispatch_sync(_uploaderQueue, ^{ - if (target == kGDTCORTargetCSH) { - result = CSHEvents.count > 0; - return; - } - - if (self->_currentUploadPackage) { - result = NO; - GDTCORLogDebug(@"%@", @"CCT: can't upload because a package is in flight"); - return; - } - if (self->_currentTask) { - result = NO; - GDTCORLogDebug(@"%@", @"CCT: can't upload because a task is in progress"); - return; - } - if ((conditions & GDTCORUploadConditionHighPriority) == GDTCORUploadConditionHighPriority) { - result = YES; - GDTCORLogDebug(@"%@", @"CCT: a high priority event is allowing an upload"); - return; - } - switch (target) { - case kGDTCORTargetCCT: - if (self->_CCTNextUploadTime) { - result = [[GDTCORClock snapshot] isAfter:self->_CCTNextUploadTime]; - } - break; - - case kGDTCORTargetFLL: - if (self->_FLLNextUploadTime) { - result = [[GDTCORClock snapshot] isAfter:self->_FLLNextUploadTime]; - } - break; - - default: - // The CSH backend should be handled above. - break; - } - if (result) { - GDTCORLogDebug(@"CCT: can upload to target %ld because the request wait time has transpired", - (long)target); - } else { - GDTCORLogDebug(@"CCT: can't upload to target %ld because the backend asked to wait", - (long)target); - } - result = YES; - GDTCORLogDebug(@"CCT: can upload to target %ld because nothing is preventing it", (long)target); - }); - return result; -} - -#pragma mark - Private helper methods - -/** Constructs data given an upload package. - * - * @param package The upload package used to construct the request proto bytes. - * @return Proto bytes representing a gdt_cct_LogRequest object. - */ -- (nonnull NSData *)constructRequestProtoFromPackage:(GDTCORUploadPackage *)package { - // Segment the log events by log type. - NSMutableDictionary<NSString *, NSMutableSet<GDTCOREvent *> *> *logMappingIDToLogSet = - [[NSMutableDictionary alloc] init]; - [package.events enumerateObjectsUsingBlock:^(GDTCOREvent *_Nonnull event, BOOL *_Nonnull stop) { - NSMutableSet *logSet = logMappingIDToLogSet[event.mappingID]; - logSet = logSet ? logSet : [[NSMutableSet alloc] init]; - [logSet addObject:event]; - logMappingIDToLogSet[event.mappingID] = logSet; - }]; - - gdt_cct_BatchedLogRequest batchedLogRequest = - GDTCCTConstructBatchedLogRequest(logMappingIDToLogSet); - - NSData *data = GDTCCTEncodeBatchedLogRequest(&batchedLogRequest); - pb_release(gdt_cct_BatchedLogRequest_fields, &batchedLogRequest); - return data ? data : [[NSData alloc] init]; -} - -/** Constructs a request to FLL given a URL and request body data. - * - * @param target The target backend to send the request to. - * @param data The request body data. - * @return A new NSURLRequest ready to be sent to FLL. - */ -- (NSURLRequest *)constructRequestForTarget:(GDTCORTarget)target data:(NSData *)data { - NSURL *URL = [self serverURLForTarget:target]; - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL]; - NSString *targetString; - switch (target) { - case kGDTCORTargetCCT: - targetString = @"cct"; - break; - - case kGDTCORTargetFLL: - targetString = @"fll"; - break; - - case kGDTCORTargetCSH: - targetString = @"csh"; - break; - - default: - targetString = @"unknown"; - break; - } - NSString *userAgent = - [NSString stringWithFormat:@"datatransport/%@ %@support/%@ apple/", kGDTCORVersion, - targetString, kGDTCCTSupportSDKVersion]; - if (target == kGDTCORTargetFLL || target == kGDTCORTargetCSH) { - [request setValue:[self FLLAndCSHAPIKey] forHTTPHeaderField:@"X-Goog-Api-Key"]; - } - if ([GDTCCTCompressionHelper isGzipped:data]) { - [request setValue:@"gzip" forHTTPHeaderField:@"Content-Encoding"]; - } - [request setValue:@"application/x-protobuf" forHTTPHeaderField:@"Content-Type"]; - [request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; - [request setValue:userAgent forHTTPHeaderField:@"User-Agent"]; - request.HTTPMethod = @"POST"; - [request setHTTPBody:data]; - return request; -} - -#pragma mark - GDTCORUploadPackageProtocol - -- (void)packageExpired:(GDTCORUploadPackage *)package { - dispatch_async(_uploaderQueue, ^{ - [self.currentTask cancel]; - self.currentTask = nil; - self.currentUploadPackage = nil; - }); -} - -#pragma mark - GDTCORLifecycleProtocol - -- (void)appWillTerminate:(GDTCORApplication *)application { - dispatch_sync(_uploaderQueue, ^{ - [self.currentTask cancel]; - [self.currentUploadPackage completeDelivery]; - }); -} - -#pragma mark - NSURLSessionDelegate - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task - willPerformHTTPRedirection:(NSHTTPURLResponse *)response - newRequest:(NSURLRequest *)request - completionHandler:(void (^)(NSURLRequest *_Nullable))completionHandler { - if (!completionHandler) { - return; - } - if (response.statusCode == 302 || response.statusCode == 301) { - if ([request.URL isEqual:[self serverURLForTarget:kGDTCORTargetFLL]]) { - NSURLRequest *newRequest = [self constructRequestForTarget:kGDTCORTargetCCT - data:task.originalRequest.HTTPBody]; - completionHandler(newRequest); - } - } else { - completionHandler(request); - } -} - -@end diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCOREvent+NetworkConnectionInfo.m b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCOREvent+NetworkConnectionInfo.m deleted file mode 100644 index 4337f43..0000000 --- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCOREvent+NetworkConnectionInfo.m +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright 2020 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCCTLibrary/Private/GDTCOREvent+NetworkConnectionInfo.h" - -#import <GoogleDataTransport/GDTCORConsoleLogger.h> - -NSString *const GDTCCTNeedsNetworkConnectionInfo = @"needs_network_connection_info"; - -NSString *const GDTCCTNetworkConnectionInfo = @"network_connection_info"; - -@implementation GDTCOREvent (CCTNetworkConnectionInfo) - -- (void)setNeedsNetworkConnectionInfoPopulated:(BOOL)needsNetworkConnectionInfoPopulated { - if (!needsNetworkConnectionInfoPopulated) { - self.customBytes = nil; - } else { - @try { - NSError *error; - self.customBytes = - [NSJSONSerialization dataWithJSONObject:@{GDTCCTNeedsNetworkConnectionInfo : @YES} - options:0 - error:&error]; - } @catch (NSException *exception) { - GDTCORLogDebug(@"Error when setting the event for needs_network_connection_info: %@", - exception); - } - } -} - -- (BOOL)needsNetworkConnectionInfoPopulated { - if (self.customBytes) { - @try { - NSError *error; - NSDictionary *bytesDict = [NSJSONSerialization JSONObjectWithData:self.customBytes - options:0 - error:&error]; - return bytesDict && !error && [bytesDict[GDTCCTNeedsNetworkConnectionInfo] boolValue]; - } @catch (NSException *exception) { - GDTCORLogDebug(@"Error when checking the event for needs_network_connection_info: %@", - exception); - } - } - return NO; -} - -- (void)setNetworkConnectionInfoData:(NSData *)networkConnectionInfoData { - @try { - NSError *error; - NSString *dataString = [networkConnectionInfoData base64EncodedStringWithOptions:0]; - if (dataString) { - self.customBytes = - [NSJSONSerialization dataWithJSONObject:@{GDTCCTNetworkConnectionInfo : dataString} - options:0 - error:&error]; - if (error) { - self.customBytes = nil; - GDTCORLogDebug(@"Error when setting an event's network_connection_info: %@", error); - } - } - } @catch (NSException *exception) { - GDTCORLogDebug(@"Error when setting an event's network_connection_info: %@", exception); - } -} - -- (nullable NSData *)networkConnectionInfoData { - if (self.customBytes) { - @try { - NSError *error; - NSDictionary *bytesDict = [NSJSONSerialization JSONObjectWithData:self.customBytes - options:0 - error:&error]; - NSString *base64Data = bytesDict[GDTCCTNetworkConnectionInfo]; - NSData *networkConnectionInfoData = [[NSData alloc] initWithBase64EncodedString:base64Data - options:0]; - if (error) { - GDTCORLogDebug(@"Error when getting an event's network_connection_info: %@", error); - return nil; - } else { - return networkConnectionInfoData; - } - } @catch (NSException *exception) { - GDTCORLogDebug(@"Error when getting an event's network_connection_info: %@", exception); - } - } - return nil; -} - -@end diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTCompressionHelper.h b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTCompressionHelper.h deleted file mode 100644 index 08d0a4b..0000000 --- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTCompressionHelper.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2020 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -/** A class with methods to help with gzipped data. */ -@interface GDTCCTCompressionHelper : NSObject - -/** Compresses the given data and returns a new data object. - * - * @note Reduced version from GULNSData+zlib.m of GoogleUtilities. - * @return Compressed data, or nil if there was an error. - */ -+ (nullable NSData *)gzippedData:(NSData *)data; - -/** Returns YES if the data looks like it was gzip compressed by checking for the gzip magic number. - * - * @note: From https://en.wikipedia.org/wiki/Gzip, gzip's magic number is 1f 8b. - * @return YES if the data appears gzipped, NO otherwise. - */ -+ (BOOL)isGzipped:(NSData *)data; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h deleted file mode 100644 index 8051f0e..0000000 --- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import <GoogleDataTransport/GDTCOREvent.h> -#import <GoogleDataTransport/GDTCORReachability.h> - -#import "GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h" - -NS_ASSUME_NONNULL_BEGIN - -#pragma mark - General purpose encoders - -/** Converts an NSString* to a pb_bytes_array_t*. - * - * @note calloc is called in this method. Ensure that pb_release is called on this or the parent. - * - * @param string The string to convert. - * @return A newly allocated array of bytes representing the UTF8 encoding of the string. - */ -pb_bytes_array_t *GDTCCTEncodeString(NSString *string); - -/** Converts an NSData to a pb_bytes_array_t*. - * - * @note calloc is called in this method. Ensure that pb_release is called on this or the parent. - * - * @param data The data to convert. - * @return A newly allocated array of bytes with [data bytes] copied into it. - */ -pb_bytes_array_t *GDTCCTEncodeData(NSData *data); - -#pragma mark - CCT object constructors - -/** Encodes a batched log request. - * - * @note Ensure that pb_release is called on the batchedLogRequest param. - * - * @param batchedLogRequest A pointer to the log batch to encode to bytes. - * @return An NSData object representing the bytes of the log request batch. - */ -FOUNDATION_EXPORT -NSData *GDTCCTEncodeBatchedLogRequest(gdt_cct_BatchedLogRequest *batchedLogRequest); - -/** Constructs a gdt_cct_BatchedLogRequest given sets of events segemented by mapping ID. - * - * @note calloc is called in this method. Ensure that pb_release is called on this or the parent. - * - * @param logMappingIDToLogSet A map of mapping IDs to sets of events to convert into a batch. - * @return A newly created gdt_cct_BatchedLogRequest. - */ -FOUNDATION_EXPORT -gdt_cct_BatchedLogRequest GDTCCTConstructBatchedLogRequest( - NSDictionary<NSString *, NSSet<GDTCOREvent *> *> *logMappingIDToLogSet); - -/** Constructs a log request given a log source and a set of events. - * - * @note calloc is called in this method. Ensure that pb_release is called on this or the parent. - * @param logSource The CCT log source to put into the log request. - * @param logSet The set of events to send in this log request. - */ -FOUNDATION_EXPORT -gdt_cct_LogRequest GDTCCTConstructLogRequest(int32_t logSource, NSSet<GDTCOREvent *> *logSet); - -/** Constructs a gdt_cct_LogEvent given a GDTCOREvent*. - * - * @param event The GDTCOREvent to convert. - * @return The new gdt_cct_LogEvent object. - */ -FOUNDATION_EXPORT -gdt_cct_LogEvent GDTCCTConstructLogEvent(GDTCOREvent *event); - -/** Constructs a gdt_cct_ClientInfo representing the client device. - * - * @return The new gdt_cct_ClientInfo object. - */ -FOUNDATION_EXPORT -gdt_cct_ClientInfo GDTCCTConstructClientInfo(void); - -/** Constructs a gdt_cct_IosClientInfo representing the client device. - * - * @return The new gdt_cct_IosClientInfo object. - */ -FOUNDATION_EXPORT -gdt_cct_IosClientInfo GDTCCTConstructiOSClientInfo(void); - -/** Constructs the data of a gdt_cct_NetworkConnectionInfo representing the client nework connection - * information. - * - * @return The data of a gdt_cct_NetworkConnectionInfo object. - */ -FOUNDATION_EXPORT -NSData *GDTCCTConstructNetworkConnectionInfoData(void); - -/** Return a gdt_cct_NetworkConnectionInfo_MobileSubtype representing the client - * - * @return The gdt_cct_NetworkConnectionInfo_MobileSubtype. - */ -FOUNDATION_EXPORT -gdt_cct_NetworkConnectionInfo_MobileSubtype GDTCCTNetworkConnectionInfoNetworkMobileSubtype(void); - -#pragma mark - CCT object decoders - -/** Decodes a gdt_cct_LogResponse given proto bytes. - * - * @note calloc is called in this method. Ensure that pb_release is called on the return value. - * - * @param data The proto bytes of the gdt_cct_LogResponse. - * @param error An error that will be populated if something went wrong during decoding. - * @return A newly allocated gdt_cct_LogResponse from the data, if the bytes decoded properly. - */ -FOUNDATION_EXPORT -gdt_cct_LogResponse GDTCCTDecodeLogResponse(NSData *data, NSError **error); - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTPrioritizer.h b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTPrioritizer.h deleted file mode 100644 index 7b7921b..0000000 --- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTPrioritizer.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import <GoogleDataTransport/GDTCORClock.h> -#import <GoogleDataTransport/GDTCOREvent.h> -#import <GoogleDataTransport/GDTCORPrioritizer.h> -#import <GoogleDataTransport/GDTCORTargets.h> - -NS_ASSUME_NONNULL_BEGIN - -/** Manages the prioritization of events from GoogleDataTransport. */ -@interface GDTCCTPrioritizer : NSObject <NSSecureCoding, GDTCORPrioritizer> - -/** The queue on which this prioritizer operates. */ -@property(nonatomic) dispatch_queue_t queue; - -/** The most recent attempted upload of CCT daily uploaded logs. */ -@property(nonatomic) GDTCORClock *CCTTimeOfLastDailyUpload; - -/** The most recent attempted upload of FLL daily uploaded logs*/ -@property(nonatomic) GDTCORClock *FLLOfLastDailyUpload; - -/** Creates and/or returns the singleton instance of this class. - * - * @return The singleton instance of this class. - */ -+ (instancetype)sharedInstance; - -/** Returns a set of events that have been prioritized for the given target. - * - * @param target The target to check. CCT, FLL, and CSH are currently supported by this class. - * @return The set of events prioritized so far. - */ -- (nullable NSSet *)eventsForTarget:(GDTCORTarget)target; - -NS_ASSUME_NONNULL_END - -@end diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTUploader.h b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTUploader.h deleted file mode 100644 index cdc322d..0000000 --- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTUploader.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import <GoogleDataTransport/GDTCORUploader.h> - -NS_ASSUME_NONNULL_BEGIN - -#if !NDEBUG -/** A notification fired when uploading is complete, detailing the number of events uploaded. */ -extern NSNotificationName const GDTCCTUploadCompleteNotification; -#endif // #if !NDEBUG - -/** Class capable of uploading events to the CCT backend. */ -@interface GDTCCTUploader : NSObject <GDTCORUploader> - -/** The queue on which all CCT uploading will occur. */ -@property(nonatomic, readonly) dispatch_queue_t uploaderQueue; - -/** The URL session that will attempt upload. */ -@property(nonatomic, readonly) NSURLSession *uploaderSession; - -/** The current upload task. */ -@property(nullable, nonatomic, readonly) NSURLSessionUploadTask *currentTask; - -/** Current upload package. */ -@property(nullable, nonatomic) GDTCORUploadPackage *currentUploadPackage; - -/** The next upload time for the CCT target. */ -@property(nullable, nonatomic) GDTCORClock *CCTNextUploadTime; - -/** The next upload time for the FLL target. */ -@property(nullable, nonatomic) GDTCORClock *FLLNextUploadTime; - -#if !NDEBUG -/** An upload URL used across all targets. For testing only. */ -@property(nullable, nonatomic) NSURL *testServerURL; - -#endif // !NDEBUG - -/** Creates and/or returns the singleton instance of this class. - * - * @return The singleton instance of this class. - */ -+ (instancetype)sharedInstance; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCOREvent+NetworkConnectionInfo.h b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCOREvent+NetworkConnectionInfo.h deleted file mode 100644 index 1c1512d..0000000 --- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCOREvent+NetworkConnectionInfo.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2020 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <GoogleDataTransport/GDTCOREvent.h> - -NS_ASSUME_NONNULL_BEGIN - -/** A string sets in customBytes as a key paired to @YES if current event needs to - * populate network connection info data, @NO otherwise. - */ -FOUNDATION_EXPORT NSString *const GDTCCTNeedsNetworkConnectionInfo; - -/** A string sets in customBytes as a key paired to the network connection info data - * of current event. - */ -FOUNDATION_EXPORT NSString *const GDTCCTNetworkConnectionInfo; - -/** A category that uses the customBytes property of a GDTCOREvent to store network connection info. - */ -@interface GDTCOREvent (CCTNetworkConnectionInfo) - -/** If YES, needs the network connection info field set during prioritization. - * @note Uses the GDTCOREvent customBytes property. - */ -@property(nonatomic) BOOL needsNetworkConnectionInfoPopulated; - -/** The network connection info as collected at the time of the event. - * @note Uses the GDTCOREvent customBytes property. - */ -@property(nullable, nonatomic) NSData *networkConnectionInfoData; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c deleted file mode 100644 index 95846e6..0000000 --- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.3.9.3 */ - -#include "cct.nanopb.h" - -/* @@protoc_insertion_point(includes) */ -#if PB_PROTO_HEADER_VERSION != 30 -#error Regenerate this file with the current version of nanopb generator. -#endif - -const gdt_cct_NetworkConnectionInfo_NetworkType gdt_cct_NetworkConnectionInfo_network_type_default = gdt_cct_NetworkConnectionInfo_NetworkType_NONE; -const gdt_cct_NetworkConnectionInfo_MobileSubtype gdt_cct_NetworkConnectionInfo_mobile_subtype_default = gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE; -const gdt_cct_QosTierConfiguration_QosTier gdt_cct_LogRequest_qos_tier_default = gdt_cct_QosTierConfiguration_QosTier_DEFAULT; -const int32_t gdt_cct_QosTierConfiguration_log_source_default = 0; - - -const pb_field_t gdt_cct_LogEvent_fields[7] = { - PB_FIELD( 1, INT64 , OPTIONAL, STATIC , FIRST, gdt_cct_LogEvent, event_time_ms, event_time_ms, 0), - PB_FIELD( 6, BYTES , OPTIONAL, POINTER , OTHER, gdt_cct_LogEvent, source_extension, event_time_ms, 0), - PB_FIELD( 11, INT32 , OPTIONAL, STATIC , OTHER, gdt_cct_LogEvent, event_code, source_extension, 0), - PB_FIELD( 15, SINT64 , OPTIONAL, STATIC , OTHER, gdt_cct_LogEvent, timezone_offset_seconds, event_code, 0), - PB_FIELD( 17, INT64 , OPTIONAL, STATIC , OTHER, gdt_cct_LogEvent, event_uptime_ms, timezone_offset_seconds, 0), - PB_FIELD( 23, MESSAGE , OPTIONAL, STATIC , OTHER, gdt_cct_LogEvent, network_connection_info, event_uptime_ms, &gdt_cct_NetworkConnectionInfo_fields), - PB_LAST_FIELD -}; - -const pb_field_t gdt_cct_NetworkConnectionInfo_fields[3] = { - PB_FIELD( 1, ENUM , OPTIONAL, STATIC , FIRST, gdt_cct_NetworkConnectionInfo, network_type, network_type, &gdt_cct_NetworkConnectionInfo_network_type_default), - PB_FIELD( 2, UENUM , OPTIONAL, STATIC , OTHER, gdt_cct_NetworkConnectionInfo, mobile_subtype, network_type, &gdt_cct_NetworkConnectionInfo_mobile_subtype_default), - PB_LAST_FIELD -}; - -const pb_field_t gdt_cct_IosClientInfo_fields[8] = { - PB_FIELD( 3, BYTES , OPTIONAL, POINTER , FIRST, gdt_cct_IosClientInfo, os_major_version, os_major_version, 0), - PB_FIELD( 4, BYTES , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, os_full_version, os_major_version, 0), - PB_FIELD( 5, BYTES , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, application_build, os_full_version, 0), - PB_FIELD( 6, BYTES , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, country, application_build, 0), - PB_FIELD( 7, BYTES , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, model, country, 0), - PB_FIELD( 8, BYTES , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, language_code, model, 0), - PB_FIELD( 11, BYTES , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, application_bundle_id, language_code, 0), - PB_LAST_FIELD -}; - -const pb_field_t gdt_cct_ClientInfo_fields[3] = { - PB_FIELD( 1, UENUM , OPTIONAL, STATIC , FIRST, gdt_cct_ClientInfo, client_type, client_type, 0), - PB_FIELD( 4, MESSAGE , OPTIONAL, STATIC , OTHER, gdt_cct_ClientInfo, ios_client_info, client_type, &gdt_cct_IosClientInfo_fields), - PB_LAST_FIELD -}; - -const pb_field_t gdt_cct_BatchedLogRequest_fields[2] = { - PB_FIELD( 1, MESSAGE , REPEATED, POINTER , FIRST, gdt_cct_BatchedLogRequest, log_request, log_request, &gdt_cct_LogRequest_fields), - PB_LAST_FIELD -}; - -const pb_field_t gdt_cct_LogRequest_fields[7] = { - PB_FIELD( 1, MESSAGE , OPTIONAL, STATIC , FIRST, gdt_cct_LogRequest, client_info, client_info, &gdt_cct_ClientInfo_fields), - PB_FIELD( 2, INT32 , OPTIONAL, STATIC , OTHER, gdt_cct_LogRequest, log_source, client_info, 0), - PB_FIELD( 3, MESSAGE , REPEATED, POINTER , OTHER, gdt_cct_LogRequest, log_event, log_source, &gdt_cct_LogEvent_fields), - PB_FIELD( 4, INT64 , OPTIONAL, STATIC , OTHER, gdt_cct_LogRequest, request_time_ms, log_event, 0), - PB_FIELD( 8, INT64 , OPTIONAL, STATIC , OTHER, gdt_cct_LogRequest, request_uptime_ms, request_time_ms, 0), - PB_FIELD( 9, UENUM , OPTIONAL, STATIC , OTHER, gdt_cct_LogRequest, qos_tier, request_uptime_ms, &gdt_cct_LogRequest_qos_tier_default), - PB_LAST_FIELD -}; - -const pb_field_t gdt_cct_QosTierConfiguration_fields[3] = { - PB_FIELD( 2, UENUM , OPTIONAL, STATIC , FIRST, gdt_cct_QosTierConfiguration, qos_tier, qos_tier, 0), - PB_FIELD( 3, INT32 , OPTIONAL, STATIC , OTHER, gdt_cct_QosTierConfiguration, log_source, qos_tier, &gdt_cct_QosTierConfiguration_log_source_default), - PB_LAST_FIELD -}; - -const pb_field_t gdt_cct_QosTiersOverride_fields[3] = { - PB_FIELD( 1, MESSAGE , REPEATED, POINTER , FIRST, gdt_cct_QosTiersOverride, qos_tier_configuration, qos_tier_configuration, &gdt_cct_QosTierConfiguration_fields), - PB_FIELD( 2, INT64 , OPTIONAL, STATIC , OTHER, gdt_cct_QosTiersOverride, qos_tier_fingerprint, qos_tier_configuration, 0), - PB_LAST_FIELD -}; - -const pb_field_t gdt_cct_LogResponse_fields[3] = { - PB_FIELD( 1, INT64 , OPTIONAL, STATIC , FIRST, gdt_cct_LogResponse, next_request_wait_millis, next_request_wait_millis, 0), - PB_FIELD( 3, MESSAGE , OPTIONAL, STATIC , OTHER, gdt_cct_LogResponse, qos_tier, next_request_wait_millis, &gdt_cct_QosTiersOverride_fields), - PB_LAST_FIELD -}; - - - - - - -/* Check that field information fits in pb_field_t */ -#if !defined(PB_FIELD_32BIT) -/* If you get an error here, it means that you need to define PB_FIELD_32BIT - * compile-time option. You can do that in pb.h or on compiler command line. - * - * The reason you need to do this is that some of your messages contain tag - * numbers or field sizes that are larger than what can fit in 8 or 16 bit - * field descriptors. - */ -PB_STATIC_ASSERT((pb_membersize(gdt_cct_LogEvent, network_connection_info) < 65536 && pb_membersize(gdt_cct_ClientInfo, ios_client_info) < 65536 && pb_membersize(gdt_cct_LogRequest, client_info) < 65536 && pb_membersize(gdt_cct_LogResponse, qos_tier) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_gdt_cct_LogEvent_gdt_cct_NetworkConnectionInfo_gdt_cct_IosClientInfo_gdt_cct_ClientInfo_gdt_cct_BatchedLogRequest_gdt_cct_LogRequest_gdt_cct_QosTierConfiguration_gdt_cct_QosTiersOverride_gdt_cct_LogResponse) -#endif - -#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT) -/* If you get an error here, it means that you need to define PB_FIELD_16BIT - * compile-time option. You can do that in pb.h or on compiler command line. - * - * The reason you need to do this is that some of your messages contain tag - * numbers or field sizes that are larger than what can fit in the default - * 8 bit descriptors. - */ -PB_STATIC_ASSERT((pb_membersize(gdt_cct_LogEvent, network_connection_info) < 256 && pb_membersize(gdt_cct_ClientInfo, ios_client_info) < 256 && pb_membersize(gdt_cct_LogRequest, client_info) < 256 && pb_membersize(gdt_cct_LogResponse, qos_tier) < 256), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_gdt_cct_LogEvent_gdt_cct_NetworkConnectionInfo_gdt_cct_IosClientInfo_gdt_cct_ClientInfo_gdt_cct_BatchedLogRequest_gdt_cct_LogRequest_gdt_cct_QosTierConfiguration_gdt_cct_QosTiersOverride_gdt_cct_LogResponse) -#endif - - -/* @@protoc_insertion_point(eof) */ diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h deleted file mode 100644 index a6d4cfb..0000000 --- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h +++ /dev/null @@ -1,281 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* Automatically generated nanopb header */ -/* Generated by nanopb-0.3.9.3 */ - -#ifndef PB_GDT_CCT_CCT_NANOPB_H_INCLUDED -#define PB_GDT_CCT_CCT_NANOPB_H_INCLUDED -#include <nanopb/pb.h> - -/* @@protoc_insertion_point(includes) */ -#if PB_PROTO_HEADER_VERSION != 30 -#error Regenerate this file with the current version of nanopb generator. -#endif - - -/* Enum definitions */ -typedef enum _gdt_cct_NetworkConnectionInfo_NetworkType { - gdt_cct_NetworkConnectionInfo_NetworkType_NONE = -1, - gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE = 0, - gdt_cct_NetworkConnectionInfo_NetworkType_WIFI = 1, - gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_MMS = 2, - gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_SUPL = 3, - gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_DUN = 4, - gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_HIPRI = 5, - gdt_cct_NetworkConnectionInfo_NetworkType_WIMAX = 6, - gdt_cct_NetworkConnectionInfo_NetworkType_BLUETOOTH = 7, - gdt_cct_NetworkConnectionInfo_NetworkType_DUMMY = 8, - gdt_cct_NetworkConnectionInfo_NetworkType_ETHERNET = 9, - gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_FOTA = 10, - gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_IMS = 11, - gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_CBS = 12, - gdt_cct_NetworkConnectionInfo_NetworkType_WIFI_P2P = 13, - gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_IA = 14, - gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_EMERGENCY = 15, - gdt_cct_NetworkConnectionInfo_NetworkType_PROXY = 16, - gdt_cct_NetworkConnectionInfo_NetworkType_VPN = 17 -} gdt_cct_NetworkConnectionInfo_NetworkType; -#define _gdt_cct_NetworkConnectionInfo_NetworkType_MIN gdt_cct_NetworkConnectionInfo_NetworkType_NONE -#define _gdt_cct_NetworkConnectionInfo_NetworkType_MAX gdt_cct_NetworkConnectionInfo_NetworkType_VPN -#define _gdt_cct_NetworkConnectionInfo_NetworkType_ARRAYSIZE ((gdt_cct_NetworkConnectionInfo_NetworkType)(gdt_cct_NetworkConnectionInfo_NetworkType_VPN+1)) - -typedef enum _gdt_cct_NetworkConnectionInfo_MobileSubtype { - gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE = 0, - gdt_cct_NetworkConnectionInfo_MobileSubtype_GPRS = 1, - gdt_cct_NetworkConnectionInfo_MobileSubtype_EDGE = 2, - gdt_cct_NetworkConnectionInfo_MobileSubtype_UMTS = 3, - gdt_cct_NetworkConnectionInfo_MobileSubtype_CDMA = 4, - gdt_cct_NetworkConnectionInfo_MobileSubtype_EVDO_0 = 5, - gdt_cct_NetworkConnectionInfo_MobileSubtype_EVDO_A = 6, - gdt_cct_NetworkConnectionInfo_MobileSubtype_RTT = 7, - gdt_cct_NetworkConnectionInfo_MobileSubtype_HSDPA = 8, - gdt_cct_NetworkConnectionInfo_MobileSubtype_HSUPA = 9, - gdt_cct_NetworkConnectionInfo_MobileSubtype_HSPA = 10, - gdt_cct_NetworkConnectionInfo_MobileSubtype_IDEN = 11, - gdt_cct_NetworkConnectionInfo_MobileSubtype_EVDO_B = 12, - gdt_cct_NetworkConnectionInfo_MobileSubtype_LTE = 13, - gdt_cct_NetworkConnectionInfo_MobileSubtype_EHRPD = 14, - gdt_cct_NetworkConnectionInfo_MobileSubtype_HSPAP = 15, - gdt_cct_NetworkConnectionInfo_MobileSubtype_GSM = 16, - gdt_cct_NetworkConnectionInfo_MobileSubtype_TD_SCDMA = 17, - gdt_cct_NetworkConnectionInfo_MobileSubtype_IWLAN = 18, - gdt_cct_NetworkConnectionInfo_MobileSubtype_LTE_CA = 19, - gdt_cct_NetworkConnectionInfo_MobileSubtype_COMBINED = 100 -} gdt_cct_NetworkConnectionInfo_MobileSubtype; -#define _gdt_cct_NetworkConnectionInfo_MobileSubtype_MIN gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE -#define _gdt_cct_NetworkConnectionInfo_MobileSubtype_MAX gdt_cct_NetworkConnectionInfo_MobileSubtype_COMBINED -#define _gdt_cct_NetworkConnectionInfo_MobileSubtype_ARRAYSIZE ((gdt_cct_NetworkConnectionInfo_MobileSubtype)(gdt_cct_NetworkConnectionInfo_MobileSubtype_COMBINED+1)) - -typedef enum _gdt_cct_ClientInfo_ClientType { - gdt_cct_ClientInfo_ClientType_CLIENT_UNKNOWN = 0, - gdt_cct_ClientInfo_ClientType_IOS_FIREBASE = 15 -} gdt_cct_ClientInfo_ClientType; -#define _gdt_cct_ClientInfo_ClientType_MIN gdt_cct_ClientInfo_ClientType_CLIENT_UNKNOWN -#define _gdt_cct_ClientInfo_ClientType_MAX gdt_cct_ClientInfo_ClientType_IOS_FIREBASE -#define _gdt_cct_ClientInfo_ClientType_ARRAYSIZE ((gdt_cct_ClientInfo_ClientType)(gdt_cct_ClientInfo_ClientType_IOS_FIREBASE+1)) - -typedef enum _gdt_cct_QosTierConfiguration_QosTier { - gdt_cct_QosTierConfiguration_QosTier_DEFAULT = 0, - gdt_cct_QosTierConfiguration_QosTier_UNMETERED_ONLY = 1, - gdt_cct_QosTierConfiguration_QosTier_UNMETERED_OR_DAILY = 2, - gdt_cct_QosTierConfiguration_QosTier_FAST_IF_RADIO_AWAKE = 3, - gdt_cct_QosTierConfiguration_QosTier_NEVER = 4 -} gdt_cct_QosTierConfiguration_QosTier; -#define _gdt_cct_QosTierConfiguration_QosTier_MIN gdt_cct_QosTierConfiguration_QosTier_DEFAULT -#define _gdt_cct_QosTierConfiguration_QosTier_MAX gdt_cct_QosTierConfiguration_QosTier_NEVER -#define _gdt_cct_QosTierConfiguration_QosTier_ARRAYSIZE ((gdt_cct_QosTierConfiguration_QosTier)(gdt_cct_QosTierConfiguration_QosTier_NEVER+1)) - -/* Struct definitions */ -typedef struct _gdt_cct_BatchedLogRequest { - pb_size_t log_request_count; - struct _gdt_cct_LogRequest *log_request; -/* @@protoc_insertion_point(struct:gdt_cct_BatchedLogRequest) */ -} gdt_cct_BatchedLogRequest; - -typedef struct _gdt_cct_IosClientInfo { - pb_bytes_array_t *os_major_version; - pb_bytes_array_t *os_full_version; - pb_bytes_array_t *application_build; - pb_bytes_array_t *country; - pb_bytes_array_t *model; - pb_bytes_array_t *language_code; - pb_bytes_array_t *application_bundle_id; -/* @@protoc_insertion_point(struct:gdt_cct_IosClientInfo) */ -} gdt_cct_IosClientInfo; - -typedef struct _gdt_cct_ClientInfo { - bool has_client_type; - gdt_cct_ClientInfo_ClientType client_type; - bool has_ios_client_info; - gdt_cct_IosClientInfo ios_client_info; -/* @@protoc_insertion_point(struct:gdt_cct_ClientInfo) */ -} gdt_cct_ClientInfo; - -typedef struct _gdt_cct_NetworkConnectionInfo { - bool has_network_type; - gdt_cct_NetworkConnectionInfo_NetworkType network_type; - bool has_mobile_subtype; - gdt_cct_NetworkConnectionInfo_MobileSubtype mobile_subtype; -/* @@protoc_insertion_point(struct:gdt_cct_NetworkConnectionInfo) */ -} gdt_cct_NetworkConnectionInfo; - -typedef struct _gdt_cct_QosTierConfiguration { - bool has_qos_tier; - gdt_cct_QosTierConfiguration_QosTier qos_tier; - bool has_log_source; - int32_t log_source; -/* @@protoc_insertion_point(struct:gdt_cct_QosTierConfiguration) */ -} gdt_cct_QosTierConfiguration; - -typedef struct _gdt_cct_QosTiersOverride { - pb_size_t qos_tier_configuration_count; - struct _gdt_cct_QosTierConfiguration *qos_tier_configuration; - bool has_qos_tier_fingerprint; - int64_t qos_tier_fingerprint; -/* @@protoc_insertion_point(struct:gdt_cct_QosTiersOverride) */ -} gdt_cct_QosTiersOverride; - -typedef struct _gdt_cct_LogEvent { - bool has_event_time_ms; - int64_t event_time_ms; - pb_bytes_array_t *source_extension; - bool has_event_code; - int32_t event_code; - bool has_timezone_offset_seconds; - int64_t timezone_offset_seconds; - bool has_event_uptime_ms; - int64_t event_uptime_ms; - bool has_network_connection_info; - gdt_cct_NetworkConnectionInfo network_connection_info; -/* @@protoc_insertion_point(struct:gdt_cct_LogEvent) */ -} gdt_cct_LogEvent; - -typedef struct _gdt_cct_LogRequest { - bool has_client_info; - gdt_cct_ClientInfo client_info; - bool has_log_source; - int32_t log_source; - pb_size_t log_event_count; - struct _gdt_cct_LogEvent *log_event; - bool has_request_time_ms; - int64_t request_time_ms; - bool has_request_uptime_ms; - int64_t request_uptime_ms; - bool has_qos_tier; - gdt_cct_QosTierConfiguration_QosTier qos_tier; -/* @@protoc_insertion_point(struct:gdt_cct_LogRequest) */ -} gdt_cct_LogRequest; - -typedef struct _gdt_cct_LogResponse { - bool has_next_request_wait_millis; - int64_t next_request_wait_millis; - bool has_qos_tier; - gdt_cct_QosTiersOverride qos_tier; -/* @@protoc_insertion_point(struct:gdt_cct_LogResponse) */ -} gdt_cct_LogResponse; - -/* Default values for struct fields */ -extern const gdt_cct_NetworkConnectionInfo_NetworkType gdt_cct_NetworkConnectionInfo_network_type_default; -extern const gdt_cct_NetworkConnectionInfo_MobileSubtype gdt_cct_NetworkConnectionInfo_mobile_subtype_default; -extern const gdt_cct_QosTierConfiguration_QosTier gdt_cct_LogRequest_qos_tier_default; -extern const int32_t gdt_cct_QosTierConfiguration_log_source_default; - -/* Initializer values for message structs */ -#define gdt_cct_LogEvent_init_default {false, 0, NULL, false, 0, false, 0, false, 0, false, gdt_cct_NetworkConnectionInfo_init_default} -#define gdt_cct_NetworkConnectionInfo_init_default {false, gdt_cct_NetworkConnectionInfo_NetworkType_NONE, false, gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE} -#define gdt_cct_IosClientInfo_init_default {NULL, NULL, NULL, NULL, NULL, NULL, NULL} -#define gdt_cct_ClientInfo_init_default {false, _gdt_cct_ClientInfo_ClientType_MIN, false, gdt_cct_IosClientInfo_init_default} -#define gdt_cct_BatchedLogRequest_init_default {0, NULL} -#define gdt_cct_LogRequest_init_default {false, gdt_cct_ClientInfo_init_default, false, 0, 0, NULL, false, 0, false, 0, false, gdt_cct_QosTierConfiguration_QosTier_DEFAULT} -#define gdt_cct_QosTierConfiguration_init_default {false, _gdt_cct_QosTierConfiguration_QosTier_MIN, false, 0} -#define gdt_cct_QosTiersOverride_init_default {0, NULL, false, 0} -#define gdt_cct_LogResponse_init_default {false, 0, false, gdt_cct_QosTiersOverride_init_default} -#define gdt_cct_LogEvent_init_zero {false, 0, NULL, false, 0, false, 0, false, 0, false, gdt_cct_NetworkConnectionInfo_init_zero} -#define gdt_cct_NetworkConnectionInfo_init_zero {false, _gdt_cct_NetworkConnectionInfo_NetworkType_MIN, false, _gdt_cct_NetworkConnectionInfo_MobileSubtype_MIN} -#define gdt_cct_IosClientInfo_init_zero {NULL, NULL, NULL, NULL, NULL, NULL, NULL} -#define gdt_cct_ClientInfo_init_zero {false, _gdt_cct_ClientInfo_ClientType_MIN, false, gdt_cct_IosClientInfo_init_zero} -#define gdt_cct_BatchedLogRequest_init_zero {0, NULL} -#define gdt_cct_LogRequest_init_zero {false, gdt_cct_ClientInfo_init_zero, false, 0, 0, NULL, false, 0, false, 0, false, _gdt_cct_QosTierConfiguration_QosTier_MIN} -#define gdt_cct_QosTierConfiguration_init_zero {false, _gdt_cct_QosTierConfiguration_QosTier_MIN, false, 0} -#define gdt_cct_QosTiersOverride_init_zero {0, NULL, false, 0} -#define gdt_cct_LogResponse_init_zero {false, 0, false, gdt_cct_QosTiersOverride_init_zero} - -/* Field tags (for use in manual encoding/decoding) */ -#define gdt_cct_BatchedLogRequest_log_request_tag 1 -#define gdt_cct_IosClientInfo_os_major_version_tag 3 -#define gdt_cct_IosClientInfo_os_full_version_tag 4 -#define gdt_cct_IosClientInfo_application_build_tag 5 -#define gdt_cct_IosClientInfo_country_tag 6 -#define gdt_cct_IosClientInfo_model_tag 7 -#define gdt_cct_IosClientInfo_language_code_tag 8 -#define gdt_cct_IosClientInfo_application_bundle_id_tag 11 -#define gdt_cct_ClientInfo_client_type_tag 1 -#define gdt_cct_ClientInfo_ios_client_info_tag 4 -#define gdt_cct_NetworkConnectionInfo_network_type_tag 1 -#define gdt_cct_NetworkConnectionInfo_mobile_subtype_tag 2 -#define gdt_cct_QosTierConfiguration_qos_tier_tag 2 -#define gdt_cct_QosTierConfiguration_log_source_tag 3 -#define gdt_cct_QosTiersOverride_qos_tier_configuration_tag 1 -#define gdt_cct_QosTiersOverride_qos_tier_fingerprint_tag 2 -#define gdt_cct_LogEvent_event_time_ms_tag 1 -#define gdt_cct_LogEvent_event_code_tag 11 -#define gdt_cct_LogEvent_event_uptime_ms_tag 17 -#define gdt_cct_LogEvent_source_extension_tag 6 -#define gdt_cct_LogEvent_timezone_offset_seconds_tag 15 -#define gdt_cct_LogEvent_network_connection_info_tag 23 -#define gdt_cct_LogRequest_request_time_ms_tag 4 -#define gdt_cct_LogRequest_request_uptime_ms_tag 8 -#define gdt_cct_LogRequest_client_info_tag 1 -#define gdt_cct_LogRequest_log_source_tag 2 -#define gdt_cct_LogRequest_log_event_tag 3 -#define gdt_cct_LogRequest_qos_tier_tag 9 -#define gdt_cct_LogResponse_next_request_wait_millis_tag 1 -#define gdt_cct_LogResponse_qos_tier_tag 3 - -/* Struct field encoding specification for nanopb */ -extern const pb_field_t gdt_cct_LogEvent_fields[7]; -extern const pb_field_t gdt_cct_NetworkConnectionInfo_fields[3]; -extern const pb_field_t gdt_cct_IosClientInfo_fields[8]; -extern const pb_field_t gdt_cct_ClientInfo_fields[3]; -extern const pb_field_t gdt_cct_BatchedLogRequest_fields[2]; -extern const pb_field_t gdt_cct_LogRequest_fields[7]; -extern const pb_field_t gdt_cct_QosTierConfiguration_fields[3]; -extern const pb_field_t gdt_cct_QosTiersOverride_fields[3]; -extern const pb_field_t gdt_cct_LogResponse_fields[3]; - -/* Maximum encoded size of messages (where known) */ -/* gdt_cct_LogEvent_size depends on runtime parameters */ -#define gdt_cct_NetworkConnectionInfo_size 13 -/* gdt_cct_IosClientInfo_size depends on runtime parameters */ -/* gdt_cct_ClientInfo_size depends on runtime parameters */ -/* gdt_cct_BatchedLogRequest_size depends on runtime parameters */ -/* gdt_cct_LogRequest_size depends on runtime parameters */ -#define gdt_cct_QosTierConfiguration_size 13 -/* gdt_cct_QosTiersOverride_size depends on runtime parameters */ -/* gdt_cct_LogResponse_size depends on runtime parameters */ - -/* Message IDs (where set with "msgid" option) */ -#ifdef PB_MSGID - -#define CCT_MESSAGES \ - - -#endif - -/* @@protoc_insertion_point(eof) */ - -#endif diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/LICENSE b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/LICENSE deleted file mode 100644 index d645695..0000000 --- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/README.md b/assign5/openTok/Pods/GoogleDataTransportCCTSupport/README.md deleted file mode 100644 index b04a270..0000000 --- a/assign5/openTok/Pods/GoogleDataTransportCCTSupport/README.md +++ /dev/null @@ -1,282 +0,0 @@ -# Firebase iOS Open Source Development - [![Actions Status][gh-auth-badge]][gh-actions] - [![Actions Status][gh-core-badge]][gh-actions] - [![Actions Status][gh-datatransport-badge]][gh-actions] - [![Actions Status][gh-dynamiclinks-badge]][gh-actions] - [![Actions Status][gh-firebasepod-badge]][gh-actions] - [![Actions Status][gh-firestore-badge]][gh-actions] - [![Actions Status][gh-interop-badge]][gh-actions] - [![Actions Status][gh-messaging-badge]][gh-actions] - [![Actions Status][gh-storage-badge]][gh-actions] - [![Actions Status][gh-symbolcollision-badge]][gh-actions] - [![Actions Status][gh-zip-badge]][gh-actions] - [](https://travis-ci.org/firebase/firebase-ios-sdk) - -This repository contains all Firebase iOS SDK source except FirebaseAnalytics, -FirebasePerformance, and FirebaseML. - -The repository also includes GoogleUtilities source. The -[GoogleUtilities](GoogleUtilities/README.md) pod is -a set of utilities used by Firebase and other Google products. - -Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -## Installation - -See the three subsections for details about three different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) - -### Standard pod install - -Go to -[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). - -### Installing from GitHub - -For releases starting with 5.0.0, the source for each release is also deployed -to CocoaPods master and available via standard -[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). - -These instructions can be used to access the Firebase repo at other branches, -tags, or commits. - -#### Background - -See -[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) -for instructions and options about overriding pod source locations. - -#### Accessing Firebase Source Snapshots - -All of the official releases are tagged in this repo and available via CocoaPods. To access a local -source snapshot or unreleased branch, use Podfile directives like the following: - -To access FirebaseFirestore via a branch: -``` -pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -``` - -To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: - -``` -pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' -pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' -``` - -### Carthage (iOS only) - -Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). - -### Rome - -Instructions for installing binary frameworks via -[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). - -### Using Firebase from a Framework or a library - -[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md) - -## Development - -To develop Firebase software in this repository, ensure that you have at least -the following software: - - * Xcode 10.1 (or later) - * CocoaPods 1.7.2 (or later) - * [CocoaPods generate](https://github.com/square/cocoapods-generate) - -For the pod that you want to develop: - -`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios` - -Note: If the CocoaPods cache is out of date, you may need to run -`pod repo update` before the `pod gen` command. - -Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for -those platforms. Since 10.2, Xcode does not properly handle multi-platform -CocoaPods workspaces. - -Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). - -### Development for Catalyst -* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` -* Check the Mac box in the App-iOS Build Settings -* Sign the App in the Settings Signing & Capabilities tab -* Click Pods in the Project Manager -* Add Signing to the iOS host app and unit test targets -* Select the Unit-unit scheme -* Run it to build and test - -### Adding a New Firebase Pod - -See [AddNewPod.md](AddNewPod.md). - -### Code Formatting - -To ensure that the code is formatted consistently, run the script -[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) -before creating a PR. - -Travis will verify that any code changes are done in a style compliant way. Install -`clang-format` and `swiftformat`. -These commands will get the right versions: - -``` -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c6f1cbd/Formula/clang-format.rb -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c13eda8/Formula/swiftformat.rb -``` - -Note: if you already have a newer version of these installed you may need to -`brew switch` to this version. - -To update this section, find the versions of clang-format and swiftformat.rb to -match the versions in the CI failure logs -[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). - -### Running Unit Tests - -Select a scheme and press Command-u to build a component and run its unit tests. - -#### Viewing Code Coverage (Deprecated) - -First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. - -After running the `AllUnitTests_iOS` scheme in Xcode, execute -`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` -at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. - -### Running Sample Apps -In order to run the sample apps and integration tests, you'll need valid -`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist -files without real values, but can be replaced with real plist files. To get your own -`GoogleService-Info.plist` files: - -1. Go to the [Firebase Console](https://console.firebase.google.com/) -2. Create a new Firebase project, if you don't already have one -3. For each sample app you want to test, create a new Firebase app with the sample app's bundle -identifier (e.g. `com.google.Database-Example`) -4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file -(e.g. in [Example/Database/App/](Example/Database/App/)); - -Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require -special Apple capabilities, and you will have to change the sample app to use a unique bundle -identifier that you can control in your own Apple Developer account. - -## Specific Component Instructions -See the sections below for any special instructions for those components. - -### Firebase Auth - -If you're doing specific Firebase Auth development, see -[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about -building and running the FirebaseAuth pod along with various samples and tests. - -### Firebase Database - -To run the Database Integration tests, make your database authentication rules -[public](https://firebase.google.com/docs/database/security/quickstart). - -### Firebase Storage - -To run the Storage Integration tests, follow the instructions in -[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m). - -#### Push Notifications - -Push notifications can only be delivered to specially provisioned App IDs in the developer portal. -In order to actually test receiving push notifications, you will need to: - -1. Change the bundle identifier of the sample app to something you own in your Apple Developer -account, and enable that App ID for push notifications. -2. You'll also need to -[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) -at **Project Settings > Cloud Messaging > [Your Firebase App]**. -3. Ensure your iOS device is added to your Apple Developer portal as a test device. - -#### iOS Simulator - -The iOS Simulator cannot register for remote notifications, and will not receive push notifications. -In order to receive push notifications, you'll have to follow the steps above and run the app on a -physical device. - -## Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -### tvOS, macOS, watchOS and Catalyst -Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on -tvOS, macOS, watchOS and Catalyst. - -For tvOS, checkout the [Sample](Example/tvOSSample). -For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the -[Independent Watch App Sample](Example/watchOSSample). - -Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this -repository is actively developed primarily for iOS. While we can catch basic unit test issues with -Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you -encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). - -During app setup in the console, you may get to a step that mentions something like "Checking if the app -has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst. -**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected. - -To install, add a subset of the following to the Podfile: - -``` -pod 'Firebase/ABTesting' # No watchOS support yet -pod 'Firebase/Auth' # No watchOS support yet -pod 'Firebase/Crashlytics' # No watchOS support yet -pod 'Firebase/Database' # No watchOS support yet -pod 'Firebase/Firestore' # No watchOS support yet -pod 'Firebase/Functions' # No watchOS support yet -pod 'Firebase/Messaging' -pod 'Firebase/RemoteConfig' # No watchOS support yet -pod 'Firebase/Storage' -``` - -#### Additional Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - -## Roadmap - -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source -plans and directions. - -## Contributing - -See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. - -## License - -The contents of this repository is licensed under the -[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). - -Your use of Firebase is governed by the -[Terms of Service for Firebase Services](https://firebase.google.com/terms/). - -[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions -[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg -[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg -[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg -[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg -[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg -[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg -[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg -[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg -[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg -[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg -[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/GULHeartbeatDateStorage.m b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/GULHeartbeatDateStorage.m deleted file mode 100644 index 483c859..0000000 --- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/GULHeartbeatDateStorage.m +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <GoogleUtilities/GULHeartbeatDateStorage.h> -#import <GoogleUtilities/GULSecureCoding.h> - -@interface GULHeartbeatDateStorage () -/** The storage to store the date of the last sent heartbeat. */ -@property(nonatomic, readonly) NSFileCoordinator *fileCoordinator; -@end - -@implementation GULHeartbeatDateStorage - -- (instancetype)initWithFileName:(NSString *)fileName { - if (fileName == nil) { - return nil; - } - - self = [super init]; - if (self) { - _fileCoordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil]; - NSURL *directoryURL = [[self class] directoryPathURL]; - [[self class] checkAndCreateDirectory:directoryURL fileCoordinator:_fileCoordinator]; - _fileURL = [directoryURL URLByAppendingPathComponent:fileName]; - } - return self; -} - -/** Returns the URL path of the Application Support folder. - * @return the URL path of Application Support. - */ -+ (NSURL *)directoryPathURL { - NSArray<NSString *> *paths = - NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES); - NSArray<NSString *> *components = @[ paths.lastObject, @"Google/FIRApp" ]; - NSString *directoryString = [NSString pathWithComponents:components]; - NSURL *directoryURL = [NSURL fileURLWithPath:directoryString]; - return directoryURL; -} - -/** Checks and creates a directory for the directory specified by the - * directory url - * @param directoryPathURL The path to the directory which needs to be created. - * @param fileCoordinator The fileCoordinator object to coordinate writes to the directory. - */ -+ (void)checkAndCreateDirectory:(NSURL *)directoryPathURL - fileCoordinator:(NSFileCoordinator *)fileCoordinator { - NSError *fileCoordinatorError = nil; - [fileCoordinator - coordinateWritingItemAtURL:directoryPathURL - options:0 - error:&fileCoordinatorError - byAccessor:^(NSURL *writingDirectoryURL) { - NSError *error; - if (![writingDirectoryURL checkResourceIsReachableAndReturnError:&error]) { - // If fail creating the Application Support directory, log warning. - NSError *error; - [[NSFileManager defaultManager] createDirectoryAtURL:writingDirectoryURL - withIntermediateDirectories:YES - attributes:nil - error:&error]; - } - }]; -} - -- (nullable NSMutableDictionary *)heartbeatDictionaryWithFileURL:(NSURL *)readingFileURL { - NSError *error; - NSMutableDictionary *dict; - NSData *objectData = [NSData dataWithContentsOfURL:readingFileURL options:0 error:&error]; - if (objectData == nil || error != nil) { - dict = [NSMutableDictionary dictionary]; - } else { - dict = [GULSecureCoding - unarchivedObjectOfClasses:[NSSet setWithArray:@[ NSDictionary.class, NSDate.class ]] - fromData:objectData - error:&error]; - if (dict == nil || error != nil) { - dict = [NSMutableDictionary dictionary]; - } - } - return dict; -} - -- (nullable NSDate *)heartbeatDateForTag:(NSString *)tag { - __block NSMutableDictionary *dict; - NSError *error; - [self.fileCoordinator coordinateReadingItemAtURL:self.fileURL - options:0 - error:&error - byAccessor:^(NSURL *readingURL) { - dict = [self heartbeatDictionaryWithFileURL:readingURL]; - }]; - return dict[tag]; -} - -- (BOOL)setHearbeatDate:(NSDate *)date forTag:(NSString *)tag { - NSError *error; - __block BOOL isSuccess = false; - [self.fileCoordinator coordinateReadingItemAtURL:self.fileURL - options:0 - writingItemAtURL:self.fileURL - options:0 - error:&error - byAccessor:^(NSURL *readingURL, NSURL *writingURL) { - NSMutableDictionary *dictionary = - [self heartbeatDictionaryWithFileURL:readingURL]; - dictionary[tag] = date; - NSError *error; - isSuccess = [self writeDictionary:dictionary - forWritingURL:writingURL - error:&error]; - }]; - return isSuccess; -} - -- (BOOL)writeDictionary:(NSMutableDictionary *)dictionary - forWritingURL:(NSURL *)writingFileURL - error:(NSError **)outError { - NSData *data = [GULSecureCoding archivedDataWithRootObject:dictionary error:outError]; - if (*outError != nil) { - return false; - } else { - return [data writeToURL:writingFileURL atomically:YES]; - } -} - -@end diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/GULSecureCoding.m b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/GULSecureCoding.m deleted file mode 100644 index 25d5d19..0000000 --- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/GULSecureCoding.m +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "GoogleUtilities/Environment/Public/GULSecureCoding.h" - -NSString *const kGULSecureCodingError = @"GULSecureCodingError"; - -@implementation GULSecureCoding - -+ (nullable id)unarchivedObjectOfClasses:(NSSet<Class> *)classes - fromData:(NSData *)data - error:(NSError **)outError { - id object; -#if __has_builtin(__builtin_available) - if (@available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *)) { - object = [NSKeyedUnarchiver unarchivedObjectOfClasses:classes fromData:data error:outError]; - } else -#endif // __has_builtin(__builtin_available) - { - @try { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; -#pragma clang diagnostic pop - unarchiver.requiresSecureCoding = YES; - - object = [unarchiver decodeObjectOfClasses:classes forKey:NSKeyedArchiveRootObjectKey]; - } @catch (NSException *exception) { - if (outError) { - *outError = [self archivingErrorWithException:exception]; - } - } - - if (object == nil && outError && *outError == nil) { - NSString *failureReason = @"NSKeyedUnarchiver failed to unarchive data."; - *outError = [NSError errorWithDomain:kGULSecureCodingError - code:-1 - userInfo:@{NSLocalizedFailureReasonErrorKey : failureReason}]; - } - } - - return object; -} - -+ (nullable id)unarchivedObjectOfClass:(Class)class - fromData:(NSData *)data - error:(NSError **)outError { - return [self unarchivedObjectOfClasses:[NSSet setWithObject:class] fromData:data error:outError]; -} - -+ (nullable NSData *)archivedDataWithRootObject:(id<NSCoding>)object error:(NSError **)outError { - NSData *archiveData; -#if __has_builtin(__builtin_available) - if (@available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *)) { - archiveData = [NSKeyedArchiver archivedDataWithRootObject:object - requiringSecureCoding:YES - error:outError]; - } else -#endif // __has_builtin(__builtin_available) - { - @try { - NSMutableData *data = [NSMutableData data]; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; -#pragma clang diagnostic pop - archiver.requiresSecureCoding = YES; - - [archiver encodeObject:object forKey:NSKeyedArchiveRootObjectKey]; - [archiver finishEncoding]; - - archiveData = [data copy]; - } @catch (NSException *exception) { - if (outError) { - *outError = [self archivingErrorWithException:exception]; - } - } - } - - return archiveData; -} - -+ (NSError *)archivingErrorWithException:(NSException *)exception { - NSString *failureReason = [NSString - stringWithFormat:@"NSKeyedArchiver exception with name: %@, reason: %@, userInfo: %@", - exception.name, exception.reason, exception.userInfo]; - NSDictionary *errorUserInfo = @{NSLocalizedFailureReasonErrorKey : failureReason}; - - return [NSError errorWithDomain:kGULSecureCodingError code:-1 userInfo:errorUserInfo]; -} - -@end diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULHeartbeatDateStorage.h b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULHeartbeatDateStorage.h deleted file mode 100644 index 9432dfc..0000000 --- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULHeartbeatDateStorage.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -/// Stores either a date or a dictionary to a specified file. -@interface GULHeartbeatDateStorage : NSObject - -- (instancetype)init NS_UNAVAILABLE; - -@property(nonatomic, readonly) NSURL *fileURL; - -/** - * Default initializer. - * @param fileName The name of the file to store the date information. - * exist, it will be created if needed. - */ -- (instancetype)initWithFileName:(NSString *)fileName; - -/** - * Reads the date from the specified file for the given tag. - * @return Returns date if exists, otherwise `nil`. - */ -- (nullable NSDate *)heartbeatDateForTag:(NSString *)tag; - -/** - * Saves the date for the specified tag in the specified file. - * @return YES on success, NO otherwise. - */ -- (BOOL)setHearbeatDate:(NSDate *)date forTag:(NSString *)tag; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULKeychainStorage.h b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULKeychainStorage.h deleted file mode 100644 index dc01a83..0000000 --- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULKeychainStorage.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@class FBLPromise<ValueType>; - -NS_ASSUME_NONNULL_BEGIN - -/// The class provides a convenient abstraction on top of the iOS Keychain API to save data. -@interface GULKeychainStorage : NSObject - -- (instancetype)init NS_UNAVAILABLE; - -/** Initializes the keychain storage with Keychain Service name. - * @param service A Keychain Service name that will be used to store and retrieve objects. See also - * `kSecAttrService`. - */ -- (instancetype)initWithService:(NSString *)service; - -/** - * Get an object by key. - * @param key The key. - * @param objectClass The expected object class required by `NSSecureCoding`. - * @param accessGroup The Keychain Access Group. - * - * @return Returns a promise. It is resolved with an object stored by key if exists. It is resolved - * with `nil` when the object not found. It fails on a Keychain error. - */ -- (FBLPromise<id<NSSecureCoding>> *)getObjectForKey:(NSString *)key - objectClass:(Class)objectClass - accessGroup:(nullable NSString *)accessGroup; - -/** - * Saves the given object by the given key. - * @param object The object to store. - * @param key The key to store the object. If there is an existing object by the key, it will be - * overridden. - * @param accessGroup The Keychain Access Group. - * - * @return Returns which is resolved with `[NSNull null]` on success. - */ -- (FBLPromise<NSNull *> *)setObject:(id<NSSecureCoding>)object - forKey:(NSString *)key - accessGroup:(nullable NSString *)accessGroup; - -/** - * Removes the object by the given key. - * @param key The key to store the object. If there is an existing object by the key, it will be - * overridden. - * @param accessGroup The Keychain Access Group. - * - * @return Returns which is resolved with `[NSNull null]` on success. - */ -- (FBLPromise<NSNull *> *)removeObjectForKey:(NSString *)key - accessGroup:(nullable NSString *)accessGroup; - -#if TARGET_OS_OSX -/// If not `nil`, then only this keychain will be used to save and read data (see -/// `kSecMatchSearchList` and `kSecUseKeychain`. It is mostly intended to be used by unit tests. -@property(nonatomic, nullable) SecKeychainRef keychainRef; -#endif // TARGET_OSX - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULKeychainUtils.h b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULKeychainUtils.h deleted file mode 100644 index de4bef2..0000000 --- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULKeychainUtils.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -FOUNDATION_EXPORT NSString *const kGULKeychainUtilsErrorDomain; - -/// Helper functions to access Keychain. -@interface GULKeychainUtils : NSObject - -/** Fetches a keychain item data matching to the provided query. - * @param query A dictionary with Keychain query parameters. See docs for `SecItemCopyMatching` for - * details. - * @param outError A pointer to `NSError` instance or `NULL`. The instance at `outError` will be - * assigned with an error if there is. - * @returns Data for the first Keychain Item matching the provided query or `nil` if there is not - * such an item (`outError` will be `nil` in this case) or an error occurred. - */ -+ (nullable NSData *)getItemWithQuery:(NSDictionary *)query - error:(NSError *_Nullable *_Nullable)outError; - -/** Stores data to a Keychain Item matching to the provided query. An existing Keychain Item - * matching the query parameters will be updated or a new will be created. - * @param item A Keychain Item data to store. - * @param query A dictionary with Keychain query parameters. See docs for `SecItemAdd` and - * `SecItemUpdate` for details. - * @param outError A pointer to `NSError` instance or `NULL`. The instance at `outError` will be - * assigned with an error if there is. - * @returns `YES` when data was successfully stored, `NO` otherwise. - */ -+ (BOOL)setItem:(NSData *)item - withQuery:(NSDictionary *)query - error:(NSError *_Nullable *_Nullable)outError; - -/** Removes a Keychain Item matching to the provided query. - * @param query A dictionary with Keychain query parameters. See docs for `SecItemDelete` for - * details. - * @param outError A pointer to `NSError` instance or `NULL`. The instance at `outError` will be - * assigned with an error if there is. - * @returns `YES` if the item was removed successfully or doesn't exist, `NO` otherwise. - */ -+ (BOOL)removeItemWithQuery:(NSDictionary *)query error:(NSError *_Nullable *_Nullable)outError; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULSecureCoding.h b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULSecureCoding.h deleted file mode 100644 index 8484b39..0000000 --- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GULSecureCoding.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -/** The class wraps `NSKeyedArchiver` and `NSKeyedUnarchiver` API to provide a unified secure coding - * methods for iOS versions before and after 11. - */ -@interface GULSecureCoding : NSObject - -+ (nullable id)unarchivedObjectOfClasses:(NSSet<Class> *)classes - fromData:(NSData *)data - error:(NSError **)outError; - -+ (nullable id)unarchivedObjectOfClass:(Class)class - fromData:(NSData *)data - error:(NSError **)outError; - -+ (nullable NSData *)archivedDataWithRootObject:(id<NSCoding>)object error:(NSError **)outError; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainStorage.m b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainStorage.m deleted file mode 100644 index 3777724..0000000 --- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainStorage.m +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <GoogleUtilities/GULKeychainStorage.h> -#import <Security/Security.h> - -#if __has_include(<FBLPromises/FBLPromises.h>) -#import <FBLPromises/FBLPromises.h> -#else -#import "FBLPromises.h" -#endif - -#import <GoogleUtilities/GULKeychainUtils.h> -#import <GoogleUtilities/GULSecureCoding.h> - -@interface GULKeychainStorage () -@property(nonatomic, readonly) dispatch_queue_t keychainQueue; -@property(nonatomic, readonly) dispatch_queue_t inMemoryCacheQueue; -@property(nonatomic, readonly) NSString *service; -@property(nonatomic, readonly) NSCache<NSString *, id<NSSecureCoding>> *inMemoryCache; -@end - -@implementation GULKeychainStorage - -- (instancetype)initWithService:(NSString *)service { - NSCache *cache = [[NSCache alloc] init]; - // Cache up to 5 installations. - cache.countLimit = 5; - return [self initWithService:service cache:cache]; -} - -- (instancetype)initWithService:(NSString *)service cache:(NSCache *)cache { - self = [super init]; - if (self) { - _keychainQueue = - dispatch_queue_create("com.gul.KeychainStorage.Keychain", DISPATCH_QUEUE_SERIAL); - _inMemoryCacheQueue = - dispatch_queue_create("com.gul.KeychainStorage.InMemoryCache", DISPATCH_QUEUE_SERIAL); - _service = [service copy]; - _inMemoryCache = cache; - } - return self; -} - -#pragma mark - Public - -- (FBLPromise<id<NSSecureCoding>> *)getObjectForKey:(NSString *)key - objectClass:(Class)objectClass - accessGroup:(nullable NSString *)accessGroup { - return [FBLPromise onQueue:self.inMemoryCacheQueue - do:^id _Nullable { - // Return cached object or fail otherwise. - id object = [self.inMemoryCache objectForKey:key]; - return object - ?: [[NSError alloc] - initWithDomain:FBLPromiseErrorDomain - code:FBLPromiseErrorCodeValidationFailure - userInfo:nil]; - }] - .recover(^id _Nullable(NSError *error) { - // Look for the object in the keychain. - return [self getObjectFromKeychainForKey:key - objectClass:objectClass - accessGroup:accessGroup]; - }); -} - -- (FBLPromise<NSNull *> *)setObject:(id<NSSecureCoding>)object - forKey:(NSString *)key - accessGroup:(nullable NSString *)accessGroup { - return [FBLPromise onQueue:self.inMemoryCacheQueue - do:^id _Nullable { - // Save to the in-memory cache first. - [self.inMemoryCache setObject:object forKey:[key copy]]; - return [NSNull null]; - }] - .thenOn(self.keychainQueue, ^id(id result) { - // Then store the object to the keychain. - NSDictionary *query = [self keychainQueryWithKey:key accessGroup:accessGroup]; - NSError *error; - NSData *encodedObject = [GULSecureCoding archivedDataWithRootObject:object error:&error]; - if (!encodedObject) { - return error; - } - - if (![GULKeychainUtils setItem:encodedObject withQuery:query error:&error]) { - return error; - } - - return [NSNull null]; - }); -} - -- (FBLPromise<NSNull *> *)removeObjectForKey:(NSString *)key - accessGroup:(nullable NSString *)accessGroup { - return [FBLPromise onQueue:self.inMemoryCacheQueue - do:^id _Nullable { - [self.inMemoryCache removeObjectForKey:key]; - return nil; - }] - .thenOn(self.keychainQueue, ^id(id result) { - NSDictionary *query = [self keychainQueryWithKey:key accessGroup:accessGroup]; - - NSError *error; - if (![GULKeychainUtils removeItemWithQuery:query error:&error]) { - return error; - } - - return [NSNull null]; - }); -} - -#pragma mark - Private - -- (FBLPromise<id<NSSecureCoding>> *)getObjectFromKeychainForKey:(NSString *)key - objectClass:(Class)objectClass - accessGroup:(nullable NSString *)accessGroup { - // Look for the object in the keychain. - return [FBLPromise - onQueue:self.keychainQueue - do:^id { - NSDictionary *query = [self keychainQueryWithKey:key accessGroup:accessGroup]; - NSError *error; - NSData *encodedObject = [GULKeychainUtils getItemWithQuery:query error:&error]; - - if (error) { - return error; - } - if (!encodedObject) { - return nil; - } - id object = [GULSecureCoding unarchivedObjectOfClass:objectClass - fromData:encodedObject - error:&error]; - if (error) { - return error; - } - - return object; - }] - .thenOn(self.inMemoryCacheQueue, - ^id<NSSecureCoding> _Nullable(id<NSSecureCoding> _Nullable object) { - // Save object to the in-memory cache if exists and return the object. - if (object) { - [self.inMemoryCache setObject:object forKey:[key copy]]; - } - return object; - }); -} - -- (void)resetInMemoryCache { - [self.inMemoryCache removeAllObjects]; -} - -#pragma mark - Keychain - -- (NSMutableDictionary<NSString *, id> *)keychainQueryWithKey:(NSString *)key - accessGroup:(nullable NSString *)accessGroup { - NSMutableDictionary<NSString *, id> *query = [NSMutableDictionary dictionary]; - - query[(__bridge NSString *)kSecClass] = (__bridge NSString *)kSecClassGenericPassword; - query[(__bridge NSString *)kSecAttrService] = self.service; - query[(__bridge NSString *)kSecAttrAccount] = key; - - if (accessGroup) { - query[(__bridge NSString *)kSecAttrAccessGroup] = accessGroup; - } - -#if TARGET_OS_OSX - if (self.keychainRef) { - query[(__bridge NSString *)kSecUseKeychain] = (__bridge id)(self.keychainRef); - query[(__bridge NSString *)kSecMatchSearchList] = @[ (__bridge id)(self.keychainRef) ]; - } -#endif // TARGET_OSX - - return query; -} - -@end diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainUtils.m b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainUtils.m deleted file mode 100644 index 673b6c4..0000000 --- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainUtils.m +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <GoogleUtilities/GULKeychainUtils.h> - -NSString *const kGULKeychainUtilsErrorDomain = @"com.gul.keychain.ErrorDomain"; - -@implementation GULKeychainUtils - -+ (nullable NSData *)getItemWithQuery:(NSDictionary *)query - error:(NSError *_Nullable *_Nullable)outError { - NSMutableDictionary *mutableQuery = [query mutableCopy]; - - mutableQuery[(__bridge id)kSecReturnData] = @YES; - mutableQuery[(__bridge id)kSecMatchLimit] = (__bridge id)kSecMatchLimitOne; - - CFDataRef result = NULL; - OSStatus status = - SecItemCopyMatching((__bridge CFDictionaryRef)mutableQuery, (CFTypeRef *)&result); - - if (status == errSecSuccess && result != NULL) { - if (outError) { - *outError = nil; - } - - return (__bridge_transfer NSData *)result; - } - - if (status == errSecItemNotFound) { - if (outError) { - *outError = nil; - } - } else { - if (outError) { - *outError = [self keychainErrorWithFunction:@"SecItemCopyMatching" status:status]; - } - } - return nil; -} - -+ (BOOL)setItem:(NSData *)item - withQuery:(NSDictionary *)query - error:(NSError *_Nullable *_Nullable)outError { - NSData *existingItem = [self getItemWithQuery:query error:outError]; - if (outError && *outError) { - return NO; - } - - NSMutableDictionary *mutableQuery = [query mutableCopy]; - mutableQuery[(__bridge id)kSecAttrAccessible] = - (__bridge id)kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly; - - OSStatus status; - if (!existingItem) { - mutableQuery[(__bridge id)kSecValueData] = item; - status = SecItemAdd((__bridge CFDictionaryRef)mutableQuery, NULL); - } else { - NSDictionary *attributes = @{(__bridge id)kSecValueData : item}; - status = SecItemUpdate((__bridge CFDictionaryRef)query, (__bridge CFDictionaryRef)attributes); - } - - if (status == noErr) { - if (outError) { - *outError = nil; - } - return YES; - } - - NSString *function = existingItem ? @"SecItemUpdate" : @"SecItemAdd"; - if (outError) { - *outError = [self keychainErrorWithFunction:function status:status]; - } - return NO; -} - -+ (BOOL)removeItemWithQuery:(NSDictionary *)query error:(NSError *_Nullable *_Nullable)outError { - OSStatus status = SecItemDelete((__bridge CFDictionaryRef)query); - - if (status == noErr || status == errSecItemNotFound) { - if (outError) { - *outError = nil; - } - return YES; - } - - if (outError) { - *outError = [self keychainErrorWithFunction:@"SecItemDelete" status:status]; - } - return NO; -} - -#pragma mark - Errors - -+ (NSError *)keychainErrorWithFunction:(NSString *)keychainFunction status:(OSStatus)status { - NSString *failureReason = [NSString stringWithFormat:@"%@ (%li)", keychainFunction, (long)status]; - NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey : failureReason}; - return [NSError errorWithDomain:kGULKeychainUtilsErrorDomain code:0 userInfo:userInfo]; -} - -@end diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.h b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.h deleted file mode 100644 index d550264..0000000 --- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -@interface GULAppEnvironmentUtil : NSObject - -/// Indicates whether the app is from Apple Store or not. Returns NO if the app is on simulator, -/// development environment or sideloaded. -+ (BOOL)isFromAppStore; - -/// Indicates whether the app is a Testflight app. Returns YES if the app has sandbox receipt. -/// Returns NO otherwise. -+ (BOOL)isAppStoreReceiptSandbox; - -/// Indicates whether the app is on simulator or not at runtime depending on the device -/// architecture. -+ (BOOL)isSimulator; - -/// The current device model. Returns an empty string if device model cannot be retrieved. -+ (NSString *)deviceModel; - -/// The current operating system version. Returns an empty string if the system version cannot be -/// retrieved. -+ (NSString *)systemVersion; - -/// Indicates whether it is running inside an extension or an app. -+ (BOOL)isAppExtension; - -/// @return Returns @YES when is run on iOS version greater or equal to 7.0 -+ (BOOL)isIOS7OrHigher; - -@end diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m deleted file mode 100644 index 8b1ac6a..0000000 --- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m +++ /dev/null @@ -1,267 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.h" - -#import <Foundation/Foundation.h> -#import <dlfcn.h> -#import <mach-o/dyld.h> -#import <sys/utsname.h> - -#if TARGET_OS_IOS -#import <UIKit/UIKit.h> -#endif - -/// The encryption info struct and constants are missing from the iPhoneSimulator SDK, but not from -/// the iPhoneOS or Mac OS X SDKs. Since one doesn't ever ship a Simulator binary, we'll just -/// provide the definitions here. -#if TARGET_OS_SIMULATOR && !defined(LC_ENCRYPTION_INFO) -#define LC_ENCRYPTION_INFO 0x21 -struct encryption_info_command { - uint32_t cmd; - uint32_t cmdsize; - uint32_t cryptoff; - uint32_t cryptsize; - uint32_t cryptid; -}; -#endif - -@implementation GULAppEnvironmentUtil - -/// A key for the Info.plist to enable or disable checking if the App Store is running in a sandbox. -/// This will affect your data integrity when using Firebase Analytics, as it will disable some -/// necessary checks. -static NSString *const kFIRAppStoreReceiptURLCheckEnabledKey = - @"FirebaseAppStoreReceiptURLCheckEnabled"; - -/// The file name of the sandbox receipt. This is available on iOS >= 8.0 -static NSString *const kFIRAIdentitySandboxReceiptFileName = @"sandboxReceipt"; - -/// The following copyright from Landon J. Fuller applies to the isAppEncrypted function. -/// -/// Copyright (c) 2017 Landon J. Fuller <landon@landonf.org> -/// All rights reserved. -/// -/// Permission is hereby granted, free of charge, to any person obtaining a copy of this software -/// and associated documentation files (the "Software"), to deal in the Software without -/// restriction, including without limitation the rights to use, copy, modify, merge, publish, -/// distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the -/// Software is furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in all copies or -/// substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING -/// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -/// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -/// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -/// -/// Comment from <a href="http://iphonedevwiki.net/index.php/Crack_prevention">iPhone Dev Wiki -/// Crack Prevention</a>: -/// App Store binaries are signed by both their developer and Apple. This encrypts the binary so -/// that decryption keys are needed in order to make the binary readable. When iOS executes the -/// binary, the decryption keys are used to decrypt the binary into a readable state where it is -/// then loaded into memory and executed. iOS can tell the encryption status of a binary via the -/// cryptid structure member of LC_ENCRYPTION_INFO MachO load command. If cryptid is a non-zero -/// value then the binary is encrypted. -/// -/// 'Cracking' works by letting the kernel decrypt the binary then siphoning the decrypted data into -/// a new binary file, resigning, and repackaging. This will only work on jailbroken devices as -/// codesignature validation has been removed. Resigning takes place because while the codesignature -/// doesn't have to be valid thanks to the jailbreak, it does have to be in place unless you have -/// AppSync or similar to disable codesignature checks. -/// -/// More information at <a href="http://landonf.org/2009/02/index.html">Landon Fuller's blog</a> -static BOOL IsAppEncrypted() { - const struct mach_header *executableHeader = NULL; - for (uint32_t i = 0; i < _dyld_image_count(); i++) { - const struct mach_header *header = _dyld_get_image_header(i); - if (header && header->filetype == MH_EXECUTE) { - executableHeader = header; - break; - } - } - - if (!executableHeader) { - return NO; - } - - BOOL is64bit = (executableHeader->magic == MH_MAGIC_64); - uintptr_t cursor = (uintptr_t)executableHeader + - (is64bit ? sizeof(struct mach_header_64) : sizeof(struct mach_header)); - const struct segment_command *segmentCommand = NULL; - uint32_t i = 0; - - while (i++ < executableHeader->ncmds) { - segmentCommand = (struct segment_command *)cursor; - - if (!segmentCommand) { - continue; - } - - if ((!is64bit && segmentCommand->cmd == LC_ENCRYPTION_INFO) || - (is64bit && segmentCommand->cmd == LC_ENCRYPTION_INFO_64)) { - if (is64bit) { - struct encryption_info_command_64 *cryptCmd = - (struct encryption_info_command_64 *)segmentCommand; - return cryptCmd && cryptCmd->cryptid != 0; - } else { - struct encryption_info_command *cryptCmd = (struct encryption_info_command *)segmentCommand; - return cryptCmd && cryptCmd->cryptid != 0; - } - } - cursor += segmentCommand->cmdsize; - } - - return NO; -} - -static BOOL HasSCInfoFolder() { -#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH - NSString *bundlePath = [NSBundle mainBundle].bundlePath; - NSString *scInfoPath = [bundlePath stringByAppendingPathComponent:@"SC_Info"]; - return [[NSFileManager defaultManager] fileExistsAtPath:scInfoPath]; -#elif TARGET_OS_OSX - return NO; -#endif -} - -static BOOL HasEmbeddedMobileProvision() { -#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH - return [[NSBundle mainBundle] pathForResource:@"embedded" ofType:@"mobileprovision"].length > 0; -#elif TARGET_OS_OSX - return NO; -#endif -} - -+ (BOOL)isFromAppStore { - static dispatch_once_t isEncryptedOnce; - static BOOL isEncrypted = NO; - - dispatch_once(&isEncryptedOnce, ^{ - isEncrypted = IsAppEncrypted(); - }); - - if ([GULAppEnvironmentUtil isSimulator]) { - return NO; - } - - // If an app contain the sandboxReceipt file, it means its coming from TestFlight - // This must be checked before the SCInfo Folder check below since TestFlight apps may - // also have an SCInfo folder. - if ([GULAppEnvironmentUtil isAppStoreReceiptSandbox]) { - return NO; - } - - if (HasSCInfoFolder()) { - // When iTunes downloads a .ipa, it also gets a customized .sinf file which is added to the - // main SC_Info directory. - return YES; - } - - // For iOS >= 8.0, iTunesMetadata.plist is moved outside of the sandbox. Any attempt to read - // the iTunesMetadata.plist outside of the sandbox will be rejected by Apple. - // If the app does not contain the embedded.mobileprovision which is stripped out by Apple when - // the app is submitted to store, then it is highly likely that it is from Apple Store. - return isEncrypted && !HasEmbeddedMobileProvision(); -} - -+ (BOOL)isAppStoreReceiptSandbox { - // Since checking the App Store's receipt URL can be memory intensive, check the option in the - // Info.plist if developers opted out of this check. - id enableSandboxCheck = - [[NSBundle mainBundle] objectForInfoDictionaryKey:kFIRAppStoreReceiptURLCheckEnabledKey]; - if (enableSandboxCheck && [enableSandboxCheck isKindOfClass:[NSNumber class]] && - ![enableSandboxCheck boolValue]) { - return NO; - } -// The #else is for pre Xcode 9 where @available is not yet implemented. -#if __has_builtin(__builtin_available) - if (@available(iOS 7.0, *)) { -#else - if ([[UIDevice currentDevice].systemVersion integerValue] >= 7) { -#endif - NSURL *appStoreReceiptURL = [NSBundle mainBundle].appStoreReceiptURL; - NSString *appStoreReceiptFileName = appStoreReceiptURL.lastPathComponent; - return [appStoreReceiptFileName isEqualToString:kFIRAIdentitySandboxReceiptFileName]; - } - return NO; -} - -+ (BOOL)isSimulator { -#if TARGET_OS_SIMULATOR - return YES; -#elif TARGET_OS_MACCATALYST - return NO; -#elif TARGET_OS_IOS || TARGET_OS_TV - NSString *platform = [GULAppEnvironmentUtil deviceModel]; - return [platform isEqual:@"x86_64"] || [platform isEqual:@"i386"]; -#elif TARGET_OS_OSX - return NO; -#endif - return NO; -} - -+ (NSString *)deviceModel { - static dispatch_once_t once; - static NSString *deviceModel; - - dispatch_once(&once, ^{ - struct utsname systemInfo; - if (uname(&systemInfo) == 0) { - deviceModel = [NSString stringWithUTF8String:systemInfo.machine]; - } - }); - return deviceModel; -} - -+ (NSString *)systemVersion { -#if TARGET_OS_IOS - return [UIDevice currentDevice].systemVersion; -#elif TARGET_OS_OSX || TARGET_OS_TV || TARGET_OS_WATCH - // Assemble the systemVersion, excluding the patch version if it's 0. - NSOperatingSystemVersion osVersion = [NSProcessInfo processInfo].operatingSystemVersion; - NSMutableString *versionString = [[NSMutableString alloc] - initWithFormat:@"%ld.%ld", (long)osVersion.majorVersion, (long)osVersion.minorVersion]; - if (osVersion.patchVersion != 0) { - [versionString appendFormat:@".%ld", (long)osVersion.patchVersion]; - } - return versionString; -#endif -} - -+ (BOOL)isAppExtension { -#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH - // Documented by <a href="https://goo.gl/RRB2Up">Apple</a> - BOOL appExtension = [[[NSBundle mainBundle] bundlePath] hasSuffix:@".appex"]; - return appExtension; -#elif TARGET_OS_OSX - return NO; -#endif -} - -+ (BOOL)isIOS7OrHigher { -#if __has_builtin(__builtin_available) - if (@available(iOS 7.0, *)) { -#else - if ([[UIDevice currentDevice].systemVersion integerValue] >= 7) { -#endif - return YES; - } - - return NO; -} - -@end diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/LICENSE b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/LICENSE deleted file mode 100644 index 30a8f72..0000000 --- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/LICENSE +++ /dev/null @@ -1,247 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================================ - -The following copyright from Landon J. Fuller applies to the isAppEncrypted -function in Environment/third_party/GULAppEnvironmentUtil.m. - -Copyright (c) 2017 Landon J. Fuller <landon@landonf.org> -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Comment from -<a href="http://iphonedevwiki.net/index.php/Crack_prevention">iPhone Dev Wiki -Crack Prevention</a>: App Store binaries are signed by both their developer -and Apple. This encrypts the binary so that decryption keys are needed in order -to make the binary readable. When iOS executes the binary, the decryption keys -are used to decrypt the binary into a readable state where it is then loaded -into memory and executed. iOS can tell the encryption status of a binary via the -cryptid structure member of LC_ENCRYPTION_INFO MachO load command. If cryptid is -a non-zero value then the binary is encrypted. - -'Cracking' works by letting the kernel decrypt the binary then siphoning the -decrypted data into a new binary file, resigning, and repackaging. This will -only work on jailbroken devices as codesignature validation has been removed. -Resigning takes place because while the codesignature doesn't have to be valid -thanks to the jailbreak, it does have to be in place unless you have AppSync or -similar to disable codesignature checks. - -More information at <a href="http://landonf.org/2009/02/index.html">Landon -Fuller's blog</a> diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/GULLogger.m b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/GULLogger.m deleted file mode 100644 index 0a512da..0000000 --- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/GULLogger.m +++ /dev/null @@ -1,214 +0,0 @@ -// Copyright 2018 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "GoogleUtilities/Logger/Private/GULLogger.h" - -#include <asl.h> - -#import <GoogleUtilities/GULAppEnvironmentUtil.h> -#import <GoogleUtilities/GULLoggerLevel.h> - -/// ASL client facility name used by GULLogger. -const char *kGULLoggerASLClientFacilityName = "com.google.utilities.logger"; - -static dispatch_once_t sGULLoggerOnceToken; - -static aslclient sGULLoggerClient; - -static dispatch_queue_t sGULClientQueue; - -static BOOL sGULLoggerDebugMode; - -static GULLoggerLevel sGULLoggerMaximumLevel; - -// Allow clients to register a version to include in the log. -static const char *sVersion = ""; - -static GULLoggerService kGULLoggerLogger = @"[GULLogger]"; - -#ifdef DEBUG -/// The regex pattern for the message code. -static NSString *const kMessageCodePattern = @"^I-[A-Z]{3}[0-9]{6}$"; -static NSRegularExpression *sMessageCodeRegex; -#endif - -void GULLoggerInitializeASL(void) { - dispatch_once(&sGULLoggerOnceToken, ^{ - NSInteger majorOSVersion = [[GULAppEnvironmentUtil systemVersion] integerValue]; - uint32_t aslOptions = ASL_OPT_STDERR; -#if TARGET_OS_SIMULATOR - // The iOS 11 simulator doesn't need the ASL_OPT_STDERR flag. - if (majorOSVersion >= 11) { - aslOptions = 0; - } -#else - // Devices running iOS 10 or higher don't need the ASL_OPT_STDERR flag. - if (majorOSVersion >= 10) { - aslOptions = 0; - } -#endif // TARGET_OS_SIMULATOR - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" // asl is deprecated - // Initialize the ASL client handle. - sGULLoggerClient = asl_open(NULL, kGULLoggerASLClientFacilityName, aslOptions); - sGULLoggerMaximumLevel = GULLoggerLevelNotice; - - // Set the filter used by system/device log. Initialize in default mode. - asl_set_filter(sGULLoggerClient, ASL_FILTER_MASK_UPTO(ASL_LEVEL_NOTICE)); - - sGULClientQueue = dispatch_queue_create("GULLoggingClientQueue", DISPATCH_QUEUE_SERIAL); - dispatch_set_target_queue(sGULClientQueue, - dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)); -#ifdef DEBUG - sMessageCodeRegex = [NSRegularExpression regularExpressionWithPattern:kMessageCodePattern - options:0 - error:NULL]; -#endif - }); -} - -void GULLoggerEnableSTDERR(void) { - asl_add_log_file(sGULLoggerClient, STDERR_FILENO); -} - -void GULLoggerForceDebug(void) { - // We should enable debug mode if we're not running from App Store. - if (![GULAppEnvironmentUtil isFromAppStore]) { - sGULLoggerDebugMode = YES; - GULSetLoggerLevel(GULLoggerLevelDebug); - } -} - -__attribute__((no_sanitize("thread"))) void GULSetLoggerLevel(GULLoggerLevel loggerLevel) { - if (loggerLevel < GULLoggerLevelMin || loggerLevel > GULLoggerLevelMax) { - GULLogError(kGULLoggerLogger, NO, @"I-COR000023", @"Invalid logger level, %ld", - (long)loggerLevel); - return; - } - GULLoggerInitializeASL(); - // We should not raise the logger level if we are running from App Store. - if (loggerLevel >= GULLoggerLevelNotice && [GULAppEnvironmentUtil isFromAppStore]) { - return; - } - - sGULLoggerMaximumLevel = loggerLevel; - dispatch_async(sGULClientQueue, ^{ - asl_set_filter(sGULLoggerClient, ASL_FILTER_MASK_UPTO(loggerLevel)); - }); -} - -/** - * Check if the level is high enough to be loggable. - */ -__attribute__((no_sanitize("thread"))) BOOL GULIsLoggableLevel(GULLoggerLevel loggerLevel) { - GULLoggerInitializeASL(); - if (sGULLoggerDebugMode) { - return YES; - } - return (BOOL)(loggerLevel <= sGULLoggerMaximumLevel); -} - -#ifdef DEBUG -void GULResetLogger() { - sGULLoggerOnceToken = 0; -} - -aslclient getGULLoggerClient() { - return sGULLoggerClient; -} - -dispatch_queue_t getGULClientQueue() { - return sGULClientQueue; -} - -BOOL getGULLoggerDebugMode() { - return sGULLoggerDebugMode; -} -#endif - -void GULLoggerRegisterVersion(const char *version) { - sVersion = version; -} - -void GULLogBasic(GULLoggerLevel level, - GULLoggerService service, - BOOL forceLog, - NSString *messageCode, - NSString *message, - va_list args_ptr) { - GULLoggerInitializeASL(); - if (!(level <= sGULLoggerMaximumLevel || sGULLoggerDebugMode || forceLog)) { - return; - } - -#ifdef DEBUG - NSCAssert(messageCode.length == 11, @"Incorrect message code length."); - NSRange messageCodeRange = NSMakeRange(0, messageCode.length); - NSUInteger numberOfMatches = [sMessageCodeRegex numberOfMatchesInString:messageCode - options:0 - range:messageCodeRange]; - NSCAssert(numberOfMatches == 1, @"Incorrect message code format."); -#endif - NSString *logMsg; - if (args_ptr == NULL) { - logMsg = message; - } else { - logMsg = [[NSString alloc] initWithFormat:message arguments:args_ptr]; - } - logMsg = [NSString stringWithFormat:@"%s - %@[%@] %@", sVersion, service, messageCode, logMsg]; - dispatch_async(sGULClientQueue, ^{ - asl_log(sGULLoggerClient, NULL, (int)level, "%s", logMsg.UTF8String); - }); -} -#pragma clang diagnostic pop - -/** - * Generates the logging functions using macros. - * - * Calling GULLogError({service}, @"I-XYZ000001", @"Configure %@ failed.", @"blah") shows: - * yyyy-mm-dd hh:mm:ss.SSS sender[PID] <Error> [{service}][I-XYZ000001] Configure blah failed. - * Calling GULLogDebug({service}, @"I-XYZ000001", @"Configure succeed.") shows: - * yyyy-mm-dd hh:mm:ss.SSS sender[PID] <Debug> [{service}][I-XYZ000001] Configure succeed. - */ -#define GUL_LOGGING_FUNCTION(level) \ - void GULLog##level(GULLoggerService service, BOOL force, NSString *messageCode, \ - NSString *message, ...) { \ - va_list args_ptr; \ - va_start(args_ptr, message); \ - GULLogBasic(GULLoggerLevel##level, service, force, messageCode, message, args_ptr); \ - va_end(args_ptr); \ - } - -GUL_LOGGING_FUNCTION(Error) -GUL_LOGGING_FUNCTION(Warning) -GUL_LOGGING_FUNCTION(Notice) -GUL_LOGGING_FUNCTION(Info) -GUL_LOGGING_FUNCTION(Debug) - -#undef GUL_MAKE_LOGGER - -#pragma mark - GULLoggerWrapper - -@implementation GULLoggerWrapper - -+ (void)logWithLevel:(GULLoggerLevel)level - withService:(GULLoggerService)service - withCode:(NSString *)messageCode - withMessage:(NSString *)message - withArgs:(va_list)args { - GULLogBasic(level, service, NO, messageCode, message, args); -} - -@end diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/Private/GULLogger.h b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/Private/GULLogger.h deleted file mode 100644 index ff42576..0000000 --- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/Private/GULLogger.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import <GoogleUtilities/GULLoggerLevel.h> - -NS_ASSUME_NONNULL_BEGIN - -/** - * The services used in the logger. - */ -typedef NSString *const GULLoggerService; - -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus - -/** - * Initialize GULLogger. - */ -extern void GULLoggerInitializeASL(void); - -/** - * Override log level to Debug. - */ -void GULLoggerForceDebug(void); - -/** - * Turn on logging to STDERR. - */ -extern void GULLoggerEnableSTDERR(void); - -/** - * Changes the default logging level of GULLoggerLevelNotice to a user-specified level. - * The default level cannot be set above GULLoggerLevelNotice if the app is running from App Store. - * (required) log level (one of the GULLoggerLevel enum values). - */ -extern void GULSetLoggerLevel(GULLoggerLevel loggerLevel); - -/** - * Checks if the specified logger level is loggable given the current settings. - * (required) log level (one of the GULLoggerLevel enum values). - */ -extern BOOL GULIsLoggableLevel(GULLoggerLevel loggerLevel); - -/** - * Register version to include in logs. - * (required) version - */ -extern void GULLoggerRegisterVersion(const char *version); - -/** - * Logs a message to the Xcode console and the device log. If running from AppStore, will - * not log any messages with a level higher than GULLoggerLevelNotice to avoid log spamming. - * (required) log level (one of the GULLoggerLevel enum values). - * (required) service name of type GULLoggerService. - * (required) message code starting with "I-" which means iOS, followed by a capitalized - * three-character service identifier and a six digit integer message ID that is unique - * within the service. - * An example of the message code is @"I-COR000001". - * (required) message string which can be a format string. - * (optional) variable arguments list obtained from calling va_start, used when message is a format - * string. - */ -extern void GULLogBasic(GULLoggerLevel level, - GULLoggerService service, - BOOL forceLog, - NSString *messageCode, - NSString *message, -// On 64-bit simulators, va_list is not a pointer, so cannot be marked nullable -// See: http://stackoverflow.com/q/29095469 -#if __LP64__ && TARGET_OS_SIMULATOR || TARGET_OS_OSX - va_list args_ptr -#else - va_list _Nullable args_ptr -#endif -); - -/** - * The following functions accept the following parameters in order: - * (required) service name of type GULLoggerService. - * (required) message code starting from "I-" which means iOS, followed by a capitalized - * three-character service identifier and a six digit integer message ID that is unique - * within the service. - * An example of the message code is @"I-COR000001". - * See go/firebase-log-proposal for details. - * (required) message string which can be a format string. - * (optional) the list of arguments to substitute into the format string. - * Example usage: - * GULLogError(kGULLoggerCore, @"I-COR000001", @"Configuration of %@ failed.", app.name); - */ -extern void GULLogError(GULLoggerService service, - BOOL force, - NSString *messageCode, - NSString *message, - ...) NS_FORMAT_FUNCTION(4, 5); -extern void GULLogWarning(GULLoggerService service, - BOOL force, - NSString *messageCode, - NSString *message, - ...) NS_FORMAT_FUNCTION(4, 5); -extern void GULLogNotice(GULLoggerService service, - BOOL force, - NSString *messageCode, - NSString *message, - ...) NS_FORMAT_FUNCTION(4, 5); -extern void GULLogInfo(GULLoggerService service, - BOOL force, - NSString *messageCode, - NSString *message, - ...) NS_FORMAT_FUNCTION(4, 5); -extern void GULLogDebug(GULLoggerService service, - BOOL force, - NSString *messageCode, - NSString *message, - ...) NS_FORMAT_FUNCTION(4, 5); - -#ifdef __cplusplus -} // extern "C" -#endif // __cplusplus - -@interface GULLoggerWrapper : NSObject - -/** - * Objective-C wrapper for GULLogBasic to allow weak linking to GULLogger - * (required) log level (one of the GULLoggerLevel enum values). - * (required) service name of type GULLoggerService. - * (required) message code starting with "I-" which means iOS, followed by a capitalized - * three-character service identifier and a six digit integer message ID that is unique - * within the service. - * An example of the message code is @"I-COR000001". - * (required) message string which can be a format string. - * (optional) variable arguments list obtained from calling va_start, used when message is a format - * string. - */ - -+ (void)logWithLevel:(GULLoggerLevel)level - withService:(GULLoggerService)service - withCode:(NSString *)messageCode - withMessage:(NSString *)message - withArgs:(va_list)args; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/Public/GULLoggerLevel.h b/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/Public/GULLoggerLevel.h deleted file mode 100644 index f0ee435..0000000 --- a/assign5/openTok/Pods/GoogleUtilities/GoogleUtilities/Logger/Public/GULLoggerLevel.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -/** - * The log levels used by internal logging. - */ -typedef NS_ENUM(NSInteger, GULLoggerLevel) { - /** Error level, matches ASL_LEVEL_ERR. */ - GULLoggerLevelError = 3, - /** Warning level, matches ASL_LEVEL_WARNING. */ - GULLoggerLevelWarning = 4, - /** Notice level, matches ASL_LEVEL_NOTICE. */ - GULLoggerLevelNotice = 5, - /** Info level, matches ASL_LEVEL_INFO. */ - GULLoggerLevelInfo = 6, - /** Debug level, matches ASL_LEVEL_DEBUG. */ - GULLoggerLevelDebug = 7, - /** Minimum log level. */ - GULLoggerLevelMin = GULLoggerLevelError, - /** Maximum log level. */ - GULLoggerLevelMax = GULLoggerLevelDebug -} NS_SWIFT_NAME(GoogleLoggerLevel); diff --git a/assign5/openTok/Pods/GoogleUtilities/README.md b/assign5/openTok/Pods/GoogleUtilities/README.md deleted file mode 100644 index b04a270..0000000 --- a/assign5/openTok/Pods/GoogleUtilities/README.md +++ /dev/null @@ -1,282 +0,0 @@ -# Firebase iOS Open Source Development - [![Actions Status][gh-auth-badge]][gh-actions] - [![Actions Status][gh-core-badge]][gh-actions] - [![Actions Status][gh-datatransport-badge]][gh-actions] - [![Actions Status][gh-dynamiclinks-badge]][gh-actions] - [![Actions Status][gh-firebasepod-badge]][gh-actions] - [![Actions Status][gh-firestore-badge]][gh-actions] - [![Actions Status][gh-interop-badge]][gh-actions] - [![Actions Status][gh-messaging-badge]][gh-actions] - [![Actions Status][gh-storage-badge]][gh-actions] - [![Actions Status][gh-symbolcollision-badge]][gh-actions] - [![Actions Status][gh-zip-badge]][gh-actions] - [](https://travis-ci.org/firebase/firebase-ios-sdk) - -This repository contains all Firebase iOS SDK source except FirebaseAnalytics, -FirebasePerformance, and FirebaseML. - -The repository also includes GoogleUtilities source. The -[GoogleUtilities](GoogleUtilities/README.md) pod is -a set of utilities used by Firebase and other Google products. - -Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -## Installation - -See the three subsections for details about three different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) - -### Standard pod install - -Go to -[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). - -### Installing from GitHub - -For releases starting with 5.0.0, the source for each release is also deployed -to CocoaPods master and available via standard -[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). - -These instructions can be used to access the Firebase repo at other branches, -tags, or commits. - -#### Background - -See -[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) -for instructions and options about overriding pod source locations. - -#### Accessing Firebase Source Snapshots - -All of the official releases are tagged in this repo and available via CocoaPods. To access a local -source snapshot or unreleased branch, use Podfile directives like the following: - -To access FirebaseFirestore via a branch: -``` -pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -``` - -To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: - -``` -pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' -pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' -``` - -### Carthage (iOS only) - -Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). - -### Rome - -Instructions for installing binary frameworks via -[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). - -### Using Firebase from a Framework or a library - -[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md) - -## Development - -To develop Firebase software in this repository, ensure that you have at least -the following software: - - * Xcode 10.1 (or later) - * CocoaPods 1.7.2 (or later) - * [CocoaPods generate](https://github.com/square/cocoapods-generate) - -For the pod that you want to develop: - -`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios` - -Note: If the CocoaPods cache is out of date, you may need to run -`pod repo update` before the `pod gen` command. - -Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for -those platforms. Since 10.2, Xcode does not properly handle multi-platform -CocoaPods workspaces. - -Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). - -### Development for Catalyst -* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` -* Check the Mac box in the App-iOS Build Settings -* Sign the App in the Settings Signing & Capabilities tab -* Click Pods in the Project Manager -* Add Signing to the iOS host app and unit test targets -* Select the Unit-unit scheme -* Run it to build and test - -### Adding a New Firebase Pod - -See [AddNewPod.md](AddNewPod.md). - -### Code Formatting - -To ensure that the code is formatted consistently, run the script -[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) -before creating a PR. - -Travis will verify that any code changes are done in a style compliant way. Install -`clang-format` and `swiftformat`. -These commands will get the right versions: - -``` -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c6f1cbd/Formula/clang-format.rb -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c13eda8/Formula/swiftformat.rb -``` - -Note: if you already have a newer version of these installed you may need to -`brew switch` to this version. - -To update this section, find the versions of clang-format and swiftformat.rb to -match the versions in the CI failure logs -[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). - -### Running Unit Tests - -Select a scheme and press Command-u to build a component and run its unit tests. - -#### Viewing Code Coverage (Deprecated) - -First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. - -After running the `AllUnitTests_iOS` scheme in Xcode, execute -`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` -at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. - -### Running Sample Apps -In order to run the sample apps and integration tests, you'll need valid -`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist -files without real values, but can be replaced with real plist files. To get your own -`GoogleService-Info.plist` files: - -1. Go to the [Firebase Console](https://console.firebase.google.com/) -2. Create a new Firebase project, if you don't already have one -3. For each sample app you want to test, create a new Firebase app with the sample app's bundle -identifier (e.g. `com.google.Database-Example`) -4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file -(e.g. in [Example/Database/App/](Example/Database/App/)); - -Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require -special Apple capabilities, and you will have to change the sample app to use a unique bundle -identifier that you can control in your own Apple Developer account. - -## Specific Component Instructions -See the sections below for any special instructions for those components. - -### Firebase Auth - -If you're doing specific Firebase Auth development, see -[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about -building and running the FirebaseAuth pod along with various samples and tests. - -### Firebase Database - -To run the Database Integration tests, make your database authentication rules -[public](https://firebase.google.com/docs/database/security/quickstart). - -### Firebase Storage - -To run the Storage Integration tests, follow the instructions in -[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m). - -#### Push Notifications - -Push notifications can only be delivered to specially provisioned App IDs in the developer portal. -In order to actually test receiving push notifications, you will need to: - -1. Change the bundle identifier of the sample app to something you own in your Apple Developer -account, and enable that App ID for push notifications. -2. You'll also need to -[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) -at **Project Settings > Cloud Messaging > [Your Firebase App]**. -3. Ensure your iOS device is added to your Apple Developer portal as a test device. - -#### iOS Simulator - -The iOS Simulator cannot register for remote notifications, and will not receive push notifications. -In order to receive push notifications, you'll have to follow the steps above and run the app on a -physical device. - -## Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -### tvOS, macOS, watchOS and Catalyst -Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on -tvOS, macOS, watchOS and Catalyst. - -For tvOS, checkout the [Sample](Example/tvOSSample). -For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the -[Independent Watch App Sample](Example/watchOSSample). - -Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this -repository is actively developed primarily for iOS. While we can catch basic unit test issues with -Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you -encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). - -During app setup in the console, you may get to a step that mentions something like "Checking if the app -has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst. -**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected. - -To install, add a subset of the following to the Podfile: - -``` -pod 'Firebase/ABTesting' # No watchOS support yet -pod 'Firebase/Auth' # No watchOS support yet -pod 'Firebase/Crashlytics' # No watchOS support yet -pod 'Firebase/Database' # No watchOS support yet -pod 'Firebase/Firestore' # No watchOS support yet -pod 'Firebase/Functions' # No watchOS support yet -pod 'Firebase/Messaging' -pod 'Firebase/RemoteConfig' # No watchOS support yet -pod 'Firebase/Storage' -``` - -#### Additional Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - -## Roadmap - -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source -plans and directions. - -## Contributing - -See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. - -## License - -The contents of this repository is licensed under the -[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). - -Your use of Firebase is governed by the -[Terms of Service for Firebase Services](https://firebase.google.com/terms/). - -[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions -[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg -[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg -[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg -[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg -[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg -[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg -[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg -[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg -[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg -[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg -[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg diff --git a/assign5/openTok/Pods/Headers/Private/Firebase/Firebase.h b/assign5/openTok/Pods/Headers/Private/Firebase/Firebase.h deleted file mode 100755 index e5049ca..0000000 --- a/assign5/openTok/Pods/Headers/Private/Firebase/Firebase.h +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import <FirebaseCore/FirebaseCore.h> - -#if !defined(__has_include) - #error "Firebase.h won't import anything if your compiler doesn't support __has_include. Please \ - import the headers individually." -#else - #if __has_include(<FirebaseAnalytics/FirebaseAnalytics.h>) - #import <FirebaseAnalytics/FirebaseAnalytics.h> - #endif - - #if __has_include(<FirebaseAuth/FirebaseAuth.h>) - #import <FirebaseAuth/FirebaseAuth.h> - #endif - - #if __has_include(<FirebaseCrashlytics/FirebaseCrashlytics.h>) - #import <FirebaseCrashlytics/FirebaseCrashlytics.h> - #endif - - #if __has_include(<FirebaseDatabase/FirebaseDatabase.h>) - #import <FirebaseDatabase/FirebaseDatabase.h> - #endif - - #if __has_include(<FirebaseDynamicLinks/FirebaseDynamicLinks.h>) - #import <FirebaseDynamicLinks/FirebaseDynamicLinks.h> - #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>) - #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #warning "FirebaseAnalytics.framework is not included in your target. Please add \ -`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ -Firebase Dynamic Links works as intended." - #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #endif - #endif - - #if __has_include(<FirebaseFirestore/FirebaseFirestore.h>) - #import <FirebaseFirestore/FirebaseFirestore.h> - #endif - - #if __has_include(<FirebaseFunctions/FirebaseFunctions.h>) - #import <FirebaseFunctions/FirebaseFunctions.h> - #endif - - #if __has_include(<FirebaseInAppMessaging/FirebaseInAppMessaging.h>) - #import <FirebaseInAppMessaging/FirebaseInAppMessaging.h> - #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>) - #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #warning "FirebaseAnalytics.framework is not included in your target. Please add \ -`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ -Firebase In App Messaging works as intended." - #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #endif - #endif - - #if __has_include(<FirebaseInstanceID/FirebaseInstanceID.h>) - #import <FirebaseInstanceID/FirebaseInstanceID.h> - #endif - - #if __has_include(<FirebaseMessaging/FirebaseMessaging.h>) - #import <FirebaseMessaging/FirebaseMessaging.h> - #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>) - #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #warning "FirebaseAnalytics.framework is not included in your target. Please add \ -`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ -Firebase Messaging works as intended." - #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #endif -#endif - - #if __has_include(<FirebaseMLCommon/FirebaseMLCommon.h>) - #import <FirebaseMLCommon/FirebaseMLCommon.h> - #endif - - #if __has_include(<FirebaseMLModelInterpreter/FirebaseMLModelInterpreter.h>) - #import <FirebaseMLModelInterpreter/FirebaseMLModelInterpreter.h> - #endif - - #if __has_include(<FirebaseMLNLLanguageID/FirebaseMLNLLanguageID.h>) - #import <FirebaseMLNLLanguageID/FirebaseMLNLLanguageID.h> - #endif - - #if __has_include(<FirebaseMLNLSmartReply/FirebaseMLNLSmartReply.h>) - #import <FirebaseMLNLSmartReply/FirebaseMLNLSmartReply.h> - #endif - - #if __has_include(<FirebaseMLNLTranslate/FirebaseMLNLTranslate.h>) - #import <FirebaseMLNLTranslate/FirebaseMLNLTranslate.h> - #endif - - #if __has_include(<FirebaseMLNaturalLanguage/FirebaseMLNaturalLanguage.h>) - #import <FirebaseMLNaturalLanguage/FirebaseMLNaturalLanguage.h> - #endif - - #if __has_include(<FirebaseMLVision/FirebaseMLVision.h>) - #import <FirebaseMLVision/FirebaseMLVision.h> - #endif - - #if __has_include(<FirebaseMLVisionAutoML/FirebaseMLVisionAutoML.h>) - #import <FirebaseMLVisionAutoML/FirebaseMLVisionAutoML.h> - #endif - - #if __has_include(<FirebaseMLVisionBarcodeModel/FirebaseMLVisionBarcodeModel.h>) - #import <FirebaseMLVisionBarcodeModel/FirebaseMLVisionBarcodeModel.h> - #endif - - #if __has_include(<FirebaseMLVisionFaceModel/FirebaseMLVisionFaceModel.h>) - #import <FirebaseMLVisionFaceModel/FirebaseMLVisionFaceModel.h> - #endif - - #if __has_include(<FirebaseMLVisionLabelModel/FirebaseMLVisionLabelModel.h>) - #import <FirebaseMLVisionLabelModel/FirebaseMLVisionLabelModel.h> - #endif - - #if __has_include(<FirebaseMLVisionObjectDetection/FirebaseMLVisionObjectDetection.h>) - #import <FirebaseMLVisionObjectDetection/FirebaseMLVisionObjectDetection.h> - #endif - - #if __has_include(<FirebaseMLVisionTextModel/FirebaseMLVisionTextModel.h>) - #import <FirebaseMLVisionTextModel/FirebaseMLVisionTextModel.h> - #endif - - #if __has_include(<FirebasePerformance/FirebasePerformance.h>) - #import <FirebasePerformance/FirebasePerformance.h> - #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>) - #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #warning "FirebaseAnalytics.framework is not included in your target. Please add \ -`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ -Firebase Performance works as intended." - #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #endif - #endif - - #if __has_include(<FirebaseRemoteConfig/FirebaseRemoteConfig.h>) - #import <FirebaseRemoteConfig/FirebaseRemoteConfig.h> - #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>) - #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #warning "FirebaseAnalytics.framework is not included in your target. Please add \ -`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ -Firebase Remote Config works as intended." - #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #endif - #endif - - #if __has_include(<FirebaseStorage/FirebaseStorage.h>) - #import <FirebaseStorage/FirebaseStorage.h> - #endif - - #if __has_include(<GoogleMobileAds/GoogleMobileAds.h>) - #import <GoogleMobileAds/GoogleMobileAds.h> - #endif - - #if __has_include(<Fabric/Fabric.h>) - #import <Fabric/Fabric.h> - #endif - - #if __has_include(<Crashlytics/Crashlytics.h>) - #import <Crashlytics/Crashlytics.h> - #endif - -#endif // defined(__has_include) diff --git a/assign5/openTok/Pods/Headers/Private/FirebaseAuthInterop/FIRAuthInterop.h b/assign5/openTok/Pods/Headers/Private/FirebaseAuthInterop/FIRAuthInterop.h deleted file mode 100644 index a33da7c..0000000 --- a/assign5/openTok/Pods/Headers/Private/FirebaseAuthInterop/FIRAuthInterop.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FIRAuthInterop_h -#define FIRAuthInterop_h - -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -/** @typedef FIRTokenCallback - @brief The type of block which gets called when a token is ready. - */ -typedef void (^FIRTokenCallback)(NSString *_Nullable token, NSError *_Nullable error) - NS_SWIFT_NAME(TokenCallback); - -/// Common methods for Auth interoperability. -NS_SWIFT_NAME(AuthInterop) -@protocol FIRAuthInterop - -/// Retrieves the Firebase authentication token, possibly refreshing it if it has expired. -- (void)getTokenForcingRefresh:(BOOL)forceRefresh withCallback:(FIRTokenCallback)callback; - -/// Get the current Auth user's UID. Returns nil if there is no user signed in. -- (nullable NSString *)getUserID; - -@end - -NS_ASSUME_NONNULL_END - -#endif /* FIRAuthInterop_h */ diff --git a/assign5/openTok/Pods/Headers/Private/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h b/assign5/openTok/Pods/Headers/Private/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h deleted file mode 100644 index 69c4072..0000000 --- a/assign5/openTok/Pods/Headers/Private/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -/** If present, is a BOOL wrapped in an NSNumber. */ -#define kFIRCDIsDataCollectionDefaultEnabledKey @"FIRCDIsDataCollectionDefaultEnabledKey" - -/** If present, is an int32_t wrapped in an NSNumber. */ -#define kFIRCDConfigurationTypeKey @"FIRCDConfigurationTypeKey" - -/** If present, is an NSString. */ -#define kFIRCDSdkNameKey @"FIRCDSdkNameKey" - -/** If present, is an NSString. */ -#define kFIRCDSdkVersionKey @"FIRCDSdkVersionKey" - -/** If present, is an int32_t wrapped in an NSNumber. */ -#define kFIRCDllAppsCountKey @"FIRCDllAppsCountKey" - -/** If present, is an NSString. */ -#define kFIRCDGoogleAppIDKey @"FIRCDGoogleAppIDKey" - -/** If present, is an NSString. */ -#define kFIRCDBundleIDKey @"FIRCDBundleID" - -/** If present, is a BOOL wrapped in an NSNumber. */ -#define kFIRCDUsingOptionsFromDefaultPlistKey @"FIRCDUsingOptionsFromDefaultPlistKey" - -/** If present, is an NSString. */ -#define kFIRCDLibraryVersionIDKey @"FIRCDLibraryVersionIDKey" - -/** If present, is an NSString. */ -#define kFIRCDFirebaseUserAgentKey @"FIRCDFirebaseUserAgentKey" - -/** Defines the interface of a data object needed to log diagnostics data. */ -@protocol FIRCoreDiagnosticsData <NSObject> - -@required - -/** A dictionary containing data (non-exhaustive) to be logged in diagnostics. */ -@property(nonatomic) NSDictionary<NSString *, id> *diagnosticObjects; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/Headers/Private/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h b/assign5/openTok/Pods/Headers/Private/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h deleted file mode 100644 index 2b0eb71..0000000 --- a/assign5/openTok/Pods/Headers/Private/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import "FIRCoreDiagnosticsData.h" - -NS_ASSUME_NONNULL_BEGIN - -/** Allows the interoperation of FirebaseCore and FirebaseCoreDiagnostics. */ -@protocol FIRCoreDiagnosticsInterop <NSObject> - -/** Sends the given diagnostics data. - * - * @param diagnosticsData The diagnostics data object to send. - */ -+ (void)sendDiagnosticsData:(id<FIRCoreDiagnosticsData>)diagnosticsData; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/Headers/Public/Firebase/Firebase.h b/assign5/openTok/Pods/Headers/Public/Firebase/Firebase.h deleted file mode 100755 index e5049ca..0000000 --- a/assign5/openTok/Pods/Headers/Public/Firebase/Firebase.h +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import <FirebaseCore/FirebaseCore.h> - -#if !defined(__has_include) - #error "Firebase.h won't import anything if your compiler doesn't support __has_include. Please \ - import the headers individually." -#else - #if __has_include(<FirebaseAnalytics/FirebaseAnalytics.h>) - #import <FirebaseAnalytics/FirebaseAnalytics.h> - #endif - - #if __has_include(<FirebaseAuth/FirebaseAuth.h>) - #import <FirebaseAuth/FirebaseAuth.h> - #endif - - #if __has_include(<FirebaseCrashlytics/FirebaseCrashlytics.h>) - #import <FirebaseCrashlytics/FirebaseCrashlytics.h> - #endif - - #if __has_include(<FirebaseDatabase/FirebaseDatabase.h>) - #import <FirebaseDatabase/FirebaseDatabase.h> - #endif - - #if __has_include(<FirebaseDynamicLinks/FirebaseDynamicLinks.h>) - #import <FirebaseDynamicLinks/FirebaseDynamicLinks.h> - #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>) - #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #warning "FirebaseAnalytics.framework is not included in your target. Please add \ -`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ -Firebase Dynamic Links works as intended." - #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #endif - #endif - - #if __has_include(<FirebaseFirestore/FirebaseFirestore.h>) - #import <FirebaseFirestore/FirebaseFirestore.h> - #endif - - #if __has_include(<FirebaseFunctions/FirebaseFunctions.h>) - #import <FirebaseFunctions/FirebaseFunctions.h> - #endif - - #if __has_include(<FirebaseInAppMessaging/FirebaseInAppMessaging.h>) - #import <FirebaseInAppMessaging/FirebaseInAppMessaging.h> - #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>) - #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #warning "FirebaseAnalytics.framework is not included in your target. Please add \ -`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ -Firebase In App Messaging works as intended." - #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #endif - #endif - - #if __has_include(<FirebaseInstanceID/FirebaseInstanceID.h>) - #import <FirebaseInstanceID/FirebaseInstanceID.h> - #endif - - #if __has_include(<FirebaseMessaging/FirebaseMessaging.h>) - #import <FirebaseMessaging/FirebaseMessaging.h> - #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>) - #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #warning "FirebaseAnalytics.framework is not included in your target. Please add \ -`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ -Firebase Messaging works as intended." - #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #endif -#endif - - #if __has_include(<FirebaseMLCommon/FirebaseMLCommon.h>) - #import <FirebaseMLCommon/FirebaseMLCommon.h> - #endif - - #if __has_include(<FirebaseMLModelInterpreter/FirebaseMLModelInterpreter.h>) - #import <FirebaseMLModelInterpreter/FirebaseMLModelInterpreter.h> - #endif - - #if __has_include(<FirebaseMLNLLanguageID/FirebaseMLNLLanguageID.h>) - #import <FirebaseMLNLLanguageID/FirebaseMLNLLanguageID.h> - #endif - - #if __has_include(<FirebaseMLNLSmartReply/FirebaseMLNLSmartReply.h>) - #import <FirebaseMLNLSmartReply/FirebaseMLNLSmartReply.h> - #endif - - #if __has_include(<FirebaseMLNLTranslate/FirebaseMLNLTranslate.h>) - #import <FirebaseMLNLTranslate/FirebaseMLNLTranslate.h> - #endif - - #if __has_include(<FirebaseMLNaturalLanguage/FirebaseMLNaturalLanguage.h>) - #import <FirebaseMLNaturalLanguage/FirebaseMLNaturalLanguage.h> - #endif - - #if __has_include(<FirebaseMLVision/FirebaseMLVision.h>) - #import <FirebaseMLVision/FirebaseMLVision.h> - #endif - - #if __has_include(<FirebaseMLVisionAutoML/FirebaseMLVisionAutoML.h>) - #import <FirebaseMLVisionAutoML/FirebaseMLVisionAutoML.h> - #endif - - #if __has_include(<FirebaseMLVisionBarcodeModel/FirebaseMLVisionBarcodeModel.h>) - #import <FirebaseMLVisionBarcodeModel/FirebaseMLVisionBarcodeModel.h> - #endif - - #if __has_include(<FirebaseMLVisionFaceModel/FirebaseMLVisionFaceModel.h>) - #import <FirebaseMLVisionFaceModel/FirebaseMLVisionFaceModel.h> - #endif - - #if __has_include(<FirebaseMLVisionLabelModel/FirebaseMLVisionLabelModel.h>) - #import <FirebaseMLVisionLabelModel/FirebaseMLVisionLabelModel.h> - #endif - - #if __has_include(<FirebaseMLVisionObjectDetection/FirebaseMLVisionObjectDetection.h>) - #import <FirebaseMLVisionObjectDetection/FirebaseMLVisionObjectDetection.h> - #endif - - #if __has_include(<FirebaseMLVisionTextModel/FirebaseMLVisionTextModel.h>) - #import <FirebaseMLVisionTextModel/FirebaseMLVisionTextModel.h> - #endif - - #if __has_include(<FirebasePerformance/FirebasePerformance.h>) - #import <FirebasePerformance/FirebasePerformance.h> - #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>) - #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #warning "FirebaseAnalytics.framework is not included in your target. Please add \ -`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ -Firebase Performance works as intended." - #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #endif - #endif - - #if __has_include(<FirebaseRemoteConfig/FirebaseRemoteConfig.h>) - #import <FirebaseRemoteConfig/FirebaseRemoteConfig.h> - #if !__has_include(<FirebaseAnalytics/FirebaseAnalytics.h>) - #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #warning "FirebaseAnalytics.framework is not included in your target. Please add \ -`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ -Firebase Remote Config works as intended." - #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #endif - #endif - - #if __has_include(<FirebaseStorage/FirebaseStorage.h>) - #import <FirebaseStorage/FirebaseStorage.h> - #endif - - #if __has_include(<GoogleMobileAds/GoogleMobileAds.h>) - #import <GoogleMobileAds/GoogleMobileAds.h> - #endif - - #if __has_include(<Fabric/Fabric.h>) - #import <Fabric/Fabric.h> - #endif - - #if __has_include(<Crashlytics/Crashlytics.h>) - #import <Crashlytics/Crashlytics.h> - #endif - -#endif // defined(__has_include) diff --git a/assign5/openTok/Pods/Headers/Public/FirebaseAuthInterop/FIRAuthInterop.h b/assign5/openTok/Pods/Headers/Public/FirebaseAuthInterop/FIRAuthInterop.h deleted file mode 100644 index a33da7c..0000000 --- a/assign5/openTok/Pods/Headers/Public/FirebaseAuthInterop/FIRAuthInterop.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FIRAuthInterop_h -#define FIRAuthInterop_h - -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -/** @typedef FIRTokenCallback - @brief The type of block which gets called when a token is ready. - */ -typedef void (^FIRTokenCallback)(NSString *_Nullable token, NSError *_Nullable error) - NS_SWIFT_NAME(TokenCallback); - -/// Common methods for Auth interoperability. -NS_SWIFT_NAME(AuthInterop) -@protocol FIRAuthInterop - -/// Retrieves the Firebase authentication token, possibly refreshing it if it has expired. -- (void)getTokenForcingRefresh:(BOOL)forceRefresh withCallback:(FIRTokenCallback)callback; - -/// Get the current Auth user's UID. Returns nil if there is no user signed in. -- (nullable NSString *)getUserID; - -@end - -NS_ASSUME_NONNULL_END - -#endif /* FIRAuthInterop_h */ diff --git a/assign5/openTok/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h b/assign5/openTok/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h deleted file mode 100644 index 69c4072..0000000 --- a/assign5/openTok/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -/** If present, is a BOOL wrapped in an NSNumber. */ -#define kFIRCDIsDataCollectionDefaultEnabledKey @"FIRCDIsDataCollectionDefaultEnabledKey" - -/** If present, is an int32_t wrapped in an NSNumber. */ -#define kFIRCDConfigurationTypeKey @"FIRCDConfigurationTypeKey" - -/** If present, is an NSString. */ -#define kFIRCDSdkNameKey @"FIRCDSdkNameKey" - -/** If present, is an NSString. */ -#define kFIRCDSdkVersionKey @"FIRCDSdkVersionKey" - -/** If present, is an int32_t wrapped in an NSNumber. */ -#define kFIRCDllAppsCountKey @"FIRCDllAppsCountKey" - -/** If present, is an NSString. */ -#define kFIRCDGoogleAppIDKey @"FIRCDGoogleAppIDKey" - -/** If present, is an NSString. */ -#define kFIRCDBundleIDKey @"FIRCDBundleID" - -/** If present, is a BOOL wrapped in an NSNumber. */ -#define kFIRCDUsingOptionsFromDefaultPlistKey @"FIRCDUsingOptionsFromDefaultPlistKey" - -/** If present, is an NSString. */ -#define kFIRCDLibraryVersionIDKey @"FIRCDLibraryVersionIDKey" - -/** If present, is an NSString. */ -#define kFIRCDFirebaseUserAgentKey @"FIRCDFirebaseUserAgentKey" - -/** Defines the interface of a data object needed to log diagnostics data. */ -@protocol FIRCoreDiagnosticsData <NSObject> - -@required - -/** A dictionary containing data (non-exhaustive) to be logged in diagnostics. */ -@property(nonatomic) NSDictionary<NSString *, id> *diagnosticObjects; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h b/assign5/openTok/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h deleted file mode 100644 index 2b0eb71..0000000 --- a/assign5/openTok/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#import "FIRCoreDiagnosticsData.h" - -NS_ASSUME_NONNULL_BEGIN - -/** Allows the interoperation of FirebaseCore and FirebaseCoreDiagnostics. */ -@protocol FIRCoreDiagnosticsInterop <NSObject> - -/** Sends the given diagnostics data. - * - * @param diagnosticsData The diagnostics data object to send. - */ -+ (void)sendDiagnosticsData:(id<FIRCoreDiagnosticsData>)diagnosticsData; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/Manifest.lock b/assign5/openTok/Pods/Manifest.lock deleted file mode 100644 index 0fa5d3c..0000000 --- a/assign5/openTok/Pods/Manifest.lock +++ /dev/null @@ -1,74 +0,0 @@ -PODS: - - Firebase/CoreOnly (6.23.0): - - FirebaseCore (= 6.6.7) - - Firebase/Database (6.23.0): - - Firebase/CoreOnly - - FirebaseDatabase (~> 6.2.0) - - FirebaseAuthInterop (1.1.0) - - FirebaseCore (6.6.7): - - FirebaseCoreDiagnostics (~> 1.2) - - FirebaseCoreDiagnosticsInterop (~> 1.2) - - GoogleUtilities/Environment (~> 6.5) - - GoogleUtilities/Logger (~> 6.5) - - FirebaseCoreDiagnostics (1.2.4): - - FirebaseCoreDiagnosticsInterop (~> 1.2) - - GoogleDataTransportCCTSupport (~> 3.0) - - GoogleUtilities/Environment (~> 6.5) - - GoogleUtilities/Logger (~> 6.5) - - nanopb (~> 0.3.901) - - FirebaseCoreDiagnosticsInterop (1.2.0) - - FirebaseDatabase (6.2.0): - - FirebaseAuthInterop (~> 1.0) - - FirebaseCore (~> 6.0) - - leveldb-library (~> 1.22) - - GoogleDataTransport (6.0.0) - - GoogleDataTransportCCTSupport (3.0.0): - - GoogleDataTransport (~> 6.0) - - nanopb (~> 0.3.901) - - GoogleUtilities/Environment (6.6.0): - - PromisesObjC (~> 1.2) - - GoogleUtilities/Logger (6.6.0): - - GoogleUtilities/Environment - - leveldb-library (1.22) - - nanopb (0.3.9011): - - nanopb/decode (= 0.3.9011) - - nanopb/encode (= 0.3.9011) - - nanopb/decode (0.3.9011) - - nanopb/encode (0.3.9011) - - PromisesObjC (1.2.8) - -DEPENDENCIES: - - Firebase/Database - -SPEC REPOS: - trunk: - - Firebase - - FirebaseAuthInterop - - FirebaseCore - - FirebaseCoreDiagnostics - - FirebaseCoreDiagnosticsInterop - - FirebaseDatabase - - GoogleDataTransport - - GoogleDataTransportCCTSupport - - GoogleUtilities - - leveldb-library - - nanopb - - PromisesObjC - -SPEC CHECKSUMS: - Firebase: 585ae467b3edda6a5444e788fda6888f024d8d6f - FirebaseAuthInterop: a0f37ae05833af156e72028f648d313f7e7592e9 - FirebaseCore: a2788a0d5f6c1dff17b8f79b4a73654a8d4bfdbd - FirebaseCoreDiagnostics: b59c024493a409f8aecba02c99928d0d8431d159 - FirebaseCoreDiagnosticsInterop: 296e2c5f5314500a850ad0b83e9e7c10b011a850 - FirebaseDatabase: cbf2b9efe39b3f113616a2f1f140839f49d797e0 - GoogleDataTransport: 061fe7d9b476710e3cd8ea51e8e07d8b67c2b420 - GoogleDataTransportCCTSupport: 0f39025e8cf51f168711bd3fb773938d7e62ddb5 - GoogleUtilities: 39530bc0ad980530298e9c4af8549e991fd033b1 - leveldb-library: 55d93ee664b4007aac644a782d11da33fba316f7 - nanopb: 18003b5e52dab79db540fe93fe9579f399bd1ccd - PromisesObjC: c119f3cd559f50b7ae681fa59dc1acd19173b7e6 - -PODFILE CHECKSUM: 3bedbb01a41b9d1114e64e9f002246e83fffeb84 - -COCOAPODS: 1.9.1 diff --git a/assign5/openTok/Pods/Pods.xcodeproj/project.pbxproj b/assign5/openTok/Pods/Pods.xcodeproj/project.pbxproj deleted file mode 100644 index a1e044e..0000000 --- a/assign5/openTok/Pods/Pods.xcodeproj/project.pbxproj +++ /dev/null @@ -1,4612 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXAggregateTarget section */ - 072CEA044D2EF26F03496D5996BBF59F /* Firebase */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 7D9B6248E3966009CBADAFB74A1F2C6A /* Build configuration list for PBXAggregateTarget "Firebase" */; - buildPhases = ( - ); - dependencies = ( - 3EFC9F7575385B0BF97D99224E8F70F4 /* PBXTargetDependency */, - 80F51486E503FFA572D586D4646EBD73 /* PBXTargetDependency */, - ); - name = Firebase; - }; - 5EB4B0B6DA6D5C0C3365733BEAA1C485 /* FirebaseCoreDiagnosticsInterop */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 53DAF387F36CBF8A88540E369A919B2A /* Build configuration list for PBXAggregateTarget "FirebaseCoreDiagnosticsInterop" */; - buildPhases = ( - ); - dependencies = ( - ); - name = FirebaseCoreDiagnosticsInterop; - }; - 8EC0F2618965C875A96BFDBEE5D9734C /* FirebaseAuthInterop */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 99106C33EE595D192242F546552E9F40 /* Build configuration list for PBXAggregateTarget "FirebaseAuthInterop" */; - buildPhases = ( - ); - dependencies = ( - ); - name = FirebaseAuthInterop; - }; -/* End PBXAggregateTarget section */ - -/* Begin PBXBuildFile section */ - 008002B25F0D710359ADB0C08A334A18 /* FIRHeartbeatInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 77B8D860A5693BAB27B03B2D8262FBBB /* FIRHeartbeatInfo.m */; }; - 009E1F59EB2DBBF4377431DDB9CD83A7 /* FIRConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 8734EC42113C4820AC918A2ECB6EE41C /* FIRConfiguration.m */; }; - 00DC3A5E3088F6BC409056FF2759504C /* status.h in Headers */ = {isa = PBXBuildFile; fileRef = 27B04C54C4F176938DD4A50E3DAD384D /* status.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0168BD7A9B87A22117AA12A50030EB3D /* FViewProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6836B2C094BEE9CCC043393E936B87BE /* FViewProcessor.m */; }; - 01C52B14BE2E2A76B771F7D7D79A26E0 /* FSparseSnapshotTree.m in Sources */ = {isa = PBXBuildFile; fileRef = EEFA0E6408C1EE9694F24C8CDD87CC8E /* FSparseSnapshotTree.m */; }; - 01F14311F4F4FC48397BE16D21E33530 /* FTreeNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AEA59B436FE7C179D1AA762546E52F0 /* FTreeNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 02D10C14DA679930370B85710695DC08 /* GoogleDataTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = 70515A5CBED5171BEE1A7FD8B06C8338 /* GoogleDataTransport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 032657E3A1E35E842C7BF1668C6505DF /* GDTCORRegistrar.h in Headers */ = {isa = PBXBuildFile; fileRef = A908DAA989BEA273B10D102D558F47FD /* GDTCORRegistrar.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 032EDAAF8A82DD3C3052D4AC1FF89F4F /* c.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5D7BD1D203706AD133B003DE154D40AC /* c.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 04DBB989E22ABC0651DD0179BE01D09E /* FIRDiagnosticsData.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F51C701E1D20698B669E1172FD5E4CB /* FIRDiagnosticsData.m */; }; - 051C58E6804A52F6CF7B07F80DE42636 /* FMaxNode.h in Headers */ = {isa = PBXBuildFile; fileRef = C295B47E516F633178D34FA8303E944A /* FMaxNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 06FADEA97461819677F4A1759A451B54 /* FRepoInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = F9B57561D347F59214C52B97CB5421A8 /* FRepoInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 075DFD222C5E387A9669D58843D4DD45 /* dumpfile.cc in Sources */ = {isa = PBXBuildFile; fileRef = 87AE9B4D3596ECB04407EB93492E47BD /* dumpfile.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 07DA3F6F36D2000762876319982A08D8 /* FTupleObjectNode.h in Headers */ = {isa = PBXBuildFile; fileRef = CEDB10734368755E95741BEF1CF380C3 /* FTupleObjectNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 07EB38B563731DDFAC0446DDDB806AA3 /* FLLRBValueNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 70E9D5DB507166468AF0FA89B51E2176 /* FLLRBValueNode.m */; }; - 0886A6110663ED25DDF1B88272082117 /* mutexlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BC4618A1AB60D74C5C3EE23BEC70362 /* mutexlock.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 090678D7034ECF4A517F028B5AC595E2 /* table_builder.cc in Sources */ = {isa = PBXBuildFile; fileRef = 34621C372310B419B41B61763C42149F /* table_builder.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 097040CACC3CDACE82F943EFFB956500 /* FParsedUrl.h in Headers */ = {isa = PBXBuildFile; fileRef = F0534E9B7F9A2AC947BBFFCC17B73753 /* FParsedUrl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 09E37749C750B91B3E3FD67D80984B3C /* FCachePolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CB725B760590589CCA74355CA795432 /* FCachePolicy.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 09F5D7B633DBB6888DBAFD7BF2156441 /* FBLPromise+Delay.h in Headers */ = {isa = PBXBuildFile; fileRef = F28A8199104EC2C984FA676FED6D9FBF /* FBLPromise+Delay.h */; }; - 0A33307F590A537399B19787B87690CC /* FBLPromises.h in Headers */ = {isa = PBXBuildFile; fileRef = 60129F2C1744E4C6A0B45D363AEEF0FD /* FBLPromises.h */; }; - 0AA93414C026466DC54C9F92AE2330CF /* no_destructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BB2662A73E4AB039897681B4F9987F6A /* no_destructor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0C3CD46BCBCCF60B4D053E598FEFF3CC /* FTupleSetIdPath.h in Headers */ = {isa = PBXBuildFile; fileRef = FB1BD93373D49F12576A33ADBC3BB1E8 /* FTupleSetIdPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0E853ECD571210CCA0AE8D49E8AB16B3 /* FNamedNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A2422E97EFCFEA1741CB84A57211468 /* FNamedNode.m */; }; - 0F3F72C16878451737D593D75A14210C /* FStringUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 56E0BD3190452F623D2588E2959B1C38 /* FStringUtilities.m */; }; - 0F55FA658A750DC4B6F3D1E97E13C6DF /* FParsedUrl.m in Sources */ = {isa = PBXBuildFile; fileRef = 838FEFECD8DD58DE24E9A5A672A11E81 /* FParsedUrl.m */; }; - 0FD5E4E620E147108F75B3F2B08A84E8 /* FChildEventRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = BE2B0C81910979BDBCB280D64692E5BF /* FChildEventRegistration.m */; }; - 1182CF33679A44B433D77AACE124DEA6 /* GDTCORTargets.h in Headers */ = {isa = PBXBuildFile; fileRef = 1313113294676D69BB1A6FB6FC2AC8D9 /* GDTCORTargets.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 11909EA60514E6096BA099AFCCA379C5 /* FLevelDBStorageEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 61CCE79B8780E931635E80307FA09EE6 /* FLevelDBStorageEngine.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 11D1D0D58F6BDEB12789B7A1CE45DE29 /* log_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 96B97BCFDFB29A395ECEFEEE53D89889 /* log_reader.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 13BF445F2F36873CF3CA07CB28111B6A /* options.h in Headers */ = {isa = PBXBuildFile; fileRef = F8A34FFCCCD318ED0E09E4B62FAF6EA8 /* options.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 140985971178C5D41E3754E4D0E24CE5 /* env_posix_test_helper.h in Headers */ = {isa = PBXBuildFile; fileRef = B62F2EFD836B0B4D141B7D3B7A76D1C8 /* env_posix_test_helper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 157A2B351086764FFD54E97345BD365A /* FIRVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 97BCB79C675A3B16DD7740908974E9B3 /* FIRVersion.m */; }; - 158B87CF98F428E31623B0E931A78408 /* FBLPromise+Do.h in Headers */ = {isa = PBXBuildFile; fileRef = B299C026C8827C5F992F488CCBA2D192 /* FBLPromise+Do.h */; }; - 16E45CDE3F7FD18E427FB09401303BD6 /* FTupleTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = 37E34EE4B371BB8626B0ECA106A5B8E0 /* FTupleTransaction.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 16EA928A38BEB76C4360E0EE35EFBD54 /* dumpfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 6581D2C778C2FD723629A78872C61FDC /* dumpfile.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 16EE0BBA1E994DCB35C6112274E78E49 /* FTupleFirebase.h in Headers */ = {isa = PBXBuildFile; fileRef = 11BE64F7B2DF4B6B01EDEE2BB90359CE /* FTupleFirebase.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 176B79C5A31B153FF3A4F9A352AB511E /* FirebaseCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A4F5BC1A826B07C0F4C1030B7CBA8CD /* FirebaseCore-dummy.m */; }; - 1794DED80261D1DA5F4EBFEC563D9A34 /* FKeepSyncedEventRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = EBAA464D5B2F65ED6BE6FB25E8A135C5 /* FKeepSyncedEventRegistration.m */; }; - 1879D3460407979438FAB2CA5DCAF2EB /* FTupleStringNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 357108ED8E1BE0FAC53EFE9A522C6D0C /* FTupleStringNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 18B203D4F60DA2A5FA9E3974EB4D187A /* FQuerySpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 25DCDEF8A7F32E0E3701AD90BC946FDD /* FQuerySpec.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1965EAB9CD8AE482223EB5F0E31D7D68 /* FPruneForest.h in Headers */ = {isa = PBXBuildFile; fileRef = 45586F5816585DB8B45FE1C976525A1C /* FPruneForest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 19C8A556EB39CA08B9EBCBFA9A862B01 /* db_iter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2601511FCCD0B4CE7A74652349B3779A /* db_iter.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 19DE00627C79A1AFBD25247C04241C20 /* FChildrenNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C86C564F525877739284E8120ACBE75 /* FChildrenNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 19E64928C0FC267F6E776C53E24209C6 /* FLLRBValueNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F623F7FBC6EF232A1F47AACADC4C561 /* FLLRBValueNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1BD91D20F81071C7A1510A50F4497F88 /* FView.h in Headers */ = {isa = PBXBuildFile; fileRef = 14B5225C335FF4E58484DB38F7D71113 /* FView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1C0C2E325B5B0967FD788E20393E1651 /* FBLPromise+Timeout.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = F8B8FAE3380266FF581E5704B032BC1D /* FBLPromise+Timeout.h */; }; - 1CB9A10DD61563EC43A64ADA9ADAD2F9 /* FChildChangeAccumulator.h in Headers */ = {isa = PBXBuildFile; fileRef = DBB2A2E28ED4F674F6370BD3D6B4AB5A /* FChildChangeAccumulator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1CD40EF7C7409AAF764EB1A036E88F58 /* APLevelDB.h in Headers */ = {isa = PBXBuildFile; fileRef = 90316C54AEDD432C7EDDA954D02A16E0 /* APLevelDB.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1D453D2D6F52C91B3C0F41216EAB2474 /* FIROptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F12FA3516B540F46C4E817F486AD87A /* FIROptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1D83E631A206C9DD34CF8676CC11014D /* version_edit.h in Headers */ = {isa = PBXBuildFile; fileRef = C24A10EC10F9B315031342CB463C1F89 /* version_edit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1DBA3AEF493427D6625C09548CD0BA84 /* FBLPromise+Await.m in Sources */ = {isa = PBXBuildFile; fileRef = 1891D121FC2FBC6537BC90D17D133401 /* FBLPromise+Await.m */; }; - 1F16F7F044524F9AC7E1F047728FF56C /* table_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = B93B0CDE62D8C9C5FE9C7139B4C0867E /* table_builder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F32BFF2BC7FAF7A084CD1BB15AF91E7 /* c.h in Headers */ = {isa = PBXBuildFile; fileRef = ED2B093C80BA032660F888C7F81B1D9D /* c.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 20200F69376A4F5F3386FE54FE59981E /* FIRErrors.m in Sources */ = {isa = PBXBuildFile; fileRef = 825631D04FA349AC9CAE016BE347234D /* FIRErrors.m */; }; - 202B598D9F522FC624E1A5CA144FBF88 /* FIRDatabaseConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 151EDA5ED0508649DD81C32BBAB5B133 /* FIRDatabaseConfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 206954412978B5B20D9BDD19FA7D005A /* FBLPromise+Then.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 272A06E4DFA111E0A5504FF347BBF984 /* FBLPromise+Then.h */; }; - 208C26E4F7F9544E46DE7DCCF56DCEDC /* FConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 1648A0F596A5947A31091A8D2A3F2DD5 /* FConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 20F0342925167698872DC671F62230A1 /* FIRDatabaseQuery_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CC2D13BD17F41391BB88C73E58BDA77 /* FIRDatabaseQuery_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 213AE7061F97042A1277F1B4C4F13AFE /* write_batch.cc in Sources */ = {isa = PBXBuildFile; fileRef = 31965476AB0C9A0CA09E0AC2D405690B /* write_batch.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 221B165A4CB43C6F0214B528EB09269F /* FOverwrite.h in Headers */ = {isa = PBXBuildFile; fileRef = 68949119150AE37E2185C8D318D06060 /* FOverwrite.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 228929A7082BBB9704D2E27875BBBC3C /* FIndexedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 18E5CB0D0571E1527E8DCD0C6A5690A7 /* FIndexedNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 22906D1F2EBDB2DB72C53F96C55CE359 /* FIRAppAssociationRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 371751A703B71351DE13FF939FF962D6 /* FIRAppAssociationRegistration.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 22A247A90EF8093E9BA1B0D58AD11D6D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */; }; - 2308A882AC63D9EDA7BF9A30CE71A15B /* FClock.m in Sources */ = {isa = PBXBuildFile; fileRef = E37B33D6D220B28F622B08C2BA4A4DC6 /* FClock.m */; }; - 23D304F5D4898524973C90F483721F94 /* FPriorityIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = 25581B666C44E4E2526DFBDCAF320168 /* FPriorityIndex.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2451451CBD8C77F590EF31AB7EE78677 /* FListenProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = F34FEBEB586D8DDC4CE36905BFC79C9B /* FListenProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 245737FEABCF3FAD360B55F2DAD9337E /* GDTCORLifecycle.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EF03490A41396D7B4FB796D16239538 /* GDTCORLifecycle.m */; }; - 255771799C536116D352662DBD37219D /* FWriteTreeRef.m in Sources */ = {isa = PBXBuildFile; fileRef = 2085AB8AA9E4822704336873BF314E65 /* FWriteTreeRef.m */; }; - 259224D7B367FA639FD4BBFA1013468E /* FRepo.h in Headers */ = {isa = PBXBuildFile; fileRef = D595AE273F09F91E6ECCB09DDE4BE1CA /* FRepo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 26211344E4366BFE48BA6B1145DB814C /* FTupleRemovedQueriesEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 08B4449BD6E520A4C1E8BE42FFE7BAA1 /* FTupleRemovedQueriesEvents.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 276285542CBD047E16A240C92D981C9F /* GULSecureCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E14920ECDB2908894AFBB2FDC931F02 /* GULSecureCoding.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2770F513094AD2122DC41DA20E6DF45B /* FEventGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = F26C357D95872C344F908100D46E5153 /* FEventGenerator.m */; }; - 2791FE6C4F39B16C3799C83AA518523B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */; }; - 279EEB1AA09C07042ADB5B7E99F04874 /* FValueIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = EB6A33237EFBF55F3A9EBC83F548B03D /* FValueIndex.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 28A75C5EBFF04D453E76388DB74D8FFE /* FSnapshotHolder.h in Headers */ = {isa = PBXBuildFile; fileRef = 0180C3C1B654EF6C601C67697BC4EC62 /* FSnapshotHolder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2A5280DC4E951A91563235956880C2C9 /* FBLPromisePrivate.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 83AD72E6FF9339276439BA4350ABDA13 /* FBLPromisePrivate.h */; }; - 2A6B53071B8F2316ACF6F7959F410736 /* FBLPromise+Race.m in Sources */ = {isa = PBXBuildFile; fileRef = 4421DDED849BD83DC71031CD3143C0DD /* FBLPromise+Race.m */; }; - 2A7FC6706A43FA0DD2717B58AF346AF4 /* FConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 39A3D499C991661974D88771D65ED755 /* FConnection.m */; }; - 2A8B94488C854FA57EA18F6EDD2C8065 /* FPersistenceManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E7D6789B496C8DAF72B8FF1F569778 /* FPersistenceManager.m */; }; - 2AE327A1A87D191D0BE3EE72F7417E41 /* GoogleDataTransportCCTSupport-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A10A4C81C220281B540EA7061D36321 /* GoogleDataTransportCCTSupport-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2B1703370EEE9C47ED0EF8BE139FB77B /* FAtomicNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = 1135C43506403E886D86BDFF9D1CC4A5 /* FAtomicNumber.m */; }; - 2B8ED470C6276CFE176CAEE26C780E27 /* options.cc in Sources */ = {isa = PBXBuildFile; fileRef = 1248B00EF3BE8EB5FDF7E92EE8995ABF /* options.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 2B9F0CD1745FD1F0EDC3E1B3AC4195C9 /* FBLPromise+Delay.m in Sources */ = {isa = PBXBuildFile; fileRef = CE06D2F80F632B8CC85AEB98C01748F7 /* FBLPromise+Delay.m */; }; - 2BEABA1DB7F161D3909C14E7D3B744A2 /* FTreeSortedDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 7114FD0EFDDFA8EFD0B729F54CA0E299 /* FTreeSortedDictionary.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2C0F8BFC1A40062BCBF52D763A89235F /* FTupleNodePath.m in Sources */ = {isa = PBXBuildFile; fileRef = ABC4D7550679CE90B7A7D2AC9658CD2B /* FTupleNodePath.m */; }; - 2C14CAD723AA204EF0CDA409CE396B2F /* FPersistenceManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DF67693BB6E8BFC4254953D2178F5408 /* FPersistenceManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2C463D6B7A5EC5291926FCC7D01F2C47 /* FEventRaiser.h in Headers */ = {isa = PBXBuildFile; fileRef = 39587D5ABC154C593C4C834BD6058580 /* FEventRaiser.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2CA687E15AC9FA358EBC36A0F852F969 /* FIRDataSnapshot_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C1138211F92A15BC81CD2389748F9E8B /* FIRDataSnapshot_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2CBF94020885D3E5D21547C8957B4727 /* FIRDataEventType.h in Headers */ = {isa = PBXBuildFile; fileRef = D6870577D6F4991A666E6914A2F487A4 /* FIRDataEventType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2CCBC93C06F5DC0F576D2942A1ADDF23 /* snapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = D25C535A0ED2942C4E794B83583D12CD /* snapshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2CE28A088EBEA9D0D1F0F97DF716A275 /* FBLPromise+Reduce.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = ED14BCF081A83EBB8A978CDDD5E13ADD /* FBLPromise+Reduce.h */; }; - 2CFE1B703A0C9BE2E09D32BE5CD79D90 /* FOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 52183C4DFF461846157BB45716C61701 /* FOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2D05BEC3A17777F63E42844B3E6DB177 /* FWriteTree.m in Sources */ = {isa = PBXBuildFile; fileRef = 632A2A314E4EBB58C7333F3B1B5FA731 /* FWriteTree.m */; }; - 2D0764461AAE28446CF1FB7F4B24B200 /* two_level_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F3A37BF930274FDB2AF3C64E5BA6C63 /* two_level_iterator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2D135A659B0C2F30BDBFC9AA2C99E2D7 /* dbformat.h in Headers */ = {isa = PBXBuildFile; fileRef = 59E7355A640C2063FA68A1828CEF33A8 /* dbformat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2D2254DCD01BA887C5F4646CE07AC06B /* FListenProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 066378BC5E55BCFB87BFFC5EDAFA4B99 /* FListenProvider.m */; }; - 2D7CAF5FF42E9C0A104773BF58066D72 /* FImmutableSortedDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = CA283EA1FDCDD01C444F2DFCB23D0B41 /* FImmutableSortedDictionary.m */; }; - 2E10DF9E19D8A04DC5A179A4C33399C0 /* memtable.h in Headers */ = {isa = PBXBuildFile; fileRef = 76A86C67D20E7FD637F775A4E9F95B51 /* memtable.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2E34AE998F7E523869224DC2B93E7B79 /* FBLPromise+Reduce.m in Sources */ = {isa = PBXBuildFile; fileRef = A11AE0A92B88FC456F083B131B991F1A /* FBLPromise+Reduce.m */; }; - 2EF3851F1EB458DB00170E169F7094FC /* FRepoManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A320AFD4407CF0B2CE66E62B45145BDB /* FRepoManager.m */; }; - 2F572EF33ED6B78210874F444B84B640 /* FSparseSnapshotTree.h in Headers */ = {isa = PBXBuildFile; fileRef = 19E2FAFAF8471A64BF957711063D1E73 /* FSparseSnapshotTree.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 30D3C8C65968B13A370B6DC8BC26175A /* FIRNoopAuthTokenProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C25234BF51BE9602848231B7842472C /* FIRNoopAuthTokenProvider.m */; }; - 3103362AF88F977054122551BCB0A19E /* FTreeSortedDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = B835A6F7159081070635B80749DFB910 /* FTreeSortedDictionary.m */; }; - 31634FC234EA80C8EDBFB62D3A173F05 /* FOverwrite.m in Sources */ = {isa = PBXBuildFile; fileRef = BD9507903A6A4787A9BCB8293A9F3826 /* FOverwrite.m */; }; - 31E211272046EA07C2045244B153B550 /* FRangedFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = ACA4F24A74FE27CDF4351A7341029FC3 /* FRangedFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 32CAA0959C1714776EBC690E5648B6DC /* FPruneForest.m in Sources */ = {isa = PBXBuildFile; fileRef = B5129F030E10972C371924DB4DCFA600 /* FPruneForest.m */; }; - 330F5B38C9B5DD6ECDA59C10D0E233F6 /* FTupleOnDisconnect.m in Sources */ = {isa = PBXBuildFile; fileRef = D60179BD88EF9A234D60E6EDB1EEA0C5 /* FTupleOnDisconnect.m */; }; - 33BF60FDF58902839A3A48154F74B0F9 /* FWebSocketConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 30798651CA0BD508AD85DC790BB2D9B1 /* FWebSocketConnection.m */; }; - 35113767172F29D52B69763FC8288A9F /* GDTCORFlatFileStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AF9DE0337F8113B726962277B249DA5 /* GDTCORFlatFileStorage.m */; }; - 35C43AFBC7EA71125CAF4D1CFF5D9E4A /* FEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 102352296297C117CC7869815C0B18C2 /* FEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3609887638799B8EB91F6878BFC6B2AE /* GULKeychainUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B4C64BD56CF6985E80B66695B59DF88 /* GULKeychainUtils.m */; }; - 36AFEF5F38B16A22C7ACE7DD9037AD76 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */; }; - 36F62A55218BAF702B2FF08559F6772A /* FAuthTokenProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 44BF5A2F11832E18FAA9160A4734E51B /* FAuthTokenProvider.m */; }; - 371FF6CFCCBDE43DD79F5F8476A478AA /* FBLPromise+Then.h in Headers */ = {isa = PBXBuildFile; fileRef = 272A06E4DFA111E0A5504FF347BBF984 /* FBLPromise+Then.h */; }; - 376006A9DEBAADE7B841299DE819CF71 /* FAckUserWrite.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B65DAC962609F2CA5CAF579C31133A7 /* FAckUserWrite.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3855955853294797A0C2C84BE912A404 /* crc32c.h in Headers */ = {isa = PBXBuildFile; fileRef = 91811F71C2FA9265B03192507FD0715D /* crc32c.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 399D01EF9153FCFCB1B0B04EDBE568DE /* FBLPromise+Async.m in Sources */ = {isa = PBXBuildFile; fileRef = 77C1062B06298DDB3CE7B3ADE0C5DE14 /* FBLPromise+Async.m */; }; - 39CEAC444ACA263FBB71A36C598A988B /* FCancelEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 52176DC15D315EAA2CE7CAE7871EF263 /* FCancelEvent.m */; }; - 3AE38AF6BD283284EA42129711536CD5 /* crc32c.cc in Sources */ = {isa = PBXBuildFile; fileRef = BF564EDAEE1DA9A93B72737F09F33227 /* crc32c.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 3BF1D3EC5952C1777B11B7D357FB5AE2 /* GDTCORConsoleLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = CAD6EEF839E19AE78EB0C9FF88CBECE2 /* GDTCORConsoleLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3C314BBEE5CB4C12086B625B62473B77 /* FBLPromise+All.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 29BD25E1380AF136F830D5ADC46CB53E /* FBLPromise+All.h */; }; - 3D2636DAE91F7C2F9B77790C4531C0D1 /* FRangeMerge.h in Headers */ = {isa = PBXBuildFile; fileRef = 80AE48D6611499F9E4910CA9F46D2191 /* FRangeMerge.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3D6B3854EA4680B3AEE04274CE3CB053 /* table.h in Headers */ = {isa = PBXBuildFile; fileRef = 35CE8D2A98B792BEEDD0D72E89B33BAD /* table.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3D8B37C55A23D17BDD1FF9FC819D2F9C /* GDTCCTPrioritizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 196DCB453BE1CEE606A4656ED3F3DCBB /* GDTCCTPrioritizer.m */; }; - 3DFB61A0B67EF7337CB48246FE5F5F53 /* FBLPromise+Reduce.h in Headers */ = {isa = PBXBuildFile; fileRef = ED14BCF081A83EBB8A978CDDD5E13ADD /* FBLPromise+Reduce.h */; }; - 3E3B68C439E38A6A6F13BC73827BD7E5 /* FChildEventRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 7919424CA56B24B6F497FCB11FF6DB93 /* FChildEventRegistration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3E4EEE0E3EE4D0921C6E38F5B43B14ED /* FIRMutableData_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 902E6002602A44EB342BBC2142E66B0D /* FIRMutableData_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3EA71BDD8FC82E07FD501469DA03C46B /* FBLPromise+Testing.h in Headers */ = {isa = PBXBuildFile; fileRef = 98FC3E75806D347BDE1998F9D6F7924D /* FBLPromise+Testing.h */; }; - 3EE42B1C7D4A0329C4177617DE5864AA /* FConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 99E6B34EBA0A767EED9DFC5E58B87DF5 /* FConnection.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3F46D2CCA4E26F7C3196F3EE84D2AD1F /* FRangeMerge.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E711BF9F9249CDACE333119FED50E76 /* FRangeMerge.m */; }; - 3FAB976E8FED078E86BE0BC439996714 /* pb_decode.h in Headers */ = {isa = PBXBuildFile; fileRef = 941ACF372F977D2EFD95A9310219B60A /* pb_decode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 401F125256DE8121A6B94E169FFBF98B /* FBLPromise+Always.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = F8FDB31CF6B1C1358EE35ADE19844DC7 /* FBLPromise+Always.h */; }; - 4118726C30DDD8B59270D8C0522FCAD4 /* FChange.h in Headers */ = {isa = PBXBuildFile; fileRef = 68B02E7BEB2979723066B27907E0A636 /* FChange.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4354AFBA3C791268B39195AC0B0D94D2 /* dbformat.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B05621A5EF759E47A44989B0245FC6A /* dbformat.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 435BC857BBAAEA6B30965087002B6745 /* FViewCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EDEB0636E82100515CA48503A4D022C /* FViewCache.m */; }; - 43A804271733F4A147E063DC379C6060 /* FBLPromises.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62020A4F2BCB9E86DA99881A00474E3F /* FBLPromises.framework */; }; - 44C4FF48A0CA1153ADC2F11A7E7D9853 /* thread_annotations.h in Headers */ = {isa = PBXBuildFile; fileRef = BAE3B72678AB5BFDAF8CA9B8BB4477B6 /* thread_annotations.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 453177599B69C3035FB65976DB71A88A /* fbase64.c in Sources */ = {isa = PBXBuildFile; fileRef = C83F672C79ADC28FEFB9E4671207B48F /* fbase64.c */; }; - 45F553F660EF71AFC23BF7C212AB43D6 /* FIRComponentType.h in Headers */ = {isa = PBXBuildFile; fileRef = F4D50B06AA311127F439590F709F5807 /* FIRComponentType.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 46C616765663C3ACB4778DE8108575CE /* write_batch.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C101CA28A87922BFF183FCB605139A6 /* write_batch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 470FDDE3E540331E5BE054C0503565F0 /* FIRMutableData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A2A620A27AF95651BEB93E9CE562A04 /* FIRMutableData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4726CCB900BC87AC820DB76627C38EFA /* FBLPromise+Any.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E8161CED1C17230153CB59CBAA2ABA9 /* FBLPromise+Any.h */; }; - 47738E305055A2711E3FF8FFA7CDBCF2 /* FTupleTSN.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CC76FAD8FA0F6D23526A68F7A0EDE8E /* FTupleTSN.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 47B7043414C74508AF47375D56971161 /* FIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = A0C2CA4BE08826E478724D7FBB8A6D94 /* FIndex.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4804CD4E94A28FF0B14D20E80F800441 /* FListenComplete.h in Headers */ = {isa = PBXBuildFile; fileRef = DD34FF93A6587C0B4E47FFD49CA5445E /* FListenComplete.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 48A23BA03EC46B17EB084D5A92FB3FFC /* cache.cc in Sources */ = {isa = PBXBuildFile; fileRef = 81F3FD7983F8C4391CC30B4E7370767E /* cache.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 48AD74D2B771B41A9F2C75397D04A890 /* FIRConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 25EBF5F50A964142282100BB3127D79D /* FIRConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 48ED6CD7CE693EB34FE9C061FDFF5BAC /* FLimitedFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 301EA1964717D61EA78FF69CC56657C3 /* FLimitedFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 49D2B6171D735598F776C41BA90697E0 /* firebasecore.nanopb.h in Headers */ = {isa = PBXBuildFile; fileRef = 7193CDB6EF41B0AEB292E144AC86B962 /* firebasecore.nanopb.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4A89D83C5CC15E68857BC96F14C6650A /* FIRDatabase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 39B71F3A4C20F71B0FA8620190D0629E /* FIRDatabase_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4AAAD244C67F4C94FE3AE95DA3465C79 /* FUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = B1A323E1E6BBE609DB73C75EE7791C2C /* FUtilities.m */; }; - 4AB9971E89197C7C9F49C300467656AA /* FNodeFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = DFDD92BA3AA85D306208B74066AA26E9 /* FNodeFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4B397BF3049EE16BB28615BA0363A45A /* port_stdcxx.h in Headers */ = {isa = PBXBuildFile; fileRef = 2902A4C38873FCFF5786F23795F66406 /* port_stdcxx.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4B5F583964C44A1604D92DD71FB7EAAE /* leveldb-library-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A186237A208BD1CF32D3CDD83B8CAF2 /* leveldb-library-dummy.m */; }; - 4BC336156D55C7361145A64DE9701FD7 /* FTupleTSN.m in Sources */ = {isa = PBXBuildFile; fileRef = 6041B5E87AC260ED5B0E6C0B42DDA814 /* FTupleTSN.m */; }; - 4BE8B05147FE479302EC65DDEC54BE5D /* block.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D75E00B047D89EA15BE5CDEE752D7A0 /* block.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 4C1A7F465A551AB24272477D3398AFAF /* version_set.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2FB3B6224E0EA157E5E5C71782ADA330 /* version_set.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 4CA6CA316B486CCED39D435DED7F5AF0 /* FCompoundWrite.h in Headers */ = {isa = PBXBuildFile; fileRef = 65A2EA4B48BA25E5F852CFA3518CEAC9 /* FCompoundWrite.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4E40D1A913022E26EE13436779D6DAFE /* pb.h in Headers */ = {isa = PBXBuildFile; fileRef = 31E464D7B81E4278F8FB81146755F379 /* pb.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4EF04BFB62E95B08C56E236F9C55E823 /* env.cc in Sources */ = {isa = PBXBuildFile; fileRef = A674C7C09F1C351BFF34B1C8A0910870 /* env.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 4F7A0971FBDC07F6B66F3F79D2DDF5BE /* FIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = CBF9637B074AD29A17C37F3502AF829A /* FIndex.m */; }; - 4FCA995164B919C8FA3CD4AA7CC873E4 /* FOperationSource.m in Sources */ = {isa = PBXBuildFile; fileRef = A3DD7543FF2C526CD999ADA8530ED5EA /* FOperationSource.m */; }; - 514734A6E03887212B98136B5C2E70E4 /* FIRDependency.h in Headers */ = {isa = PBXBuildFile; fileRef = FC65A9652178080D84042446A2B9C021 /* FIRDependency.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 51D4F6526EFCD9C5AFB03818A4006E91 /* FEventRaiser.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C35F58B895845211A8017AAC391E1B7 /* FEventRaiser.m */; }; - 523E397640772F00E129DD7B4E8918AD /* arena.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3787BE6B13B4E6006135EB46DB54DC42 /* arena.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 52F492F288C85C2A28527E4B6C9B4E07 /* FBLPromiseError.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 33D40A09F8C5975F8B550A0483033801 /* FBLPromiseError.h */; }; - 5338A1C7B78187BA6DF4AADDDE1FB981 /* bloom.cc in Sources */ = {isa = PBXBuildFile; fileRef = AA690BDFA65E8C410A82130B3483B82A /* bloom.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 539FE2DC564E37031364AF0690B4C079 /* NSData+SRB64Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 36FBDDD8326F0B0C781905C5CF742D68 /* NSData+SRB64Additions.m */; }; - 53EC757569AC06A3E0A0270942925E7C /* version_edit.cc in Sources */ = {isa = PBXBuildFile; fileRef = E8DE921A3AADBF970D703992669E82E0 /* version_edit.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 547E592CCE6FFFEC8B870CA68D4642C5 /* GDTCORDataFuture.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A37D0DC62ADF6DFECBB8C229F50AF93 /* GDTCORDataFuture.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 547F74694AA3F101A60FC29AF4777ECB /* FIRDataSnapshot.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B9509605188658AC6DAEB774F27217B /* FIRDataSnapshot.m */; }; - 54C6A866FF0CAC9E419AEDD9B99923BB /* log_writer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2A0B383E88DBB23E8139375596467FAC /* log_writer.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 55095E5933B1AA1740A9E48E4D490DDD /* GDTCCTNanopbHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = E3E8EF9776569DF1C4FBACF2A05C6984 /* GDTCCTNanopbHelpers.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 55958675C0EF11E90E71F3EDEA3D06DD /* FIRTransactionResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 39E847F87FE098403E173AF071476BF0 /* FIRTransactionResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5610D55DC7926A495CA4069724B8821D /* merger.h in Headers */ = {isa = PBXBuildFile; fileRef = 83AC43378C350989A6B691A3B81051E5 /* merger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5668DA111AC78F9066F04161000C0446 /* FAckUserWrite.m in Sources */ = {isa = PBXBuildFile; fileRef = BACDC3D5A2E777358D664B3A45214F03 /* FAckUserWrite.m */; }; - 568A54C8176D35F8A7EDB6C00C879B71 /* FIRCoreDiagnosticsConnector.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AFF92094D4BC33FA831C1108F731A13 /* FIRCoreDiagnosticsConnector.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 56ADE8988785176BF58473001683DEB2 /* FImmutableTree.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D57A1F107BF9AB8D7F78C220FD7D3FE /* FImmutableTree.m */; }; - 56B2284C696879C63E21C1B12C3ACFEF /* FIRVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BD31C9DAA421C4A8E24D11F5161689F /* FIRVersion.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5794EA2905855CDAE67515C65C7E5CE6 /* status.cc in Sources */ = {isa = PBXBuildFile; fileRef = 58308FFBBA52F24C69542503039DE365 /* status.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 57F3914A57D8C391B28D7543A043EE5D /* FirebaseDatabase-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BA39E2C48027666F9469709D4DC983B4 /* FirebaseDatabase-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5804E667302812932C3103450BEB651C /* Pods-openTok-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 66E4FD9B631E9F35722D53A6EC999ACE /* Pods-openTok-dummy.m */; }; - 5A0405864E8F4C6C9E7FA0C0957740BB /* FIRAppInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 71D624A72A3D5A4BBC3E8E85FF70070C /* FIRAppInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5A123C1FB806917F37E0E8FA627106D6 /* FValueEventRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = FFADC6E448C500341452C5E5C14C8B48 /* FValueEventRegistration.m */; }; - 5A2D74B12012630A42D1F5CA8F266256 /* GoogleUtilities-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C6D8EEB350A4ECED82D557A3EAB5AA77 /* GoogleUtilities-dummy.m */; }; - 5A4626A78A5C4E49BDB009D02D3E261B /* filter_block.h in Headers */ = {isa = PBXBuildFile; fileRef = 27F81C53060A8621A2223C2F50CD241B /* filter_block.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5A52D232EABA2665C7EEF5035A49373E /* FTransformedEnumerator.h in Headers */ = {isa = PBXBuildFile; fileRef = D5D7486A6BEF323ADBAE7A259186E285 /* FTransformedEnumerator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5A8F8D9E203FF204C505E11577716FE6 /* testutil.h in Headers */ = {isa = PBXBuildFile; fileRef = 95728A376DED6052F25B119402483838 /* testutil.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5A9A9AE6AC1291C88F5953D3BFC4D965 /* FMaxNode.m in Sources */ = {isa = PBXBuildFile; fileRef = CAD98370F606C47C0E85A961278677BC /* FMaxNode.m */; }; - 5A9C4484FCE755697ADFC6A28E20A016 /* FViewProcessorResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 026599AE480DD91768D8F683E59FE6CC /* FViewProcessorResult.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5AAE67A01BF047446F46E6B3664C4103 /* FLLRBEmptyNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BD6ADA3108223D06CC45B5E4D709C49 /* FLLRBEmptyNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5ACD9CCCFCEC9B7B56E858A2E0204AE0 /* FIRLoggerLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = 061A348B4063578DACB2E0C334E75E2E /* FIRLoggerLevel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B975A3DECF705D94BB558B2D3D2DF40 /* FKeepSyncedEventRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = F42C7C268617DB7675F42B8B5E5495AA /* FKeepSyncedEventRegistration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5C9DC0DDA64154FCD249C79DFE95B6B5 /* FServerValues.h in Headers */ = {isa = PBXBuildFile; fileRef = F64C9236D303103F4D3C397C4862BAA9 /* FServerValues.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5CC90ADB1221D7A10D9E9EE241C524EA /* FIRRetryHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FE1ACAC1C23FF4E29B8821ADC8ED85F /* FIRRetryHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5CFC8A5B24D8CD47ECEA3B285A8AC115 /* FIRCoreDiagnostics.m in Sources */ = {isa = PBXBuildFile; fileRef = 0639F28CB196245922C7D8D3836E0964 /* FIRCoreDiagnostics.m */; }; - 5DED636C6146A0FAF727E7096AB0C763 /* FTupleObjectNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 78CE4FC4674E17E99E511BCA4E3D89E0 /* FTupleObjectNode.m */; }; - 5F0ECED121063D05096B8D84C08255B6 /* env_windows_test_helper.h in Headers */ = {isa = PBXBuildFile; fileRef = 083D3597C0190CB5D637CC9EE15579C8 /* env_windows_test_helper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 60BE2ED8380E6A7CF121EC37BD34A8C7 /* FIRAnalyticsConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = E5FE3C03918579D14DEB83FD5B810D8C /* FIRAnalyticsConfiguration.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 60E5A2DE0C8C9144803E3861B1958FE4 /* GDTCOREventDataObject.h in Headers */ = {isa = PBXBuildFile; fileRef = D212664CA6B122A499E6AAE0259F5F5D /* GDTCOREventDataObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 619DF4CCAA6E644FCC811DDB00BFEFE9 /* db_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = F86A2D7DF81C3E8869A794D7E0292C97 /* db_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 621E3BBEA4C5834B355B1DCC0EC89EF0 /* GDTCORStorageProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 94B46AAE0848AD9B3F922BBB8DA40DC5 /* GDTCORStorageProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6258B140C90F66751CD6E1A18689EED3 /* FBLPromise+Any.m in Sources */ = {isa = PBXBuildFile; fileRef = 85F1AE2EBEC3ACE6F7F8518590D0F6A2 /* FBLPromise+Any.m */; }; - 62990D2BB6C4C0DDD3CD1848667C6388 /* FBLPromise+Any.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 0E8161CED1C17230153CB59CBAA2ABA9 /* FBLPromise+Any.h */; }; - 6330222D094742EE882DEB728FF1E4F8 /* log_writer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E86539022322DD1F5296F3214CEC49E /* log_writer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 652C7D589C4B335702DE85D4942D99CA /* FIRComponentContainerInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 92CD283D96DCA1B1A70CCFCEDE5A47B2 /* FIRComponentContainerInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6585F9E21D3910193D605670449B5F1D /* GDTCCTNanopbHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = 080B6ED2BE515044B2F811627F849632 /* GDTCCTNanopbHelpers.m */; }; - 659DDECDB1D8A810216CF4556E9BE3EE /* FNode.h in Headers */ = {isa = PBXBuildFile; fileRef = DF9EDE9DB2CF0517FF04BC31DCAEC0FE /* FNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 65DDC8DA853BA7480883F3BAFB91A171 /* FImmutableTree.h in Headers */ = {isa = PBXBuildFile; fileRef = A1B575D60903423A2B9984866581EC10 /* FImmutableTree.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 664B0232A289CCBBBCABF3F6C8177BDB /* FBLPromise+Validate.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 5F0C162A1408DFD87160990CD1C5B5FE /* FBLPromise+Validate.h */; }; - 665579D80965906C049310B67DB8A18F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */; }; - 682894F93E41C971ED72F78FAFD72163 /* FPendingPut.m in Sources */ = {isa = PBXBuildFile; fileRef = FA42256409F6AE11E423BC2D052A2AB3 /* FPendingPut.m */; }; - 68693C071B9836EC770A8CF091F4BC6A /* GDTCORReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B32762245BBA7D25AC72093BF9D75E6 /* GDTCORReachability.m */; }; - 6884F18249527354885EA942C51A3350 /* GDTCORConsoleLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 3096846386F3836A75FB794288AA257E /* GDTCORConsoleLogger.m */; }; - 68FD1F5350878B5D0B4EE2938C67AA6E /* FLeafNode.m in Sources */ = {isa = PBXBuildFile; fileRef = DA1705E3E3B1D427074C708CE40F9CAC /* FLeafNode.m */; }; - 69014479FF4FA988406168B4BE30EDF1 /* version_set.h in Headers */ = {isa = PBXBuildFile; fileRef = F907DDF83A30F1299472C033320155FC /* version_set.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 69426E491EC5E31B1F89407ED742FE37 /* db_iter.h in Headers */ = {isa = PBXBuildFile; fileRef = E3B99A902AB32FA5853427C93DCEA165 /* db_iter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 699B4E6CCA689A6F0E4969C29E270439 /* FWriteRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = 7608FC4EC17E98020B24155456A3AA39 /* FWriteRecord.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 69AD7F4C5ECF8E9C8E699F6BC5018DCA /* FTrackedQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 378857989CF09BD719CBDF32E1B87FBA /* FTrackedQuery.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6A2FD4A639D49DA6C2278A0C9E91232C /* FBLPromise+Validate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F0C162A1408DFD87160990CD1C5B5FE /* FBLPromise+Validate.h */; }; - 6A6AB52A108BF6FF2FD4FAA9F7FF4AF4 /* FPathIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = C08F5263A7EA97B8AD1A8772345B4295 /* FPathIndex.m */; }; - 6A8AA68F2D6AF1B11F283156321088FC /* GDTCORClock.h in Headers */ = {isa = PBXBuildFile; fileRef = 695B08F258794D8BA0F5ADA821C842AA /* GDTCORClock.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6AE785742922D3C6C01E2F07B874B586 /* GDTCORReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 823E7E73D27229EF57D62A2C3C62E62C /* GDTCORReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6B2411DC7943C6C7EA36A81B77060E1B /* FIRDatabaseReference_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 052D1A59D81CF3189CCE9443B2F2ADE7 /* FIRDatabaseReference_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6BFF9CABC2AC3E40CD05E0A7837E0A86 /* FCompoundWrite.m in Sources */ = {isa = PBXBuildFile; fileRef = AD39F1091B89CC90EB47C76A7740E528 /* FCompoundWrite.m */; }; - 6CE6CAFFC9CEE98DBF5F7AFC4277110F /* FConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 916D739034B004E106182204228D42C0 /* FConstants.m */; }; - 6D1271BD091A228A0F042FB570729DD1 /* FTupleCallbackStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AF6CFF33C19AC6817222406C326E673 /* FTupleCallbackStatus.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6D7D25CD028F7733E540220C3D285BB2 /* FEventEmitter.m in Sources */ = {isa = PBXBuildFile; fileRef = 24AD25CF950ACF35024D9FAC762DD3A3 /* FEventEmitter.m */; }; - 6DBE9B3D6F0F2CE13E49E5F688DE7F49 /* FTreeSortedDictionaryEnumerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 593FEB0A405089A855F6A178DC382FFF /* FTreeSortedDictionaryEnumerator.m */; }; - 6E23414B614CF0541D4234A44D46E6A9 /* GULKeychainStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 78BAF0D547E00F0767C0DD113ADF19C0 /* GULKeychainStorage.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6E58371477A4FE48963F06710FD6ACAC /* FBLPromise+Testing.m in Sources */ = {isa = PBXBuildFile; fileRef = C5878F2A6B4FDCC6F17613A13676081E /* FBLPromise+Testing.m */; }; - 6FA79E35AAEE2335FC5F1EA7701CCB38 /* GDTCORTransformer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 088E9D65F0C3C763F8B1466BDCCEAEED /* GDTCORTransformer_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6FD783676DA1F46810033F9098475B13 /* FIRCoreDiagnosticsConnector.m in Sources */ = {isa = PBXBuildFile; fileRef = B5D4BE3DC5EADCF63F424C33B95D8E0F /* FIRCoreDiagnosticsConnector.m */; }; - 70031267032F653DD49657907E61FA20 /* FLeafNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0541259BE7A9475648BF4DC718F6F409 /* FLeafNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 70E6D6C00DE7612C2B1BAEF1BC3AB1CB /* FTree.h in Headers */ = {isa = PBXBuildFile; fileRef = E9A9F5F708FDFD0E308F6410820EE811 /* FTree.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 70EF2DF97705C4E7DC796A993C8131CC /* FBLPromise+All.h in Headers */ = {isa = PBXBuildFile; fileRef = 29BD25E1380AF136F830D5ADC46CB53E /* FBLPromise+All.h */; }; - 714FC27A789BAFB9847D2AC476F65A51 /* FBLPromise+Recover.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 7610135E50DA4D208AF3E88330FCBDC1 /* FBLPromise+Recover.h */; }; - 71FA45ADE713CFA936FE6975075FC7F1 /* GDTCOREvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F616D4FBC71458933254CDA110C11CA /* GDTCOREvent.m */; }; - 72C5EDBA781D29BFAAB551413463132F /* FView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E7D64340689B27CEC98862A2A1558BA /* FView.m */; }; - 74831D60BF46F763B40E019D3835F87D /* GDTCORTransport_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 57FEBC63E8E55E8C1B6847CAEDE77959 /* GDTCORTransport_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 754738AB24E60CE84A402F4D60C145F7 /* GDTCCTCompressionHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = D3B07B31DDBEA3C5582D124B8D3B6443 /* GDTCCTCompressionHelper.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 756A2EE872A8DDCA0E52D315A589AB4C /* merger.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3455A08B816E9633E67F45031FC9F6CD /* merger.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 756B4E768703DC810CF59DCAB2F75B99 /* GDTCORReachability_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CA6848D4B1055686D25D93DF40B2C915 /* GDTCORReachability_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 75E5079C628FEAB8F122ECFFF541CE65 /* GDTCORTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BAC11B5BD73140CC06EBFFB33C6E3E4 /* GDTCORTransformer.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 762285060EB8FC38B7345EEDABD9236E /* FIRAnalyticsConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F8222E00AF134E0711FE08042A039C2 /* FIRAnalyticsConfiguration.m */; }; - 76E1D620DF668560C0A508B931C892EC /* builder.cc in Sources */ = {isa = PBXBuildFile; fileRef = F21172F501A44D23EDDB3AEA5234235C /* builder.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 77728A7BED51FEF74A4BD7261D3230F4 /* FIRLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = B6B1D21BE3FE785C043FD82E5E14181D /* FIRLibrary.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7778A74F15FFFD1C05497A5E926E8715 /* FEventEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 21EDE18558B70D38E006596E26788D36 /* FEventEmitter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 78066B813499E43C772003B1BF0427AA /* FBLPromise+Catch.h in Headers */ = {isa = PBXBuildFile; fileRef = 9258D0107323650D356F6D0323D79CC3 /* FBLPromise+Catch.h */; }; - 780B68AAE183B3B79A09360D6D86DDC8 /* FirebaseCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 917F14DB5F41240C3D285C5384050E2C /* FirebaseCore-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 78173DD3AD8FEBDC30D56CBCA2A8420D /* slice.h in Headers */ = {isa = PBXBuildFile; fileRef = F13DF5348224F0D6CBA0689639782254 /* slice.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 782F4AC4A6D48CCFB91AA97ED5433141 /* FIndexedNode.m in Sources */ = {isa = PBXBuildFile; fileRef = A1B705F633CD48849AE76995D60F22F5 /* FIndexedNode.m */; }; - 78F88029EAA27CCBFFE43A944B455A24 /* FBLPromise.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 87A11B9808FEF3BD00DEAAF8F1F7A1E8 /* FBLPromise.h */; }; - 791FCE68614E82B3AFCFEE1FCF5299FC /* comparator.cc in Sources */ = {isa = PBXBuildFile; fileRef = AC1A01D6B0D166DA6AAD158D6264F693 /* comparator.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 79301BB80C42E8D6F837287E5BF87C4C /* random.h in Headers */ = {isa = PBXBuildFile; fileRef = 98B5D3DAE49B0B1F304E5AAF9095F733 /* random.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 796A48ABBD99A855EF892338989223B6 /* pb_common.c in Sources */ = {isa = PBXBuildFile; fileRef = DF3E939FA895E12649FDF094D1D8DC7D /* pb_common.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc -fno-objc-arc"; }; }; - 79738317AEFE3E41A8478317CBAE9857 /* FBLPromise+Catch.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 9258D0107323650D356F6D0323D79CC3 /* FBLPromise+Catch.h */; }; - 7A2EE53A852A177298C0AEFF53F36E57 /* FIRDatabaseComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 54EDB5C773BAC4698020342F0696F390 /* FIRDatabaseComponent.m */; }; - 7A81401CD997F8C281A44B24AD0C1C47 /* FTupleNodePath.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EFC7D206D5469364E21D58DD4E6C7A8 /* FTupleNodePath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7AF1E3D44D555CF1560B25ABBB18DAD5 /* pb_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = C443A630A1668A448ECF8A09F457DEFA /* pb_encode.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc"; }; }; - 7B52884624478BA3B6D5273237DA612C /* FWriteTree.h in Headers */ = {isa = PBXBuildFile; fileRef = 385FA78D355DA5FF4ED09DE6A1AB8057 /* FWriteTree.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7B816CEC366EA348B2258921C66F1FFD /* FIRDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = FD7581EECCCABA4BECF7F34AA2731B64 /* FIRDatabase.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7C0F5FA852455BB602CB06301F73D14C /* FChildrenNode.m in Sources */ = {isa = PBXBuildFile; fileRef = D14605E2B290BBFBCFE713BA4B20BA76 /* FChildrenNode.m */; }; - 7C53A6196C34CBBE5F47F4B30215F6A8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */; }; - 7D0FE3A51F36E7C4A2678853982A411D /* FViewProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B2312F44AC0B0A5F30BD2D7E4AD31E1 /* FViewProcessor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7DC98B441048ADBA595C6F12B37AC7CE /* leveldb-library-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C4C0ED34A72FF0624A93EC40E7CF6B37 /* leveldb-library-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7EFBFADDE51783B82A51CCED09D408C1 /* FValueEventRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = C36919082934B6801606679F9235BAA5 /* FValueEventRegistration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7F1E012AD8F03E57353F4F1EE729FD0B /* FIRLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 5004A374237FC691736F521969A16337 /* FIRLogger.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7F2F5653A57ABB9417C394852A04B755 /* FRepoManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 98859E9B4B250386DEDD7C85EB0716D8 /* FRepoManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 802B6DAEB0CE8C6E44DB8BB5FEFDDB28 /* FChildChangeAccumulator.m in Sources */ = {isa = PBXBuildFile; fileRef = 543616AED705E736331D7BF0C4810E1F /* FChildChangeAccumulator.m */; }; - 80883E58195D0C95FF43C861FB0634E1 /* FCompleteChildSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E7B43761161E27D4FB4903970D91F4F /* FCompleteChildSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 811E1C387E694AB74A8DCA4E1DFAD2E4 /* filename.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5B797E52A5E7D33056211AE0FE28030B /* filename.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 82457C88EEDA09C07B542C95C505C68F /* GDTCORUploadPackage_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 428B977BF39D31F8F69EF02D8F825E96 /* GDTCORUploadPackage_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8308039D5AC50C9185DBE60C069B6ECA /* FBLPromise+Recover.m in Sources */ = {isa = PBXBuildFile; fileRef = FA32E456E1C52FF9AC73AE5949A43B5E /* FBLPromise+Recover.m */; }; - 8464F1BABCF4CAA35574FDCFF3BB99DE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */; }; - 849A0FE6B697BF9683283B3EB1974738 /* FIndexedFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EBB17129E01D8CF54893F948D47D963 /* FIndexedFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 849FAADFAA2CDF0E00587B785C3A25B6 /* FBLPromise+Race.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 9DC5B45B4B2D0DC0AE3FB7A75E08649A /* FBLPromise+Race.h */; }; - 851B8F4CD6FF25BA0510DF4B6A4F9FA5 /* FBLPromise+Retry.m in Sources */ = {isa = PBXBuildFile; fileRef = 744466560FAD76B6239D54402C0C52DC /* FBLPromise+Retry.m */; }; - 85A99CFD1EAF4B2F16D252AB054441E1 /* FBLPromise+Recover.h in Headers */ = {isa = PBXBuildFile; fileRef = 7610135E50DA4D208AF3E88330FCBDC1 /* FBLPromise+Recover.h */; }; - 86AA6392AA1FEDCA0ADF69B38B14755B /* FQueryParams.m in Sources */ = {isa = PBXBuildFile; fileRef = 43C180B98E9AA37DFE45416D2E782F89 /* FQueryParams.m */; }; - 86AC5E16F0CB973D87D07A3A1813EDCF /* GDTCOREvent_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F24B2FE999A991B0FB72A88254F127A9 /* GDTCOREvent_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 86E8E207A4D9F6D115E2FFEDD8EEB3AA /* FTrackedQueryManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EAA3C6BA44BAFE3C08D2B7B5567778D /* FTrackedQueryManager.m */; }; - 86F9279C083639AB20DB701A533CCCCA /* FLimitedFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 20A93D898B3FF479357C52053210F552 /* FLimitedFilter.m */; }; - 87910C8366AC5C2E1F9E36AE14F2CA27 /* iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 46440B55B39BD26A9DF8DBAD2638BB2F /* iterator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 87CCA0094B49425EFD2E1467E4A5646A /* fbase64.h in Headers */ = {isa = PBXBuildFile; fileRef = AEF3F09834AB87411FD7F6AF1067B39D /* fbase64.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 87D730E28EF617D4F2CF863BF0F6737F /* FTreeNode.m in Sources */ = {isa = PBXBuildFile; fileRef = B52430627E2CEB470F4622858A8480DA /* FTreeNode.m */; }; - 87DC0888CE2B5E68997CA2E2B91A4943 /* FKeyIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = FE5998250B73CE8F1C7FC072542E79C7 /* FKeyIndex.m */; }; - 884CCF71D150619CD60C43D938699F8F /* FBLPromise+Then.m in Sources */ = {isa = PBXBuildFile; fileRef = 922204FA6D1655751812D541250FEA72 /* FBLPromise+Then.m */; }; - 88C001E6B3B75F369C266C2C116A7DBE /* FBLPromise+Timeout.m in Sources */ = {isa = PBXBuildFile; fileRef = AD6117C150F7C9AEC846B49F6EAA9BAF /* FBLPromise+Timeout.m */; }; - 88C13D592F16B7278CEE5150D44A0F66 /* iterator_wrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = BE1A8F7A905D09BE7EB82BBFF174EE78 /* iterator_wrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 88DE778EA02BEFE5E2EC61E357354DA0 /* GoogleDataTransport-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E2A534E083CF2D8F6EC559D6489659F4 /* GoogleDataTransport-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 89BA3207279ECA125A45BF428F2A38B8 /* port.h in Headers */ = {isa = PBXBuildFile; fileRef = BBCAFB9BB21E3ACB769B48A3B1C75463 /* port.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 89C8D847271BDB015EE2F37C5EA5D8BC /* memtable.cc in Sources */ = {isa = PBXBuildFile; fileRef = FD83A1F8DD099D0395534007C8A5EA71 /* memtable.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 89E0E29686637417A7ECCF7B84A4AF19 /* histogram.cc in Sources */ = {isa = PBXBuildFile; fileRef = E21CC05454593B859E1DD97BECD0AF1C /* histogram.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 8B768C3E4BBABB6AB30C627C17A6D8CB /* FBLPromise+Delay.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = F28A8199104EC2C984FA676FED6D9FBF /* FBLPromise+Delay.h */; }; - 8BE66D549E7580DCF6128DF93DA4A244 /* FBLPromiseError.h in Headers */ = {isa = PBXBuildFile; fileRef = 33D40A09F8C5975F8B550A0483033801 /* FBLPromiseError.h */; }; - 8C42D689F7282ECFB561869D5D4E9647 /* FEventGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = FA47D62FD3660036076067B875D655A9 /* FEventGenerator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8C800877FC0D7864D21CCC0F4EDE99B2 /* FLLRBNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 57D93D85D4F115B046E9F4E297055F80 /* FLLRBNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8CBFAB6FCA1E4F62C29F2C30E42EF00F /* FBLPromise+Timeout.h in Headers */ = {isa = PBXBuildFile; fileRef = F8B8FAE3380266FF581E5704B032BC1D /* FBLPromise+Timeout.h */; }; - 8DD28787BCC2A2B7B311929312A962E2 /* GDTCORTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B54F40D4D8961A88689128664F1E34C /* GDTCORTransformer.m */; }; - 8DEB564DAACF581047405823582A7235 /* table_cache.cc in Sources */ = {isa = PBXBuildFile; fileRef = 60FDC5A59E02334D7C8B34614969FCAA /* table_cache.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 8E2F20850942EFB5BA9919749461F27C /* FQuerySpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EB182B0C82CC8AEF45E12CE2FE0023A /* FQuerySpec.m */; }; - 8F09F46C97F3D1719E79448426D90B88 /* FBLPromise+Async.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 0E5714B2DDE9933EA30C49F766B5E69A /* FBLPromise+Async.h */; }; - 8F622CBD13FD505E49C926EF05281863 /* FIRTransactionResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B51796ECD501253EDB5FCF8F42BCF07 /* FIRTransactionResult.m */; }; - 8F6DE00950247BF705BAEA10E4A231FC /* posix_logger.h in Headers */ = {isa = PBXBuildFile; fileRef = 674C8CF50302A87EC7519C90AF0C6F61 /* posix_logger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8FAA82B55473DB6B1C1003882B31A970 /* export.h in Headers */ = {isa = PBXBuildFile; fileRef = 784C73A1380FA3D7D7A731214DE53A13 /* export.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8FBC6101EE07730E9730A300A356F0E6 /* GDTCORTransport.m in Sources */ = {isa = PBXBuildFile; fileRef = 90D45AEDE9F7AD08010F5EE9B389652E /* GDTCORTransport.m */; }; - 907C68C2C45324A2E72BF9CAF93F48CF /* FTransformedEnumerator.m in Sources */ = {isa = PBXBuildFile; fileRef = CD22B20DCEE97C6687C597002DC5BE44 /* FTransformedEnumerator.m */; }; - 9094065368AC7058A86BB581D076CFF3 /* GULAppEnvironmentUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = FB1CF18DE410CAADC9B10DDD72B0B536 /* GULAppEnvironmentUtil.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 90B7A4A975358FF6210D58AA46861C62 /* FTupleCallbackStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 945B168B765E0149A40FCDD1B383D898 /* FTupleCallbackStatus.m */; }; - 91E2E976670D660A9D998B7953EF5A50 /* format.cc in Sources */ = {isa = PBXBuildFile; fileRef = 338E9E4797BEAD2FFF893017AB97CC8B /* format.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 926AA07593CA64CDB72ADCC7CBA0479C /* logging.h in Headers */ = {isa = PBXBuildFile; fileRef = 635E69A93F16B99D33B27A6452B14DC5 /* logging.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9288373444BB899F7AA1DA50A4E283D6 /* FTupleObjects.m in Sources */ = {isa = PBXBuildFile; fileRef = EC267D96A5B075660F91DDA49D90E56C /* FTupleObjects.m */; }; - 92B13C918F4EF811AA2A66F54DBC66A0 /* GDTCORUploader.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B04B5BCD905ACB2C2079AFD75AB6597 /* GDTCORUploader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 93C4DC49847D79F57FE9081C860C838A /* FBLPromise+Wrap.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 82BD2B064A081DE7FB1B130EDCAAA263 /* FBLPromise+Wrap.h */; }; - 93D5643C0AB33FEEBBC46006C28AD6EC /* log_reader.h in Headers */ = {isa = PBXBuildFile; fileRef = 40FE1C2937524054AB15B3A3F4272345 /* log_reader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9408D969BC396404237E37745DFCD3E5 /* FIRLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F2E840DE3E5096DD4B221B61ABE94B4 /* FIRLogger.m */; }; - 9456C0CC30E27EC6E44E1B7E509C7908 /* FIRErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B12871BB34F2EA4AC753A384DD80F71 /* FIRErrors.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 94605D578942F9050F95C09666C8A0DE /* FIROptionsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 87C8D393D6580BF43944DB0760788D06 /* FIROptionsInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 94D3B9222CFE703A7F324982FB2896C2 /* FCompoundHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FD56C3309CCD46F670D5CC2DEA4B8F6 /* FCompoundHash.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 94F443F2A3E409A0DD460F8CED709426 /* port_example.h in Headers */ = {isa = PBXBuildFile; fileRef = 4781B46372655A8914D2F3F4F92B66A8 /* port_example.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 95075C8107ED96F6C5E393C0528BAA24 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */; }; - 95DD27DE92BA62EBD4899815B8B82E94 /* GDTCOREvent+NetworkConnectionInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 12F7E2F7B784439C5476A1EF8BD49AF0 /* GDTCOREvent+NetworkConnectionInfo.m */; }; - 963AC4F88FC6DB6A294C23A6B94B895E /* FirebaseDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 148C3A198D5DEC1D04F9AC25F9963A0F /* FirebaseDatabase.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96EE898B4D6112C56164BD01DF544A95 /* FIndexedFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = D7C3CEC573454AA3BE96772D20CBD14F /* FIndexedFilter.m */; }; - 9709DEECF73CB7857CD08B0F7CC324DC /* FIRDatabaseQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = F229899516D0622E81CAD20651193F00 /* FIRDatabaseQuery.m */; }; - 972069230464E6CE883137D34054A915 /* FAtomicNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 76009627450555684FFB602D5CDB66C8 /* FAtomicNumber.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 97A79F93977B5D83B4B24AADC6E55F99 /* FBLPromises.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 60129F2C1744E4C6A0B45D363AEEF0FD /* FBLPromises.h */; }; - 98CE6713616C5FB36055CE35CB912580 /* FViewCache.h in Headers */ = {isa = PBXBuildFile; fileRef = DC29D06EF9DB0608699CE6668F459127 /* FViewCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9982123CD233B4B9CCD7726EB385AC47 /* FIRComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F468A47D4B1484163852DBA4C01BDC2 /* FIRComponent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 99B08BD22638BB764A6DB636BD6EEE83 /* FImmutableSortedSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 361D5CC60A972E92E4E30CAE036573B2 /* FImmutableSortedSet.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 99F16CB0C7366E30E911E0CE59932E2E /* FBLPromise+Always.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D7B530E73F5DDD639F32EA9C53A45C2 /* FBLPromise+Always.m */; }; - 9C9383AFE832544B9A756FD939602FE1 /* FCachePolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AF11CCF6B730B0458E39354C36DB72A /* FCachePolicy.m */; }; - 9C96B262B9F7AD344AC96B378D6575EA /* FSyncTree.m in Sources */ = {isa = PBXBuildFile; fileRef = E7C728948CE0F1485BF0F4BAFD54D11C /* FSyncTree.m */; }; - 9D89A42D660A393CF67488B773CAFB86 /* FTupleFirebase.m in Sources */ = {isa = PBXBuildFile; fileRef = BE1FF88442223E72C05A63E1D359C30A /* FTupleFirebase.m */; }; - 9DB252952D8A38CCE72464F9F7200248 /* FPathIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = B338B2C9808C5C0AF778CD7DADCE1AE8 /* FPathIndex.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9EC1EC9364B5CDFB31A12E9D5764FC6D /* FBLPromise+Wrap.m in Sources */ = {isa = PBXBuildFile; fileRef = 50625C3A47D2BE9C9BD6151D17714D80 /* FBLPromise+Wrap.m */; }; - A04610B5385CA6177BC5656B0250303A /* FBLPromise+All.m in Sources */ = {isa = PBXBuildFile; fileRef = BB0D2688C1F6E5C119D27FA7EB2A6087 /* FBLPromise+All.m */; }; - A0E974D12B01BDCBABDA5E13FAB7F60A /* FBLPromise+Catch.m in Sources */ = {isa = PBXBuildFile; fileRef = EE5C51CE831C623408DB778C1ABA0148 /* FBLPromise+Catch.m */; }; - A11D454125A8A77C3C56C831647BFDB0 /* FTupleSetIdPath.m in Sources */ = {isa = PBXBuildFile; fileRef = E0133CE971C065D957EDE8B9AAF9B36F /* FTupleSetIdPath.m */; }; - A140D4912634751D944F96961A729678 /* FBLPromiseError.m in Sources */ = {isa = PBXBuildFile; fileRef = 0496F85216D9C79A563C82C7CDB45620 /* FBLPromiseError.m */; }; - A170992FA484285612C6963363E5DA79 /* FNextPushId.m in Sources */ = {isa = PBXBuildFile; fileRef = E58F4E0A35AE5270A10F0B182C0CBC9E /* FNextPushId.m */; }; - A183BD1108871F9318965F176B82698F /* testharness.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9C997CFFE0B0EB3DB9D6ADAF73854B4E /* testharness.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - A19AD85CAB80A263AFE2A2B213D752F7 /* FSyncPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 11480D63F4E0BD36E1D198F5A9A73FB2 /* FSyncPoint.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A1EA5FBC078FE046032A7944CB6643B4 /* FAuthTokenProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BD62334D7DD704E7183CB5CD05D5FEF /* FAuthTokenProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A2AB536DABF58FA5367313F8A4DD4E6E /* GoogleDataTransportCCTSupport-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AB3707E44CE0D64C47BB82321FE3BD4 /* GoogleDataTransportCCTSupport-dummy.m */; }; - A30642CFFF9C5A8F3478A7A60AE5B7B1 /* FTrackedQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = D300E695491585B083A58415F81511F1 /* FTrackedQuery.m */; }; - A35AAF57E54A60DAE0F8B0B73A95E909 /* FIRDataSnapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AC6719935B3430DE4E11C520944D8BF /* FIRDataSnapshot.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A47E0D6D145338CB1E31C34A05FC4D22 /* GDTCORUploadCoordinator.m in Sources */ = {isa = PBXBuildFile; fileRef = 057F550138403A0C7FD68032C21A0E20 /* GDTCORUploadCoordinator.m */; }; - A4A889BBD02B931CB5C8BFD0D4F41883 /* FTupleUserCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = EAE499B2DF8EBB7143A877BF5CDAEF4E /* FTupleUserCallback.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A5465698DF7B22C392B7D31DE534DEC5 /* hash.cc in Sources */ = {isa = PBXBuildFile; fileRef = FBA2C6C1EE48B9B639ED048474EB4157 /* hash.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - A5828FCD71C9F92CEB40745B44E56D50 /* FBLPromise+Do.m in Sources */ = {isa = PBXBuildFile; fileRef = 67AA07E8EC09CCB7FE04406017A4C519 /* FBLPromise+Do.m */; }; - A5CFAA6948B4DBD6A65CA62F8C86DD05 /* pb_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DE1D8D85EC90A32E28154D880378587 /* pb_decode.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc"; }; }; - A676E368E2A95B5AC9D25DEE38C0102C /* FLLRBEmptyNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BE48E3EE3333BF5E2BE4F1CD5787E3D /* FLLRBEmptyNode.m */; }; - A68E8B2EE1FF194B6655B436EB9BDC33 /* FKeyIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = A8DA6D09CA5BA0ADBB362152B7846961 /* FKeyIndex.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A6FDAD94CB273F331BDBB351144134B8 /* FIRMutableData.m in Sources */ = {isa = PBXBuildFile; fileRef = 09306EA07C5E6C3D3EB420111146C811 /* FIRMutableData.m */; }; - A71FF5D6D6D76CC6FC7B3B43B6C33376 /* GULKeychainUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A0818CE0BCE0C31BA702F922277305F /* GULKeychainUtils.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A7F784E4E56862F8FE6FF4F9027969BF /* GDTCORDataFuture.m in Sources */ = {isa = PBXBuildFile; fileRef = 23DF0DDD2310CC408B1DBE663F9C3CAA /* GDTCORDataFuture.m */; }; - A89682156BD2FAEFC4ED75AC7E658794 /* GULKeychainStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 446761389CFA822783FA41B1CAB429AA /* GULKeychainStorage.m */; }; - A93A8D91D7274E5B74371311D47C73F7 /* FPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 860B744356EA183E469CA636F94AEB50 /* FPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A970A589B1BDCD6E26AF291394CA3E31 /* FirebaseCoreDiagnostics-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 119F6DBEC2830D0007421DCE8BF46135 /* FirebaseCoreDiagnostics-dummy.m */; }; - A981CEB46C05996B9F96978A564D4DBE /* FIRServerValue.m in Sources */ = {isa = PBXBuildFile; fileRef = A551638736E976C6F89390DB407C4331 /* FIRServerValue.m */; }; - A9D7DC9B772159819C6F4D31259CD6A4 /* filter_policy.cc in Sources */ = {isa = PBXBuildFile; fileRef = C659D2D4B99C8CDA79646FE859D2696A /* filter_policy.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - AA11D72BE245291456CCB9C76F81AF67 /* FBLPromise+Await.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 072544F03E5AE2F64EF237E82D81D545 /* FBLPromise+Await.h */; }; - AB0E800A978D847EF27F7AA5C14CF881 /* FCompoundHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 88B434AB00179B49FC2340C88AA79645 /* FCompoundHash.m */; }; - ABD93BC90532E19EC023F2EF7F9D9371 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */; }; - AC9140659556BDBA9D745D74CD3A6428 /* FBLPromise+Race.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DC5B45B4B2D0DC0AE3FB7A75E08649A /* FBLPromise+Race.h */; }; - AE0DD7A7FBBEE2BBD6287686FBC88221 /* FLevelDBStorageEngine.m in Sources */ = {isa = PBXBuildFile; fileRef = 37FBC87BF2448D86A7BDADF009B9803B /* FLevelDBStorageEngine.m */; }; - AE2804D9077D31BCFFB1776E9E7329ED /* FirebaseCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 666F60F1D8D46D275395769502141CD1 /* FirebaseCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AEAB078B047E355A69FE5114F8154936 /* FIRDatabaseReference.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A4EB59A5D57265DCE22DAF6B0F62EC4 /* FIRDatabaseReference.m */; }; - AEB451E345319D5C736EC9E375325C18 /* FRepo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E17B23410BF812634C8DD594B2392929 /* FRepo_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AEC4797BD06C0E8B4DF592D417318437 /* GDTCORTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = 674391F19F12A6728205D726D39B24BC /* GDTCORTransport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AF1811523BA6E37F94F756239BE65D94 /* GDTCOREvent+NetworkConnectionInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 393AE47449FD921FAD26AC79342F7367 /* GDTCOREvent+NetworkConnectionInfo.h */; settings = {ATTRIBUTES = (Private, ); }; }; - AF3ADCA0514ECA43FAF773D4E9DECC18 /* FDataEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 36E86F31E1010E4369DFD5A8B2C46D99 /* FDataEvent.m */; }; - AFA7F572F0E36F26B233C861C89DECAB /* GULSecureCoding.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D1AF60094F489C5CAB30597E9300702 /* GULSecureCoding.m */; }; - AFEE9EE6550E8A52A7E0B41ECE994382 /* GULLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 06EC7B364270EE75563BEB149A98E2DC /* GULLogger.m */; }; - B011CBB9CD6B822748DBDFC864B74856 /* FNamedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 097A95430769429A66795E9E6AC6450A /* FNamedNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B134B0CEE9718272E9DF54276CA6CB5A /* FEmptyNode.m in Sources */ = {isa = PBXBuildFile; fileRef = CD158462CD76FEB1BCB0075BEED53C2A /* FEmptyNode.m */; }; - B13C59D3EC48DBA3E960F3030AB7DFF0 /* FTupleRemovedQueriesEvents.m in Sources */ = {isa = PBXBuildFile; fileRef = EAEAD2C37A2F7D54EB5D112BE700E464 /* FTupleRemovedQueriesEvents.m */; }; - B172CD005EC2DB0C68CDCFEE1A1442E1 /* GDTCCTCompressionHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E7DD82D268001C64258EB45BA0470F2 /* GDTCCTCompressionHelper.m */; }; - B1F0A49CE2997BD30DF7252D6920BA40 /* FTupleBoolBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = D1E6D1D803B379D5B9D499DC2AEAAD57 /* FTupleBoolBlock.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B2351BA6AA93042A3CD8553B32EB1410 /* FIRApp.m in Sources */ = {isa = PBXBuildFile; fileRef = FAD139992C71368B1D6232300F330E1E /* FIRApp.m */; }; - B38FE144483BB55FAE1610A2ABE9AD1E /* env.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D6E47B616DE755714427591880125AE /* env.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B456E026E105D2D5852F52B8CA410B93 /* FIROptions.m in Sources */ = {isa = PBXBuildFile; fileRef = EEAFB8AE27936F24FCBC0EBF570E19DF /* FIROptions.m */; }; - B4592A85208BA71D07F267C9743D0210 /* FDataEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A314FA39C00A05F50CD19B20BE48E0EE /* FDataEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B4A284890905A75D4D379A29452218E0 /* FWriteRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = A8D9FCB9E6E7263B05452B4A1E52C57B /* FWriteRecord.m */; }; - B4E0070CB2B00E4EFDFBD22D3115C495 /* coding.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B7C8165FC40E1432F5EB7EA2782E04B /* coding.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B5121C8C0C047C4C994A3296F4CBFA29 /* FWriteTreeRef.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AF24CAB681011F26CE27B6CD0DA5E53 /* FWriteTreeRef.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B56F29BF7F794835D2FA9484365D4944 /* FViewProcessorResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BDC69FEF92061A1018272C226777880 /* FViewProcessorResult.m */; }; - B57B41BDA5F9F5DB72C186D9865980A5 /* FTupleUserCallback.m in Sources */ = {isa = PBXBuildFile; fileRef = 3294C1F7B7748B520AFE0A6E3E5FDE30 /* FTupleUserCallback.m */; }; - B7E58D721D4EB5B30F25444AD97F6915 /* nanopb-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DBD5F0D6D5607CCC279F0AA16086D019 /* nanopb-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B7F3AA388B10FFB10143FA5537650DE3 /* hash.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DB35C5A4E090537BCD1F8382ACCD601 /* hash.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B8A54C5C3CC014705A8AEEE4F8130837 /* FChange.m in Sources */ = {isa = PBXBuildFile; fileRef = 79E2BF71AE254982334583E815969709 /* FChange.m */; }; - B8B790054A38100E5BFDB4C9F2166DF8 /* APLevelDB.mm in Sources */ = {isa = PBXBuildFile; fileRef = 575EF3111261A829259FBDB6C19F8205 /* APLevelDB.mm */; }; - B8CA041BC37733E92042E962A580E099 /* FImmutableSortedDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 7054A55E885CFA0B88E9B303F1CA6A8D /* FImmutableSortedDictionary.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B911CFB8610BBF3C0F24B65ABA3CF3F0 /* FImmutableSortedSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D5A4DB629B5B17E2F7AB448096A4572 /* FImmutableSortedSet.m */; }; - B9B6AC6AA6B4045C5E47AB555D26D4DE /* GDTCORPrioritizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A9D85795C3AB0FC818197A64F6ADC1F /* GDTCORPrioritizer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BAADC524E75E1D8928202B1A5CD0FE6E /* GULLoggerLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = 3144BEFF69AFAEDE619B25FE59B16969 /* GULLoggerLevel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BB464EF178EBC021F6AAF6DB41B88D5C /* FServerValues.m in Sources */ = {isa = PBXBuildFile; fileRef = 32B7228504715C2E4B9E3D0DD3622543 /* FServerValues.m */; }; - BC5A60CB3173669785FDA3DF8D0CDA6A /* FSyncPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 218E7BC1C220924B1D6785CA4C25DC96 /* FSyncPoint.m */; }; - BE8B58E802E3BFC76B2ADD29F2EC4AF8 /* GDTCORLifecycle.h in Headers */ = {isa = PBXBuildFile; fileRef = B4600FE4208AE3E5795D8EBB5F97A617 /* GDTCORLifecycle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BE9467BE9494527D5D49C93812D30079 /* FBLPromise+Await.h in Headers */ = {isa = PBXBuildFile; fileRef = 072544F03E5AE2F64EF237E82D81D545 /* FBLPromise+Await.h */; }; - BF08B4C324DECBE26BFD0F695C4190BF /* FValidation.h in Headers */ = {isa = PBXBuildFile; fileRef = A43C04A3FED5D0538408B186EB5A4FD1 /* FValidation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BF7F746EAC86697E7B02E108948287F5 /* GDTCOREventTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = F3082C73B86C39432F3BEE1DB2F53924 /* GDTCOREventTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BFA1C79B75FE0EDD55BCDC01CEA539B2 /* FTypedefs_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D96FB1E0748CB2643821DE1953901D3B /* FTypedefs_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BFDC80CCBDA9AEDCCBD11601E5970505 /* GULHeartbeatDateStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E2D65ECD11B6AEB036931D5A3380113 /* GULHeartbeatDateStorage.m */; }; - BFDFD609230B6D3440C1D188AFC60895 /* FOperationSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 193284F73773846AA3A34879EC56EF86 /* FOperationSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BFF780519BE9369BA0159FFE686B5B00 /* FRepo.m in Sources */ = {isa = PBXBuildFile; fileRef = E0EBF5A75E65BAB478184C63E9D29E55 /* FRepo.m */; }; - C00B4883920C764B9AAE225E756DACF0 /* FBLPromise+Wrap.h in Headers */ = {isa = PBXBuildFile; fileRef = 82BD2B064A081DE7FB1B130EDCAAA263 /* FBLPromise+Wrap.h */; }; - C0840CA66776CEA209B224ED2C274294 /* windows_logger.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D339BC8AB099B5E05C88DAA77FBD0DF /* windows_logger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C23156AB0C67FB70CAC131BD5EA62A7D /* GDTCCTUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = 58570F7234627794C4BF02928884354A /* GDTCCTUploader.m */; }; - C251990DC88BD29ACCA3CB46E5935711 /* FIRDatabaseComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B4F0813AD0FE6A019D69BEE02FE48B2 /* FIRDatabaseComponent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C2EFBC4F0E04491F1E47B04D8DB2A7BD /* GDTCCTUploader.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AC4A9BC66B8D2CD0D2CB7874781F3E5 /* GDTCCTUploader.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C30900E8594FBAAAAE8F3699D8F3A31E /* table_cache.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FE487E9D169B1987ED50BF7CA45AB85 /* table_cache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C4E1E950931E52050E9BE5FCD9272EEE /* FEventRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = D9A699DB734FC836C80F34584A4A6781 /* FEventRegistration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C4F84818D463A2C85D1B0AC785C0D75A /* FIRHeartbeatInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E65C99CB1E05FEDE149BE32F292733C /* FIRHeartbeatInfo.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C5D7F1E742FC356D7634879D05F7E194 /* cct.nanopb.h in Headers */ = {isa = PBXBuildFile; fileRef = 612393A8C0D0B02C9ADA7AB38EC11ED1 /* cct.nanopb.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C678D9A28B761A4DA5E29CCF6DCBE82A /* FQueryParams.h in Headers */ = {isa = PBXBuildFile; fileRef = F47CA6F1F12ACAF9B0755A517EEF8774 /* FQueryParams.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C69ADB52F0C74C9395A7D765309FCD83 /* FIRServerValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 991856E8769D32D7006FE848E3EB873D /* FIRServerValue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C6E30428F84E81A7DBC8300BE93C9239 /* FEmptyNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BBD1F80252B16388D8A2E0DC2FC7D9E /* FEmptyNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C7736F65BB6EADB27DBC7391CDA9F97E /* FPriorityIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = B33A7C7D5DA6BCED7A54588D8B519573 /* FPriorityIndex.m */; }; - C79C2E16C567BE240374AB2ACA80E9D3 /* FIRDatabaseReference.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FBAE93D87DDDF2F1354A512B9055879 /* FIRDatabaseReference.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C7A5F5CE6CDF617255F34E95436634B0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */; }; - C7C18B192A7D3836E0740DCFA83F0713 /* FTypedefs.h in Headers */ = {isa = PBXBuildFile; fileRef = F2560D7CA1567608F6BCDCD70881AFB4 /* FTypedefs.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C7C5928AE2BAFCE30C33F465FC27168F /* block_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E856DB50BD68A84A63AE55499872178 /* block_builder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C7EB3D4DF6FE9676259754253B9A7A99 /* FIRBundleUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F2DF0513C9DB23D691523760E8A297A /* FIRBundleUtil.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C8551DAA6BEE4C8D580B625D19EED829 /* FSnapshotUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = A720480A68376788BC41CE5196AD1D6D /* FSnapshotUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C8FC39092B2B902E7104CE205085EFDC /* two_level_iterator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 99C96C3B40C51D1D79FC28DC8197EB3C /* two_level_iterator.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - C920951A0C1DD5F402838058F6D760CC /* FCacheNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BD8AF5861BD6D8277CCB8D46458CE6F /* FCacheNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C923E01B60A3AB065A6E62679ED8E750 /* FBLPromise+Retry.h in Headers */ = {isa = PBXBuildFile; fileRef = D2A24B05955F1EE99EBC76E88971F2D8 /* FBLPromise+Retry.h */; }; - C963AB40523BA26634F4C7F8EBB21E54 /* FIRAppAssociationRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = 38795B0F87C340F69CFEDED0CCBFAC37 /* FIRAppAssociationRegistration.m */; }; - CA46156BB5C577F8BB7A3844B182E3BB /* FBLPromise+Do.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = B299C026C8827C5F992F488CCBA2D192 /* FBLPromise+Do.h */; }; - CACA4866A8A21F378C5C22C4550461CC /* histogram.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A971A378B109444D68EC9F1710744D4 /* histogram.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CADD0B727BBB942525DC66741C672D41 /* FRepoInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DB9220001C09A1747358192EC9ED2C84 /* FRepoInfo.m */; }; - CAE26FCEE07519D3D1BB7633D4CB301B /* GDTCORPlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F89EABDE73772529AA4D1632A76AB10 /* GDTCORPlatform.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CAF5489A9704768C8FDD43DEC3AAC933 /* FTupleBoolBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = DE8DDBC684EAB94B117FB431D6983794 /* FTupleBoolBlock.m */; }; - CBA82B32238E09AEFD8939EAEA855646 /* env_posix.cc in Sources */ = {isa = PBXBuildFile; fileRef = A2D25B8664C78BB8A4AAAF6FA3EF21AB /* env_posix.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CBC9592C21A1A9DEAA3C3953C198354E /* pb_encode.h in Headers */ = {isa = PBXBuildFile; fileRef = 541C1635CF2ACAB31B12B3FD9367089D /* pb_encode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CBCA7426005DB9BB0ADAE6326E4CC0E1 /* FIRComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = B376CAF865729E1CF465CFCCA52115D9 /* FIRComponent.m */; }; - CBF64DE8DF849F4CF5E27D6BB749E2FC /* FTupleOnDisconnect.h in Headers */ = {isa = PBXBuildFile; fileRef = 6266F0F67AE31067A90DDC828E91BFB1 /* FTupleOnDisconnect.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CCC75B000A3E179DEA8088BA34DB743B /* FTuplePathValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F69F234C57436B1A1499CE33ED96AAA /* FTuplePathValue.m */; }; - CCE81C520CE25D15FDBA09D537AFF746 /* FirebaseCoreDiagnostics-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C8ADE11EC03AF033C186B754146EB29F /* FirebaseCoreDiagnostics-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CE649478AFA1F9ADA8924C1D1598400F /* GULLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = CB03CAD9E17D96C89C856908211FD5AB /* GULLogger.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CEA524769B166ED5FC36B6E9FA0B041D /* comparator.h in Headers */ = {isa = PBXBuildFile; fileRef = 98F196A197AFD44C0C2A0FB7E9BACF4C /* comparator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CEB003A648ED9530DED6E090307C484B /* format.h in Headers */ = {isa = PBXBuildFile; fileRef = 72EB4F6047A67ABF94B6F8BA86D2D234 /* format.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CEE535DF3E8CA25232B7387253975836 /* GDTCORUploadPackage.m in Sources */ = {isa = PBXBuildFile; fileRef = 64705E8D19B8D928285A3720DB0206AE /* GDTCORUploadPackage.m */; }; - CF911D7374D087D44CC4AAEFA75725E8 /* FIRDiagnosticsData.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B25CE4BCD165FCACCCB347BE5C627FA /* FIRDiagnosticsData.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CF948DD801C7F1000C5484B956587B3C /* GDTCORFlatFileStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = C10C6020EDDB2016BD64181B672CBC2C /* GDTCORFlatFileStorage.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CFF003B36714BB84CCABFD01A374DEF7 /* FIRNoopAuthTokenProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F2ED88980ADD02F9CD95D5F802803F1 /* FIRNoopAuthTokenProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D068F02A0E7724FE1BB37E66983C3E90 /* block_builder.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6EB5D83F05D2269F33466C7DCFCD26A0 /* block_builder.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - D179BDCEA10E68B3BEC247D80C2629E1 /* GoogleUtilities-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 23C1A4E1F44845DC103D917C703A455A /* GoogleUtilities-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D1A080CA4394BF24FA7EE1F4D9FE6C06 /* FSnapshotHolder.m in Sources */ = {isa = PBXBuildFile; fileRef = 35EAD172ED92244F64C80D04A17BDE79 /* FSnapshotHolder.m */; }; - D1F20049C9573F35B5B8925149A6D382 /* db_impl.cc in Sources */ = {isa = PBXBuildFile; fileRef = 569511E399F07ABE1A4CBB713DF08B7B /* db_impl.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - D22F0143382C701C65528F14BBF6F3A3 /* GULHeartbeatDateStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC5E8282CA57B988CA60B91846B3AB9 /* GULHeartbeatDateStorage.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D260EB226C838D723F36960F519FA36A /* FSRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E1C4E4A64421A0A894E0DDA64147BDD /* FSRWebSocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D2B8D11353EE71C28309AD98487B8F89 /* cache.h in Headers */ = {isa = PBXBuildFile; fileRef = A3823B10AD6A6B24863EBD4ECE0D691C /* cache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D2F2DD920168057066470E3B831DE30C /* db.h in Headers */ = {isa = PBXBuildFile; fileRef = 621D483E45E92BE126C17E8261A0E6FA /* db.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D312D681EDBEB8E36664C1DEB29425FD /* FTupleObjects.h in Headers */ = {isa = PBXBuildFile; fileRef = 38A43235156A1459847105BB4F2B300D /* FTupleObjects.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D38250CC0ABA2279901BE2CE4615E1BC /* FIRComponentContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 301F5A9AE16774CF0D41657DAD925B78 /* FIRComponentContainer.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D3AA7BFC4F1811139A87AED29C65B568 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */; }; - D3EF13736C1E7C79191294C5C6AFE061 /* FIRApp.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C73EAF4D8A7A12724B8D66F3FB39624 /* FIRApp.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D4956895D64F9FC87662AB74344D45FA /* FUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = B423C55EDD8B0EBA1C93A2C48DD3B22B /* FUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D52AFA8E3FBCEC394CDC82379FE88B52 /* FIRTransactionResult_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EA42623F573679F9A5B044DF94A4DDA6 /* FIRTransactionResult_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D54C12CCD45AD385ADA492A74CCFCE47 /* FMerge.m in Sources */ = {isa = PBXBuildFile; fileRef = B781D7A58A91FBED1BE497CD9B527741 /* FMerge.m */; }; - D563DF007CB1939F99BC90947D9D8678 /* FCancelEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BAE9DB2B881172814343BCA44C7BC98 /* FCancelEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D5EBF5BEB2D1AD674AF8B08215FE9A09 /* FStringUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 975D7F0C4BD02609E2E89C0BDB223652 /* FStringUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D6B664412AE127A4AC23D401920FEB09 /* GDTCORUploadPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = EC794BDF881104077CA6D858C004F116 /* GDTCORUploadPackage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D6D52B1DF78845B91144E2C6CCD5C62E /* FIRDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 30D3A7460028A9EA81EADFC2C2A322F8 /* FIRDatabase.m */; }; - D71A9029947DDB7C7445FC4B406652A8 /* builder.h in Headers */ = {isa = PBXBuildFile; fileRef = 673B1B561ACB418F330B4478AE33C9F3 /* builder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D806CC0D12BBBE72304FF80125CFFB95 /* FSyncTree.h in Headers */ = {isa = PBXBuildFile; fileRef = FC1EFE2DCD55CE417891AFDE45E7C27A /* FSyncTree.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D87DEFF98E5A8549450A1851FC4987AA /* pb_common.h in Headers */ = {isa = PBXBuildFile; fileRef = 37991EF098780E2D9FBD3B42EA8175D3 /* pb_common.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D8A5DE27DCB5E12927641DB568623146 /* FPersistentConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = E2B8A272C8F2DE84AE5BEE68D7C5A30F /* FPersistentConnection.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D8D511258397444B99E83CE98266F4B8 /* FMerge.h in Headers */ = {isa = PBXBuildFile; fileRef = 95EDE74C6DE1F87EE3663A0AD366B7B5 /* FMerge.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D90F58C9020028273163366EE06B6ADE /* FRangedFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EF34E159FC9FB47A99C6BA51BBFA12D /* FRangedFilter.m */; }; - D94829308831E45ECE321B5BA370D635 /* FBLPromise+Validate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ADE589487EE027BD9C1EBD727FC2E9E /* FBLPromise+Validate.m */; }; - DA396B909B86FC5569879519A6FE8E22 /* FIRDatabaseQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 50F19DE27755B2D81E7D4874D093FB38 /* FIRDatabaseQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAAEA152388F6C52245AA64E442D05FC /* FTuplePathValue.h in Headers */ = {isa = PBXBuildFile; fileRef = C2760200A696A747EB2BB8996E5F37C0 /* FTuplePathValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DB79E37CCB8545B7EE8831773E26CFDF /* GDTCORUploadCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = A0CDEC73746A123B250DF34810E0C957 /* GDTCORUploadCoordinator.h */; settings = {ATTRIBUTES = (Private, ); }; }; - DB89733216DE2D40031AE2F5CABAB31F /* FBLPromise+Testing.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 98FC3E75806D347BDE1998F9D6F7924D /* FBLPromise+Testing.h */; }; - DBAF982DF23404E0B19A86076B64C05D /* log_format.h in Headers */ = {isa = PBXBuildFile; fileRef = 4321B4C224765D94C7503E3C6431F9B9 /* log_format.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DC00B8BAC2B87B7A3367D24EA0DB1B6C /* GoogleDataTransport-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3275B1466A10C59A57FA855C3AC6DECD /* GoogleDataTransport-dummy.m */; }; - DC58F5895F8BCD218A84F9054BC3E86C /* GDTCOREvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C3685222F5D9D2662CE36EF1DF7D307 /* GDTCOREvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DC6E0025FB91F7FADFCD8770AA001155 /* FListenComplete.m in Sources */ = {isa = PBXBuildFile; fileRef = 1823A9ACE2C8152C1B82264C89EE7A22 /* FListenComplete.m */; }; - DDAB6756EE8FE818CB93EB1A9D952A4D /* FirebaseDatabase-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E090AC85D60368344DE2CF202EDFBFE3 /* FirebaseDatabase-dummy.m */; }; - DDF72157B0D446D7EF4A6D0367B053B8 /* block.h in Headers */ = {isa = PBXBuildFile; fileRef = EBA7E6C2A107483467C6124774CEF75D /* block.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DE93F4E12CDA7FC6357259A718B1C5A4 /* GULAppEnvironmentUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 95D786CDC75102E908AC12A8FCEC111A /* GULAppEnvironmentUtil.m */; }; - DE955B63B64F324BD5B137F172790A3F /* iterator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3C38FD08C4002E8A3E088547DD0523ED /* iterator.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - DFAD176ADA312BEA0529E7B838FDBCFB /* GDTCORClock.m in Sources */ = {isa = PBXBuildFile; fileRef = 78AE048F46E327022930DDCA71CF3271 /* GDTCORClock.m */; }; - DFDC2EED29D814BDB23DD0A4F7CEAE91 /* FBLPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = 4860AAD628A98E1A707FF827FF3AF9E9 /* FBLPromise.m */; }; - E054D4F5671FCE00657213A710EA8CF0 /* FBLPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = 87A11B9808FEF3BD00DEAAF8F1F7A1E8 /* FBLPromise.h */; }; - E19AC8F914674DC90C18FCADD666D857 /* FIRComponentContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D07B68D86353EF71AF26AD8633ED011 /* FIRComponentContainer.m */; }; - E27395E133228033F2BC45F49F521CD9 /* FIRBundleUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = AAF98DB258436A94B5CFFCB168CA4E11 /* FIRBundleUtil.m */; }; - E3AD662787E8CC55CC07DABB793339B9 /* NSData+SRB64Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FFA595A6BC21A8745A22CAC7C9C9678 /* NSData+SRB64Additions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E3C6D1B6BBDD0166C8F655ED945C880C /* firebasecore.nanopb.c in Sources */ = {isa = PBXBuildFile; fileRef = 19E1B93177BA8A0D2F8885B9BFF9D994 /* firebasecore.nanopb.c */; }; - E3D6CE7A26373CE27EA2F2758B2D4150 /* FIRDatabaseConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 955193171396A5F7FDA4F76ECCAEAC78 /* FIRDatabaseConfig_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E40EC66CF2490B6FC9306FB9368DC6C0 /* filter_policy.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FDA53CDBFCA82B7F7184B44BC7FBC7C /* filter_policy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E6715A42C554FAEF8EB27F36E877CA20 /* table.cc in Sources */ = {isa = PBXBuildFile; fileRef = 794FB584900DC2C9932AC53A681FF10C /* table.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - E6775BF598A27C32D40B1DCA108C595A /* cct.nanopb.c in Sources */ = {isa = PBXBuildFile; fileRef = E9558FB6E3417EEB6ACC4BAC9665F3A6 /* cct.nanopb.c */; }; - E6B16206329066116FE37EE1220DF3C2 /* FBLPromise+Retry.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = D2A24B05955F1EE99EBC76E88971F2D8 /* FBLPromise+Retry.h */; }; - E6B5EE50C0455FC011163FDB310BD3AB /* FTupleStringNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D6D098D6D2D89BD890B660DDC02B2C5 /* FTupleStringNode.m */; }; - E7157FF950C22E9D530BCE35DB1B7B9D /* FTupleTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = B5182676AC9060524937E8799614DFAC /* FTupleTransaction.m */; }; - E80BFE452CF64B1A92B59699AAA3FBBD /* GDTCORAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = BBE58D8C7B4DF5B650E6528061BAF00C /* GDTCORAssert.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E8BB147D613CF877470C822F05E42DFD /* GDTCCTPrioritizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E328AFED73206DE3C41B2F236188BAA /* GDTCCTPrioritizer.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E9267477B2E0A130107F04B268914775 /* FIRComponentType.m in Sources */ = {isa = PBXBuildFile; fileRef = D95FFC4B09BC1ED974D778A5C00737B1 /* FIRComponentType.m */; }; - E98AEA2493832610AD36E545FB8EF061 /* FNextPushId.h in Headers */ = {isa = PBXBuildFile; fileRef = E1FC5A36113AB7A7F53F63FA047F3B95 /* FNextPushId.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E9D939A583E0F24A7AA009FB06342C44 /* FClock.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EA2D82B72EC58BCC44AD8106CB4E716 /* FClock.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E9E439558089E50E50FB264B2206CF34 /* FValueIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = 8454AAD8C7BABB4D4FC9DC6D3F1FC788 /* FValueIndex.m */; }; - E9EEB22091465F6135B7ECE0ED0A287E /* FPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 43744D2FF04A8F6E07656E852E3190B2 /* FPath.m */; }; - EA1E8453723787E846BF722D1313A31A /* filename.h in Headers */ = {isa = PBXBuildFile; fileRef = 1942EA14A957EE8A1FD53150BCF5FC1E /* filename.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EA4B84BFA49549860AB720711432D5FB /* FIRRetryHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B33DBADEF735E61DC443B9753E707E98 /* FIRRetryHelper.m */; }; - EA91FA2AA434FF82E02F1E5357C0CDEE /* FCacheNode.m in Sources */ = {isa = PBXBuildFile; fileRef = EC6B40288A57CC407F022CB43E26AAF1 /* FCacheNode.m */; }; - EC4C01441144260658084EF24BB4FE3D /* nanopb-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 12AD2385ABCEF551C7DB322A63BDA8B6 /* nanopb-dummy.m */; }; - EC64299425B5180EDF4E687B084C7A04 /* write_batch_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DE08BA4A6C1A53923EC02F9A515107F8 /* write_batch_internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ED1750A66B141E046BD9686F5840A055 /* filter_block.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2B470A9772DB8914D65302D7E669FDAF /* filter_block.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - ED55C0E5FE9C2F5E7782F82C6671DA37 /* repair.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8F89CFE3165AF36055F7014246855162 /* repair.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - ED565D95563F4B8C38042F390537F8BD /* PromisesObjC-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 47CD1AEAB4C797A6A730DB00DE47D9CB /* PromisesObjC-dummy.m */; }; - ED781FD0390EF8635A826B3B14C440CC /* GDTCORAssert.m in Sources */ = {isa = PBXBuildFile; fileRef = 94828B387C56139BACCCEDC781E42B5B /* GDTCORAssert.m */; }; - EE2CFDF3946068BE4CA5824235CC15B6 /* GDTCORRegistrar.m in Sources */ = {isa = PBXBuildFile; fileRef = F4DC65C04D076732C25AE29A2908DF95 /* GDTCORRegistrar.m */; }; - EEF056693CD4BFDEFDCDF74271D1682B /* FArraySortedDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB6A055AAC08E126DD875D10F1681BE /* FArraySortedDictionary.m */; }; - EF101A4A352EAF4EDE9A0F75DC37AAEC /* FTreeSortedDictionaryEnumerator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D70C09F8DDD9DFB26AC7F97FAB70ED /* FTreeSortedDictionaryEnumerator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EF47B845839E293A5AF11EF2F7946CC8 /* FIRDependency.m in Sources */ = {isa = PBXBuildFile; fileRef = 873B2D52C27790E76C58F17E637447EA /* FIRDependency.m */; }; - EF84EEE29E8E694C0B5352DC64618DBC /* skiplist.h in Headers */ = {isa = PBXBuildFile; fileRef = 15DFFF5A3D3D914F480B877952EFAFBD /* skiplist.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F0F32B4EEF9319CAE2FD9492C961AD46 /* arena.h in Headers */ = {isa = PBXBuildFile; fileRef = B9D7744ACAB828228094C7FE549D9408 /* arena.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F12D3A396FD4AFB5E00C6DB18698306B /* FTrackedQueryManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F1EA207BC255E9BA95DB0C99A876B3 /* FTrackedQueryManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F1ADBEBF87EDAC904CFE9724211D4D55 /* FBLPromise+Async.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E5714B2DDE9933EA30C49F766B5E69A /* FBLPromise+Async.h */; }; - F2334D62F8ADA1D46807BB5F10F7F71C /* GDTCORPlatform.m in Sources */ = {isa = PBXBuildFile; fileRef = B2A6FBBC1582B73F699D2622665AD418 /* GDTCORPlatform.m */; }; - F30E60AFC01B39D14ABC67D9949E7996 /* PromisesObjC-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 394D1BEAD6AA9B9EFDBAA0EAAB06D478 /* PromisesObjC-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F382F5EE61B5A56B06F26BE8C4E98657 /* FStorageEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 59F59F63C4615D2ABBA8D3688DE5C1A2 /* FStorageEngine.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F42B8685FA5C3492C6D5C7B606BCD01E /* FBLPromisePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 83AD72E6FF9339276439BA4350ABDA13 /* FBLPromisePrivate.h */; }; - F48022BCC822C16AF2D17202FEE170F3 /* GDTCORRegistrar_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D9C044CDB58F661488097BB87AF131F0 /* GDTCORRegistrar_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F52BE9EA5A6FA30AD7591AA7243324B6 /* FTree.m in Sources */ = {isa = PBXBuildFile; fileRef = F8514701493814AB84C06709B66B8991 /* FTree.m */; }; - F5B003C652AC2DE5B5FAF1CD8026F51F /* coding.cc in Sources */ = {isa = PBXBuildFile; fileRef = E4CF0D1BCDD54ABB40EE9AD5F541C198 /* coding.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - F61055D1ACAD3A04A2E02885B9E5428E /* FArraySortedDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 77C24E7828CDD9A00B0A92ECEB5CFDB0 /* FArraySortedDictionary.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F68771A6212458CF307A3A236AA3CC2E /* logging.cc in Sources */ = {isa = PBXBuildFile; fileRef = E0B7CD0C231C6586963B625078141F9B /* logging.cc */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - F6B3E03523BAFADB7293332CE15F6B35 /* FIRConfigurationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 914AA32349DFFE43B88FD2C41C2E3880 /* FIRConfigurationInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F7F640FAEB3616081ADA43308E65F784 /* FIRDatabaseConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = B1AEACA1BDF2D31AC8B5E8D8883CD1CA /* FIRDatabaseConfig.m */; }; - F8ECC6E59188EE721B9AC5C2EC1C4C4F /* FBLPromise+Always.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FDB31CF6B1C1358EE35ADE19844DC7 /* FBLPromise+Always.h */; }; - F9193842F4C05FA2AABF0EB1215B74AB /* FIRErrorCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 2392A33D7F9C9CB28B956D731DA8F557 /* FIRErrorCode.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F96DA5EE1BC259712FEB86A4E864D5C8 /* FSnapshotUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = C22C5C60494445166C096866D5BC162E /* FSnapshotUtilities.m */; }; - F9FC3FD462F8BBAA08CFA4281BEDAA05 /* FPendingPut.h in Headers */ = {isa = PBXBuildFile; fileRef = 460A5884CBCEBDCCDD70D08A0D2EE516 /* FPendingPut.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FAA990BC4EB21DBA7A5B4C96DD13C0BA /* testharness.h in Headers */ = {isa = PBXBuildFile; fileRef = B25E09C5A052F1C3A6AE26E97F071ED2 /* testharness.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FBDC3E3A58C6FABFD180549A49CF313E /* FValidation.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D049B599CD35B1EBCCFB40378A858E0 /* FValidation.m */; }; - FD35B35ABAF436987B500776F6D1CCF6 /* FSRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 45EAA633A2105904DF70B93DB59F865A /* FSRWebSocket.m */; }; - FD9FFF2F68300DC16B9A1A9F20F816B2 /* FWebSocketConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B380EF7F940448A641CDF3A87516109 /* FWebSocketConnection.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FEEC3CEC5F56947B1E9391C9FDD24D1F /* Pods-openTok-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B87707E352D3B5520BAD0A84C358DC8 /* Pods-openTok-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FF8265E682F5B31C4127924028A5C92E /* FPersistentConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = CB4A191F4483E65DD757ECF72435553C /* FPersistentConnection.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 0C3750C14BFEE6DCB91698B371188BD1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 736AF68F6527ACF6B4A4C54728824A1C; - remoteInfo = FirebaseDatabase; - }; - 16E1CC5892022AC6D93441FE0947BE52 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5EB4B0B6DA6D5C0C3365733BEAA1C485; - remoteInfo = FirebaseCoreDiagnosticsInterop; - }; - 17A83CD745ED9427888166B74CCA8AA6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 736AF68F6527ACF6B4A4C54728824A1C; - remoteInfo = FirebaseDatabase; - }; - 3526AE8FAA4DD630EC08B2BF0649B0D3 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F4F25FCAC51B51FD5F986EB939BF1F87; - remoteInfo = GoogleDataTransportCCTSupport; - }; - 3D48395263091A504DA16225B783026E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5C0371EE948D0357B8EE0E34ABB44BF0; - remoteInfo = GoogleDataTransport; - }; - 3D7F773867E49CB7532EFACCAC2F1714 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5EB4B0B6DA6D5C0C3365733BEAA1C485; - remoteInfo = FirebaseCoreDiagnosticsInterop; - }; - 453F6F4B3941F2DDC491BA016BEFCC56 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4402AFF83DBDC4DD07E198685FDC2DF2; - remoteInfo = FirebaseCore; - }; - 47EA61FDD7BE25B0A48F212E5DE80D99 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8EC0F2618965C875A96BFDBEE5D9734C; - remoteInfo = FirebaseAuthInterop; - }; - 52EF848D791FD6DDA402C00E55148A89 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5EB4B0B6DA6D5C0C3365733BEAA1C485; - remoteInfo = FirebaseCoreDiagnosticsInterop; - }; - 53B79F606CFFAA47F665B32E8F9C490A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 620E05868772C10B4920DC7E324F2C87; - remoteInfo = FirebaseCoreDiagnostics; - }; - 57A4993B3210E1A73A547FE58FDFC4CA /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4402AFF83DBDC4DD07E198685FDC2DF2; - remoteInfo = FirebaseCore; - }; - 59C4EFE1F72233CA5B8C02CAC2E6BEA5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 2BBF7206D7FAC92C82A042A99C4A98F8; - remoteInfo = PromisesObjC; - }; - 783C76F76F51EC5DD0E2D622915C4850 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D2B5E7DCCBBFB32341D857D01211A1A3; - remoteInfo = nanopb; - }; - 7B60E879A1FD2B8A4E3F3B9B1CFC00B9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 2BBF7206D7FAC92C82A042A99C4A98F8; - remoteInfo = PromisesObjC; - }; - 7C4ADE3DDF4CD2F8B1EB81B93C8ABE5F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D; - remoteInfo = GoogleUtilities; - }; - 7F91E721DFEDFBB5E30593902EB52CE4 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 620E05868772C10B4920DC7E324F2C87; - remoteInfo = FirebaseCoreDiagnostics; - }; - 8942FC65F5D10C793A3EF698556652F5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8EC0F2618965C875A96BFDBEE5D9734C; - remoteInfo = FirebaseAuthInterop; - }; - A95D6AA02759E76DD3232368EC9FA7F1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5C0371EE948D0357B8EE0E34ABB44BF0; - remoteInfo = GoogleDataTransport; - }; - ADA3739072A1821D42EB71A7617E24FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F4F25FCAC51B51FD5F986EB939BF1F87; - remoteInfo = GoogleDataTransportCCTSupport; - }; - B085E5DE0E10CF6717C5962F9C615468 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D; - remoteInfo = GoogleUtilities; - }; - B60388A49AD55B2CAE0D5EE55C2F0BAA /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 9307B7A119490930CF70393AB529AAC1; - remoteInfo = "leveldb-library"; - }; - B8337BC1105FE08969FAB5579066DFEC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D; - remoteInfo = GoogleUtilities; - }; - B85683E36FDD2784B99A2DC92732182A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D2B5E7DCCBBFB32341D857D01211A1A3; - remoteInfo = nanopb; - }; - C61D3141DC2127BA7701380C913ECBAC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 9307B7A119490930CF70393AB529AAC1; - remoteInfo = "leveldb-library"; - }; - EE2C7655BA40D7BB4854DF3E8E05AB46 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D2B5E7DCCBBFB32341D857D01211A1A3; - remoteInfo = nanopb; - }; - FD085A011A569371BA35C6F802B3758F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4402AFF83DBDC4DD07E198685FDC2DF2; - remoteInfo = FirebaseCore; - }; - FE00ED7FF4D83C4A11CDB1C602DD4DB9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 072CEA044D2EF26F03496D5996BBF59F; - remoteInfo = Firebase; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 342034DA9FFE74C862EB3037761FED1A /* Copy . Private Headers */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "$(PRIVATE_HEADERS_FOLDER_PATH)/."; - dstSubfolderSpec = 16; - files = ( - 2A5280DC4E951A91563235956880C2C9 /* FBLPromisePrivate.h in Copy . Private Headers */, - ); - name = "Copy . Private Headers"; - runOnlyForDeploymentPostprocessing = 0; - }; - D22D6CC9B78A3B46B528EE4DF61DFADC /* Copy . Public Headers */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "$(PUBLIC_HEADERS_FOLDER_PATH)/."; - dstSubfolderSpec = 16; - files = ( - 3C314BBEE5CB4C12086B625B62473B77 /* FBLPromise+All.h in Copy . Public Headers */, - 401F125256DE8121A6B94E169FFBF98B /* FBLPromise+Always.h in Copy . Public Headers */, - 62990D2BB6C4C0DDD3CD1848667C6388 /* FBLPromise+Any.h in Copy . Public Headers */, - 8F09F46C97F3D1719E79448426D90B88 /* FBLPromise+Async.h in Copy . Public Headers */, - AA11D72BE245291456CCB9C76F81AF67 /* FBLPromise+Await.h in Copy . Public Headers */, - 79738317AEFE3E41A8478317CBAE9857 /* FBLPromise+Catch.h in Copy . Public Headers */, - 8B768C3E4BBABB6AB30C627C17A6D8CB /* FBLPromise+Delay.h in Copy . Public Headers */, - CA46156BB5C577F8BB7A3844B182E3BB /* FBLPromise+Do.h in Copy . Public Headers */, - 849FAADFAA2CDF0E00587B785C3A25B6 /* FBLPromise+Race.h in Copy . Public Headers */, - 714FC27A789BAFB9847D2AC476F65A51 /* FBLPromise+Recover.h in Copy . Public Headers */, - 2CE28A088EBEA9D0D1F0F97DF716A275 /* FBLPromise+Reduce.h in Copy . Public Headers */, - E6B16206329066116FE37EE1220DF3C2 /* FBLPromise+Retry.h in Copy . Public Headers */, - DB89733216DE2D40031AE2F5CABAB31F /* FBLPromise+Testing.h in Copy . Public Headers */, - 206954412978B5B20D9BDD19FA7D005A /* FBLPromise+Then.h in Copy . Public Headers */, - 1C0C2E325B5B0967FD788E20393E1651 /* FBLPromise+Timeout.h in Copy . Public Headers */, - 664B0232A289CCBBBCABF3F6C8177BDB /* FBLPromise+Validate.h in Copy . Public Headers */, - 93C4DC49847D79F57FE9081C860C838A /* FBLPromise+Wrap.h in Copy . Public Headers */, - 78F88029EAA27CCBFFE43A944B455A24 /* FBLPromise.h in Copy . Public Headers */, - 52F492F288C85C2A28527E4B6C9B4E07 /* FBLPromiseError.h in Copy . Public Headers */, - 97A79F93977B5D83B4B24AADC6E55F99 /* FBLPromises.h in Copy . Public Headers */, - ); - name = "Copy . Public Headers"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 0180C3C1B654EF6C601C67697BC4EC62 /* FSnapshotHolder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSnapshotHolder.h; path = Firebase/Database/Core/FSnapshotHolder.h; sourceTree = "<group>"; }; - 026599AE480DD91768D8F683E59FE6CC /* FViewProcessorResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FViewProcessorResult.h; path = Firebase/Database/FViewProcessorResult.h; sourceTree = "<group>"; }; - 02FF0A3B1C66CF58CBF6ED0DA70E2CF2 /* leveldb-library.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "leveldb-library.modulemap"; sourceTree = "<group>"; }; - 0496F85216D9C79A563C82C7CDB45620 /* FBLPromiseError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBLPromiseError.m; path = Sources/FBLPromises/FBLPromiseError.m; sourceTree = "<group>"; }; - 04F745AE9D062907C9D1CDD8FCCA4A43 /* nanopb.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = nanopb.modulemap; sourceTree = "<group>"; }; - 052D1A59D81CF3189CCE9443B2F2ADE7 /* FIRDatabaseReference_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseReference_Private.h; path = Firebase/Database/Api/Private/FIRDatabaseReference_Private.h; sourceTree = "<group>"; }; - 0541259BE7A9475648BF4DC718F6F409 /* FLeafNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLeafNode.h; path = Firebase/Database/Snapshot/FLeafNode.h; sourceTree = "<group>"; }; - 057F550138403A0C7FD68032C21A0E20 /* GDTCORUploadCoordinator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORUploadCoordinator.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORUploadCoordinator.m; sourceTree = "<group>"; }; - 061A348B4063578DACB2E0C334E75E2E /* FIRLoggerLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLoggerLevel.h; path = FirebaseCore/Sources/Public/FIRLoggerLevel.h; sourceTree = "<group>"; }; - 0639F28CB196245922C7D8D3836E0964 /* FIRCoreDiagnostics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCoreDiagnostics.m; path = Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m; sourceTree = "<group>"; }; - 066378BC5E55BCFB87BFFC5EDAFA4B99 /* FListenProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FListenProvider.m; path = Firebase/Database/Core/FListenProvider.m; sourceTree = "<group>"; }; - 06EC7B364270EE75563BEB149A98E2DC /* GULLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULLogger.m; path = GoogleUtilities/Logger/GULLogger.m; sourceTree = "<group>"; }; - 06FC5C9CF96D60C50FCD47D339C91951 /* nanopb.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = nanopb.framework; path = nanopb.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 072544F03E5AE2F64EF237E82D81D545 /* FBLPromise+Await.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Await.h"; path = "Sources/FBLPromises/include/FBLPromise+Await.h"; sourceTree = "<group>"; }; - 076B0F9655C1D328103BF4CFB4F0E0EC /* Pods-openTok-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-openTok-acknowledgements.markdown"; sourceTree = "<group>"; }; - 080B6ED2BE515044B2F811627F849632 /* GDTCCTNanopbHelpers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTNanopbHelpers.m; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTNanopbHelpers.m; sourceTree = "<group>"; }; - 083D3597C0190CB5D637CC9EE15579C8 /* env_windows_test_helper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = env_windows_test_helper.h; path = util/env_windows_test_helper.h; sourceTree = "<group>"; }; - 088E9D65F0C3C763F8B1466BDCCEAEED /* GDTCORTransformer_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransformer_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer_Private.h; sourceTree = "<group>"; }; - 08B4449BD6E520A4C1E8BE42FFE7BAA1 /* FTupleRemovedQueriesEvents.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleRemovedQueriesEvents.h; path = Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.h; sourceTree = "<group>"; }; - 09306EA07C5E6C3D3EB420111146C811 /* FIRMutableData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMutableData.m; path = Firebase/Database/Api/FIRMutableData.m; sourceTree = "<group>"; }; - 097A95430769429A66795E9E6AC6450A /* FNamedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FNamedNode.h; path = Firebase/Database/FNamedNode.h; sourceTree = "<group>"; }; - 0A186237A208BD1CF32D3CDD83B8CAF2 /* leveldb-library-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "leveldb-library-dummy.m"; sourceTree = "<group>"; }; - 0A9F46A999C47653013D3AD854352507 /* leveldb.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = leveldb.framework; path = "leveldb-library.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 0AC4A9BC66B8D2CD0D2CB7874781F3E5 /* GDTCCTUploader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTUploader.h; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTUploader.h; sourceTree = "<group>"; }; - 0B3E8D29A38AED64881329262599A505 /* GoogleDataTransportCCTSupport-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GoogleDataTransportCCTSupport-Info.plist"; sourceTree = "<group>"; }; - 0B4C64BD56CF6985E80B66695B59DF88 /* GULKeychainUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULKeychainUtils.m; path = GoogleUtilities/Environment/SecureStorage/GULKeychainUtils.m; sourceTree = "<group>"; }; - 0B51796ECD501253EDB5FCF8F42BCF07 /* FIRTransactionResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRTransactionResult.m; path = Firebase/Database/Api/FIRTransactionResult.m; sourceTree = "<group>"; }; - 0BAC11B5BD73140CC06EBFFB33C6E3E4 /* GDTCORTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransformer.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer.h; sourceTree = "<group>"; }; - 0BD62334D7DD704E7183CB5CD05D5FEF /* FAuthTokenProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FAuthTokenProvider.h; path = Firebase/Database/Login/FAuthTokenProvider.h; sourceTree = "<group>"; }; - 0C6CB77E47E775AC8AC2B8FE8C3C1874 /* nanopb-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "nanopb-prefix.pch"; sourceTree = "<group>"; }; - 0D46DA763E703DDDB7846A3B498EA469 /* Pods-openTok.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-openTok.debug.xcconfig"; sourceTree = "<group>"; }; - 0D5A4DB629B5B17E2F7AB448096A4572 /* FImmutableSortedSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FImmutableSortedSet.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.m; sourceTree = "<group>"; }; - 0E14920ECDB2908894AFBB2FDC931F02 /* GULSecureCoding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULSecureCoding.h; path = GoogleUtilities/Environment/Public/GULSecureCoding.h; sourceTree = "<group>"; }; - 0E5714B2DDE9933EA30C49F766B5E69A /* FBLPromise+Async.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Async.h"; path = "Sources/FBLPromises/include/FBLPromise+Async.h"; sourceTree = "<group>"; }; - 0E8161CED1C17230153CB59CBAA2ABA9 /* FBLPromise+Any.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Any.h"; path = "Sources/FBLPromises/include/FBLPromise+Any.h"; sourceTree = "<group>"; }; - 0EF03490A41396D7B4FB796D16239538 /* GDTCORLifecycle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORLifecycle.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORLifecycle.m; sourceTree = "<group>"; }; - 102352296297C117CC7869815C0B18C2 /* FEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEvent.h; path = Firebase/Database/Core/View/FEvent.h; sourceTree = "<group>"; }; - 1135C43506403E886D86BDFF9D1CC4A5 /* FAtomicNumber.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FAtomicNumber.m; path = Firebase/Database/Utilities/FAtomicNumber.m; sourceTree = "<group>"; }; - 11480D63F4E0BD36E1D198F5A9A73FB2 /* FSyncPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSyncPoint.h; path = Firebase/Database/Core/FSyncPoint.h; sourceTree = "<group>"; }; - 119F6DBEC2830D0007421DCE8BF46135 /* FirebaseCoreDiagnostics-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseCoreDiagnostics-dummy.m"; sourceTree = "<group>"; }; - 11BE64F7B2DF4B6B01EDEE2BB90359CE /* FTupleFirebase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleFirebase.h; path = Firebase/Database/Utilities/Tuples/FTupleFirebase.h; sourceTree = "<group>"; }; - 11E7D6789B496C8DAF72B8FF1F569778 /* FPersistenceManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPersistenceManager.m; path = Firebase/Database/Persistence/FPersistenceManager.m; sourceTree = "<group>"; }; - 1248B00EF3BE8EB5FDF7E92EE8995ABF /* options.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = options.cc; path = util/options.cc; sourceTree = "<group>"; }; - 12AD2385ABCEF551C7DB322A63BDA8B6 /* nanopb-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "nanopb-dummy.m"; sourceTree = "<group>"; }; - 12F7E2F7B784439C5476A1EF8BD49AF0 /* GDTCOREvent+NetworkConnectionInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "GDTCOREvent+NetworkConnectionInfo.m"; path = "GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCOREvent+NetworkConnectionInfo.m"; sourceTree = "<group>"; }; - 1313113294676D69BB1A6FB6FC2AC8D9 /* GDTCORTargets.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTargets.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORTargets.h; sourceTree = "<group>"; }; - 148C3A198D5DEC1D04F9AC25F9963A0F /* FirebaseDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseDatabase.h; path = Firebase/Database/Public/FirebaseDatabase.h; sourceTree = "<group>"; }; - 14B5225C335FF4E58484DB38F7D71113 /* FView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FView.h; path = Firebase/Database/Core/View/FView.h; sourceTree = "<group>"; }; - 151EDA5ED0508649DD81C32BBAB5B133 /* FIRDatabaseConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseConfig.h; path = Firebase/Database/Api/FIRDatabaseConfig.h; sourceTree = "<group>"; }; - 15DFFF5A3D3D914F480B877952EFAFBD /* skiplist.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = skiplist.h; path = db/skiplist.h; sourceTree = "<group>"; }; - 1648A0F596A5947A31091A8D2A3F2DD5 /* FConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FConstants.h; path = Firebase/Database/Constants/FConstants.h; sourceTree = "<group>"; }; - 17A5FB2BB510D58010F5154CE559C2C3 /* Pods_openTok.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_openTok.framework; path = "Pods-openTok.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 1823A9ACE2C8152C1B82264C89EE7A22 /* FListenComplete.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FListenComplete.m; path = Firebase/Database/FListenComplete.m; sourceTree = "<group>"; }; - 1891D121FC2FBC6537BC90D17D133401 /* FBLPromise+Await.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Await.m"; path = "Sources/FBLPromises/FBLPromise+Await.m"; sourceTree = "<group>"; }; - 18E5CB0D0571E1527E8DCD0C6A5690A7 /* FIndexedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIndexedNode.h; path = Firebase/Database/Snapshot/FIndexedNode.h; sourceTree = "<group>"; }; - 193284F73773846AA3A34879EC56EF86 /* FOperationSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FOperationSource.h; path = Firebase/Database/Core/Operation/FOperationSource.h; sourceTree = "<group>"; }; - 1942EA14A957EE8A1FD53150BCF5FC1E /* filename.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = filename.h; path = db/filename.h; sourceTree = "<group>"; }; - 196DCB453BE1CEE606A4656ED3F3DCBB /* GDTCCTPrioritizer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTPrioritizer.m; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTPrioritizer.m; sourceTree = "<group>"; }; - 19E1B93177BA8A0D2F8885B9BFF9D994 /* firebasecore.nanopb.c */ = {isa = PBXFileReference; includeInIndex = 1; name = firebasecore.nanopb.c; path = Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c; sourceTree = "<group>"; }; - 19E2FAFAF8471A64BF957711063D1E73 /* FSparseSnapshotTree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSparseSnapshotTree.h; path = Firebase/Database/Core/FSparseSnapshotTree.h; sourceTree = "<group>"; }; - 1A2422E97EFCFEA1741CB84A57211468 /* FNamedNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FNamedNode.m; path = Firebase/Database/FNamedNode.m; sourceTree = "<group>"; }; - 1A2A620A27AF95651BEB93E9CE562A04 /* FIRMutableData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMutableData.h; path = Firebase/Database/Public/FIRMutableData.h; sourceTree = "<group>"; }; - 1ADE589487EE027BD9C1EBD727FC2E9E /* FBLPromise+Validate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Validate.m"; path = "Sources/FBLPromises/FBLPromise+Validate.m"; sourceTree = "<group>"; }; - 1B004F3F21ACD69E835051891AC01C17 /* FIRAuthInterop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthInterop.h; path = Interop/Auth/Public/FIRAuthInterop.h; sourceTree = "<group>"; }; - 1B12871BB34F2EA4AC753A384DD80F71 /* FIRErrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRErrors.h; path = FirebaseCore/Sources/Private/FIRErrors.h; sourceTree = "<group>"; }; - 1B380EF7F940448A641CDF3A87516109 /* FWebSocketConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FWebSocketConnection.h; path = Firebase/Database/Realtime/FWebSocketConnection.h; sourceTree = "<group>"; }; - 1B54F40D4D8961A88689128664F1E34C /* GDTCORTransformer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORTransformer.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORTransformer.m; sourceTree = "<group>"; }; - 1BBD1F80252B16388D8A2E0DC2FC7D9E /* FEmptyNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEmptyNode.h; path = Firebase/Database/Snapshot/FEmptyNode.h; sourceTree = "<group>"; }; - 1D07B68D86353EF71AF26AD8633ED011 /* FIRComponentContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRComponentContainer.m; path = FirebaseCore/Sources/FIRComponentContainer.m; sourceTree = "<group>"; }; - 1E1C4E4A64421A0A894E0DDA64147BDD /* FSRWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSRWebSocket.h; path = Firebase/Database/third_party/SocketRocket/FSRWebSocket.h; sourceTree = "<group>"; }; - 1EAE4B9FB26CEEA47D06DB17655CBB32 /* FirebaseCoreDiagnostics.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseCoreDiagnostics.modulemap; sourceTree = "<group>"; }; - 1EF34E159FC9FB47A99C6BA51BBFA12D /* FRangedFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FRangedFilter.m; path = Firebase/Database/FRangedFilter.m; sourceTree = "<group>"; }; - 1F51C701E1D20698B669E1172FD5E4CB /* FIRDiagnosticsData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDiagnosticsData.m; path = FirebaseCore/Sources/FIRDiagnosticsData.m; sourceTree = "<group>"; }; - 1F616D4FBC71458933254CDA110C11CA /* GDTCOREvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCOREvent.m; path = GoogleDataTransport/GDTCORLibrary/GDTCOREvent.m; sourceTree = "<group>"; }; - 2085AB8AA9E4822704336873BF314E65 /* FWriteTreeRef.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FWriteTreeRef.m; path = Firebase/Database/Core/FWriteTreeRef.m; sourceTree = "<group>"; }; - 20A93D898B3FF479357C52053210F552 /* FLimitedFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLimitedFilter.m; path = Firebase/Database/Core/View/Filter/FLimitedFilter.m; sourceTree = "<group>"; }; - 218E7BC1C220924B1D6785CA4C25DC96 /* FSyncPoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSyncPoint.m; path = Firebase/Database/Core/FSyncPoint.m; sourceTree = "<group>"; }; - 21EDE18558B70D38E006596E26788D36 /* FEventEmitter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEventEmitter.h; path = Firebase/Database/Utilities/FEventEmitter.h; sourceTree = "<group>"; }; - 2392A33D7F9C9CB28B956D731DA8F557 /* FIRErrorCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRErrorCode.h; path = FirebaseCore/Sources/Private/FIRErrorCode.h; sourceTree = "<group>"; }; - 23C1A4E1F44845DC103D917C703A455A /* GoogleUtilities-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleUtilities-umbrella.h"; sourceTree = "<group>"; }; - 23DF0DDD2310CC408B1DBE663F9C3CAA /* GDTCORDataFuture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORDataFuture.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORDataFuture.m; sourceTree = "<group>"; }; - 24AD25CF950ACF35024D9FAC762DD3A3 /* FEventEmitter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FEventEmitter.m; path = Firebase/Database/Utilities/FEventEmitter.m; sourceTree = "<group>"; }; - 24C765C6EE99FAF5BDC49CFE9E15D8A5 /* Firebase.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Firebase.release.xcconfig; sourceTree = "<group>"; }; - 25581B666C44E4E2526DFBDCAF320168 /* FPriorityIndex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPriorityIndex.h; path = Firebase/Database/FPriorityIndex.h; sourceTree = "<group>"; }; - 25DCDEF8A7F32E0E3701AD90BC946FDD /* FQuerySpec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FQuerySpec.h; path = Firebase/Database/Core/FQuerySpec.h; sourceTree = "<group>"; }; - 25EBF5F50A964142282100BB3127D79D /* FIRConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRConfiguration.h; path = FirebaseCore/Sources/Public/FIRConfiguration.h; sourceTree = "<group>"; }; - 25F19CE11FB446E8B2C37D3F9C3B1BFC /* GoogleDataTransportCCTSupport.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleDataTransportCCTSupport.release.xcconfig; sourceTree = "<group>"; }; - 2601511FCCD0B4CE7A74652349B3779A /* db_iter.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = db_iter.cc; path = db/db_iter.cc; sourceTree = "<group>"; }; - 272A06E4DFA111E0A5504FF347BBF984 /* FBLPromise+Then.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Then.h"; path = "Sources/FBLPromises/include/FBLPromise+Then.h"; sourceTree = "<group>"; }; - 27B04C54C4F176938DD4A50E3DAD384D /* status.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = status.h; path = include/leveldb/status.h; sourceTree = "<group>"; }; - 27DA1AAEA65D58C03CF0B6628644FE95 /* Pods-openTok-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-openTok-frameworks.sh"; sourceTree = "<group>"; }; - 27F81C53060A8621A2223C2F50CD241B /* filter_block.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = filter_block.h; path = table/filter_block.h; sourceTree = "<group>"; }; - 2902A4C38873FCFF5786F23795F66406 /* port_stdcxx.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = port_stdcxx.h; path = port/port_stdcxx.h; sourceTree = "<group>"; }; - 29BD25E1380AF136F830D5ADC46CB53E /* FBLPromise+All.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+All.h"; path = "Sources/FBLPromises/include/FBLPromise+All.h"; sourceTree = "<group>"; }; - 2A0B383E88DBB23E8139375596467FAC /* log_writer.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = log_writer.cc; path = db/log_writer.cc; sourceTree = "<group>"; }; - 2AF11CCF6B730B0458E39354C36DB72A /* FCachePolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FCachePolicy.m; path = Firebase/Database/Persistence/FCachePolicy.m; sourceTree = "<group>"; }; - 2AF24CAB681011F26CE27B6CD0DA5E53 /* FWriteTreeRef.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FWriteTreeRef.h; path = Firebase/Database/Core/FWriteTreeRef.h; sourceTree = "<group>"; }; - 2B470A9772DB8914D65302D7E669FDAF /* filter_block.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = filter_block.cc; path = table/filter_block.cc; sourceTree = "<group>"; }; - 2C3685222F5D9D2662CE36EF1DF7D307 /* GDTCOREvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREvent.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCOREvent.h; sourceTree = "<group>"; }; - 2E86539022322DD1F5296F3214CEC49E /* log_writer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = log_writer.h; path = db/log_writer.h; sourceTree = "<group>"; }; - 2EB182B0C82CC8AEF45E12CE2FE0023A /* FQuerySpec.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FQuerySpec.m; path = Firebase/Database/Core/FQuerySpec.m; sourceTree = "<group>"; }; - 2F468A47D4B1484163852DBA4C01BDC2 /* FIRComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponent.h; path = FirebaseCore/Sources/Private/FIRComponent.h; sourceTree = "<group>"; }; - 2FB3B6224E0EA157E5E5C71782ADA330 /* version_set.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = version_set.cc; path = db/version_set.cc; sourceTree = "<group>"; }; - 2FD56C3309CCD46F670D5CC2DEA4B8F6 /* FCompoundHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCompoundHash.h; path = Firebase/Database/Core/FCompoundHash.h; sourceTree = "<group>"; }; - 2FE487E9D169B1987ED50BF7CA45AB85 /* table_cache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = table_cache.h; path = db/table_cache.h; sourceTree = "<group>"; }; - 301EA1964717D61EA78FF69CC56657C3 /* FLimitedFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLimitedFilter.h; path = Firebase/Database/Core/View/Filter/FLimitedFilter.h; sourceTree = "<group>"; }; - 301F5A9AE16774CF0D41657DAD925B78 /* FIRComponentContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentContainer.h; path = FirebaseCore/Sources/Private/FIRComponentContainer.h; sourceTree = "<group>"; }; - 30798651CA0BD508AD85DC790BB2D9B1 /* FWebSocketConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FWebSocketConnection.m; path = Firebase/Database/Realtime/FWebSocketConnection.m; sourceTree = "<group>"; }; - 3096846386F3836A75FB794288AA257E /* GDTCORConsoleLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORConsoleLogger.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m; sourceTree = "<group>"; }; - 30D3A7460028A9EA81EADFC2C2A322F8 /* FIRDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDatabase.m; path = Firebase/Database/Api/FIRDatabase.m; sourceTree = "<group>"; }; - 3144BEFF69AFAEDE619B25FE59B16969 /* GULLoggerLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULLoggerLevel.h; path = GoogleUtilities/Logger/Public/GULLoggerLevel.h; sourceTree = "<group>"; }; - 31965476AB0C9A0CA09E0AC2D405690B /* write_batch.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = write_batch.cc; path = db/write_batch.cc; sourceTree = "<group>"; }; - 31E464D7B81E4278F8FB81146755F379 /* pb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb.h; sourceTree = "<group>"; }; - 3275B1466A10C59A57FA855C3AC6DECD /* GoogleDataTransport-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleDataTransport-dummy.m"; sourceTree = "<group>"; }; - 3294C1F7B7748B520AFE0A6E3E5FDE30 /* FTupleUserCallback.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleUserCallback.m; path = Firebase/Database/Utilities/Tuples/FTupleUserCallback.m; sourceTree = "<group>"; }; - 32B7228504715C2E4B9E3D0DD3622543 /* FServerValues.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FServerValues.m; path = Firebase/Database/Core/FServerValues.m; sourceTree = "<group>"; }; - 3347A1AB6546F0A3977529B8F199DC41 /* FBLPromises.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FBLPromises.framework; path = PromisesObjC.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 338E9E4797BEAD2FFF893017AB97CC8B /* format.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = format.cc; path = table/format.cc; sourceTree = "<group>"; }; - 33D40A09F8C5975F8B550A0483033801 /* FBLPromiseError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBLPromiseError.h; path = Sources/FBLPromises/include/FBLPromiseError.h; sourceTree = "<group>"; }; - 33ECE23F2ECD946250E06C49AD38D464 /* PromisesObjC.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PromisesObjC.debug.xcconfig; sourceTree = "<group>"; }; - 3455A08B816E9633E67F45031FC9F6CD /* merger.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = merger.cc; path = table/merger.cc; sourceTree = "<group>"; }; - 34621C372310B419B41B61763C42149F /* table_builder.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = table_builder.cc; path = table/table_builder.cc; sourceTree = "<group>"; }; - 357108ED8E1BE0FAC53EFE9A522C6D0C /* FTupleStringNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleStringNode.h; path = Firebase/Database/Utilities/Tuples/FTupleStringNode.h; sourceTree = "<group>"; }; - 35CE8D2A98B792BEEDD0D72E89B33BAD /* table.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = table.h; path = include/leveldb/table.h; sourceTree = "<group>"; }; - 35EAD172ED92244F64C80D04A17BDE79 /* FSnapshotHolder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSnapshotHolder.m; path = Firebase/Database/Core/FSnapshotHolder.m; sourceTree = "<group>"; }; - 361D5CC60A972E92E4E30CAE036573B2 /* FImmutableSortedSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FImmutableSortedSet.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedSet.h; sourceTree = "<group>"; }; - 3639E6825CB07BF545A128E69034513C /* FIRCoreDiagnosticsInterop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsInterop.h; path = Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h; sourceTree = "<group>"; }; - 36E86F31E1010E4369DFD5A8B2C46D99 /* FDataEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FDataEvent.m; path = Firebase/Database/Core/View/FDataEvent.m; sourceTree = "<group>"; }; - 36FBDDD8326F0B0C781905C5CF742D68 /* NSData+SRB64Additions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+SRB64Additions.m"; path = "Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.m"; sourceTree = "<group>"; }; - 371751A703B71351DE13FF939FF962D6 /* FIRAppAssociationRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppAssociationRegistration.h; path = FirebaseCore/Sources/Private/FIRAppAssociationRegistration.h; sourceTree = "<group>"; }; - 3787BE6B13B4E6006135EB46DB54DC42 /* arena.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = arena.cc; path = util/arena.cc; sourceTree = "<group>"; }; - 378857989CF09BD719CBDF32E1B87FBA /* FTrackedQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTrackedQuery.h; path = Firebase/Database/Persistence/FTrackedQuery.h; sourceTree = "<group>"; }; - 37991EF098780E2D9FBD3B42EA8175D3 /* pb_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_common.h; sourceTree = "<group>"; }; - 37C3A94692642015055302CE6D458CCE /* FirebaseDatabase-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FirebaseDatabase-Info.plist"; sourceTree = "<group>"; }; - 37E34EE4B371BB8626B0ECA106A5B8E0 /* FTupleTransaction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleTransaction.h; path = Firebase/Database/Utilities/Tuples/FTupleTransaction.h; sourceTree = "<group>"; }; - 37FBC87BF2448D86A7BDADF009B9803B /* FLevelDBStorageEngine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLevelDBStorageEngine.m; path = Firebase/Database/Persistence/FLevelDBStorageEngine.m; sourceTree = "<group>"; }; - 385FA78D355DA5FF4ED09DE6A1AB8057 /* FWriteTree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FWriteTree.h; path = Firebase/Database/Core/FWriteTree.h; sourceTree = "<group>"; }; - 38795B0F87C340F69CFEDED0CCBFAC37 /* FIRAppAssociationRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAppAssociationRegistration.m; path = FirebaseCore/Sources/FIRAppAssociationRegistration.m; sourceTree = "<group>"; }; - 38A43235156A1459847105BB4F2B300D /* FTupleObjects.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleObjects.h; path = Firebase/Database/Utilities/Tuples/FTupleObjects.h; sourceTree = "<group>"; }; - 393AE47449FD921FAD26AC79342F7367 /* GDTCOREvent+NetworkConnectionInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GDTCOREvent+NetworkConnectionInfo.h"; path = "GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCOREvent+NetworkConnectionInfo.h"; sourceTree = "<group>"; }; - 394D1BEAD6AA9B9EFDBAA0EAAB06D478 /* PromisesObjC-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PromisesObjC-umbrella.h"; sourceTree = "<group>"; }; - 39587D5ABC154C593C4C834BD6058580 /* FEventRaiser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEventRaiser.h; path = Firebase/Database/Core/View/FEventRaiser.h; sourceTree = "<group>"; }; - 39A3D499C991661974D88771D65ED755 /* FConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FConnection.m; path = Firebase/Database/Realtime/FConnection.m; sourceTree = "<group>"; }; - 39B71F3A4C20F71B0FA8620190D0629E /* FIRDatabase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabase_Private.h; path = Firebase/Database/Api/Private/FIRDatabase_Private.h; sourceTree = "<group>"; }; - 39E847F87FE098403E173AF071476BF0 /* FIRTransactionResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRTransactionResult.h; path = Firebase/Database/Public/FIRTransactionResult.h; sourceTree = "<group>"; }; - 3A78563412DD19D641BB6F1F170DA015 /* FirebaseCore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCore.release.xcconfig; sourceTree = "<group>"; }; - 3AC6719935B3430DE4E11C520944D8BF /* FIRDataSnapshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDataSnapshot.h; path = Firebase/Database/Public/FIRDataSnapshot.h; sourceTree = "<group>"; }; - 3B2312F44AC0B0A5F30BD2D7E4AD31E1 /* FViewProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FViewProcessor.h; path = Firebase/Database/FViewProcessor.h; sourceTree = "<group>"; }; - 3B32762245BBA7D25AC72093BF9D75E6 /* GDTCORReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORReachability.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORReachability.m; sourceTree = "<group>"; }; - 3B87707E352D3B5520BAD0A84C358DC8 /* Pods-openTok-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-openTok-umbrella.h"; sourceTree = "<group>"; }; - 3BAE9DB2B881172814343BCA44C7BC98 /* FCancelEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCancelEvent.h; path = Firebase/Database/Core/View/FCancelEvent.h; sourceTree = "<group>"; }; - 3BDC69FEF92061A1018272C226777880 /* FViewProcessorResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FViewProcessorResult.m; path = Firebase/Database/FViewProcessorResult.m; sourceTree = "<group>"; }; - 3C101CA28A87922BFF183FCB605139A6 /* write_batch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = write_batch.h; path = include/leveldb/write_batch.h; sourceTree = "<group>"; }; - 3C38FD08C4002E8A3E088547DD0523ED /* iterator.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = iterator.cc; path = table/iterator.cc; sourceTree = "<group>"; }; - 3C86C564F525877739284E8120ACBE75 /* FChildrenNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FChildrenNode.h; path = Firebase/Database/Snapshot/FChildrenNode.h; sourceTree = "<group>"; }; - 3CC76FAD8FA0F6D23526A68F7A0EDE8E /* FTupleTSN.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleTSN.h; path = Firebase/Database/Utilities/Tuples/FTupleTSN.h; sourceTree = "<group>"; }; - 3D339BC8AB099B5E05C88DAA77FBD0DF /* windows_logger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = windows_logger.h; path = util/windows_logger.h; sourceTree = "<group>"; }; - 3D7B530E73F5DDD639F32EA9C53A45C2 /* FBLPromise+Always.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Always.m"; path = "Sources/FBLPromises/FBLPromise+Always.m"; sourceTree = "<group>"; }; - 3DE1D8D85EC90A32E28154D880378587 /* pb_decode.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pb_decode.c; sourceTree = "<group>"; }; - 3E328AFED73206DE3C41B2F236188BAA /* GDTCCTPrioritizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTPrioritizer.h; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTPrioritizer.h; sourceTree = "<group>"; }; - 3E54B1318AB1AA3CC7468878C8B0C39E /* GoogleDataTransportCCTSupport.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleDataTransportCCTSupport.debug.xcconfig; sourceTree = "<group>"; }; - 3E711BF9F9249CDACE333119FED50E76 /* FRangeMerge.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FRangeMerge.m; path = Firebase/Database/Core/FRangeMerge.m; sourceTree = "<group>"; }; - 3E7DD82D268001C64258EB45BA0470F2 /* GDTCCTCompressionHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTCompressionHelper.m; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTCompressionHelper.m; sourceTree = "<group>"; }; - 3E80C7D2190CFBE7BF524863C6D694D7 /* GoogleUtilities-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GoogleUtilities-Info.plist"; sourceTree = "<group>"; }; - 3EA2D82B72EC58BCC44AD8106CB4E716 /* FClock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FClock.h; path = Firebase/Database/FClock.h; sourceTree = "<group>"; }; - 3F2E840DE3E5096DD4B221B61ABE94B4 /* FIRLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRLogger.m; path = FirebaseCore/Sources/FIRLogger.m; sourceTree = "<group>"; }; - 3F3A37BF930274FDB2AF3C64E5BA6C63 /* two_level_iterator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = two_level_iterator.h; path = table/two_level_iterator.h; sourceTree = "<group>"; }; - 3F8222E00AF134E0711FE08042A039C2 /* FIRAnalyticsConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAnalyticsConfiguration.m; path = FirebaseCore/Sources/FIRAnalyticsConfiguration.m; sourceTree = "<group>"; }; - 3F89EABDE73772529AA4D1632A76AB10 /* GDTCORPlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORPlatform.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORPlatform.h; sourceTree = "<group>"; }; - 3FDA53CDBFCA82B7F7184B44BC7FBC7C /* filter_policy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = filter_policy.h; path = include/leveldb/filter_policy.h; sourceTree = "<group>"; }; - 3FE1ACAC1C23FF4E29B8821ADC8ED85F /* FIRRetryHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRRetryHelper.h; path = Firebase/Database/Core/Utilities/FIRRetryHelper.h; sourceTree = "<group>"; }; - 40FE1C2937524054AB15B3A3F4272345 /* log_reader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = log_reader.h; path = db/log_reader.h; sourceTree = "<group>"; }; - 41FD95F75B109D21E5C0FF3B47B92CEA /* FirebaseAuthInterop.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseAuthInterop.release.xcconfig; sourceTree = "<group>"; }; - 428B977BF39D31F8F69EF02D8F825E96 /* GDTCORUploadPackage_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORUploadPackage_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadPackage_Private.h; sourceTree = "<group>"; }; - 4321B4C224765D94C7503E3C6431F9B9 /* log_format.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = log_format.h; path = db/log_format.h; sourceTree = "<group>"; }; - 43744D2FF04A8F6E07656E852E3190B2 /* FPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPath.m; path = Firebase/Database/Core/Utilities/FPath.m; sourceTree = "<group>"; }; - 43C180B98E9AA37DFE45416D2E782F89 /* FQueryParams.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FQueryParams.m; path = Firebase/Database/Core/FQueryParams.m; sourceTree = "<group>"; }; - 4421DDED849BD83DC71031CD3143C0DD /* FBLPromise+Race.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Race.m"; path = "Sources/FBLPromises/FBLPromise+Race.m"; sourceTree = "<group>"; }; - 446761389CFA822783FA41B1CAB429AA /* GULKeychainStorage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULKeychainStorage.m; path = GoogleUtilities/Environment/SecureStorage/GULKeychainStorage.m; sourceTree = "<group>"; }; - 44BF5A2F11832E18FAA9160A4734E51B /* FAuthTokenProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FAuthTokenProvider.m; path = Firebase/Database/Login/FAuthTokenProvider.m; sourceTree = "<group>"; }; - 4517272EC7E584B42E4C304B2779D6B2 /* PromisesObjC.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PromisesObjC.release.xcconfig; sourceTree = "<group>"; }; - 45586F5816585DB8B45FE1C976525A1C /* FPruneForest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPruneForest.h; path = Firebase/Database/Persistence/FPruneForest.h; sourceTree = "<group>"; }; - 45EAA633A2105904DF70B93DB59F865A /* FSRWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSRWebSocket.m; path = Firebase/Database/third_party/SocketRocket/FSRWebSocket.m; sourceTree = "<group>"; }; - 460A5884CBCEBDCCDD70D08A0D2EE516 /* FPendingPut.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPendingPut.h; path = Firebase/Database/Persistence/FPendingPut.h; sourceTree = "<group>"; }; - 46440B55B39BD26A9DF8DBAD2638BB2F /* iterator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = iterator.h; path = include/leveldb/iterator.h; sourceTree = "<group>"; }; - 4781B46372655A8914D2F3F4F92B66A8 /* port_example.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = port_example.h; path = port/port_example.h; sourceTree = "<group>"; }; - 47CD1AEAB4C797A6A730DB00DE47D9CB /* PromisesObjC-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PromisesObjC-dummy.m"; sourceTree = "<group>"; }; - 4860AAD628A98E1A707FF827FF3AF9E9 /* FBLPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBLPromise.m; path = Sources/FBLPromises/FBLPromise.m; sourceTree = "<group>"; }; - 4A10A4C81C220281B540EA7061D36321 /* GoogleDataTransportCCTSupport-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleDataTransportCCTSupport-umbrella.h"; sourceTree = "<group>"; }; - 4AFF92094D4BC33FA831C1108F731A13 /* FIRCoreDiagnosticsConnector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsConnector.h; path = FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h; sourceTree = "<group>"; }; - 4B04B5BCD905ACB2C2079AFD75AB6597 /* GDTCORUploader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORUploader.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploader.h; sourceTree = "<group>"; }; - 4BD6ADA3108223D06CC45B5E4D709C49 /* FLLRBEmptyNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLLRBEmptyNode.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.h; sourceTree = "<group>"; }; - 4C73EAF4D8A7A12724B8D66F3FB39624 /* FIRApp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRApp.h; path = FirebaseCore/Sources/Public/FIRApp.h; sourceTree = "<group>"; }; - 4CB725B760590589CCA74355CA795432 /* FCachePolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCachePolicy.h; path = Firebase/Database/Persistence/FCachePolicy.h; sourceTree = "<group>"; }; - 4D1AF60094F489C5CAB30597E9300702 /* GULSecureCoding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULSecureCoding.m; path = GoogleUtilities/Environment/GULSecureCoding.m; sourceTree = "<group>"; }; - 4D6D098D6D2D89BD890B660DDC02B2C5 /* FTupleStringNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleStringNode.m; path = Firebase/Database/Utilities/Tuples/FTupleStringNode.m; sourceTree = "<group>"; }; - 4D75E00B047D89EA15BE5CDEE752D7A0 /* block.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = block.cc; path = table/block.cc; sourceTree = "<group>"; }; - 4D8F88C55CA62E3CEF68D39A29F74646 /* FIRCoreDiagnosticsData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsData.h; path = Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h; sourceTree = "<group>"; }; - 4E65C99CB1E05FEDE149BE32F292733C /* FIRHeartbeatInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRHeartbeatInfo.h; path = FirebaseCore/Sources/Private/FIRHeartbeatInfo.h; sourceTree = "<group>"; }; - 4E856DB50BD68A84A63AE55499872178 /* block_builder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = block_builder.h; path = table/block_builder.h; sourceTree = "<group>"; }; - 5004A374237FC691736F521969A16337 /* FIRLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLogger.h; path = FirebaseCore/Sources/Private/FIRLogger.h; sourceTree = "<group>"; }; - 50625C3A47D2BE9C9BD6151D17714D80 /* FBLPromise+Wrap.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Wrap.m"; path = "Sources/FBLPromises/FBLPromise+Wrap.m"; sourceTree = "<group>"; }; - 50F19DE27755B2D81E7D4874D093FB38 /* FIRDatabaseQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseQuery.h; path = Firebase/Database/Public/FIRDatabaseQuery.h; sourceTree = "<group>"; }; - 5151B4B90DF95DFF56C5C5AC51E5B2F1 /* GoogleDataTransportCCTSupport.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleDataTransportCCTSupport.modulemap; sourceTree = "<group>"; }; - 51671C73F008B5C0C3751B3855999213 /* FirebaseDatabase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseDatabase.framework; path = FirebaseDatabase.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 51E90B1F65C14253EDC9375768CCD83C /* nanopb-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "nanopb-Info.plist"; sourceTree = "<group>"; }; - 52176DC15D315EAA2CE7CAE7871EF263 /* FCancelEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FCancelEvent.m; path = Firebase/Database/Core/View/FCancelEvent.m; sourceTree = "<group>"; }; - 52183C4DFF461846157BB45716C61701 /* FOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FOperation.h; path = Firebase/Database/Core/Operation/FOperation.h; sourceTree = "<group>"; }; - 541C1635CF2ACAB31B12B3FD9367089D /* pb_encode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_encode.h; sourceTree = "<group>"; }; - 543616AED705E736331D7BF0C4810E1F /* FChildChangeAccumulator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FChildChangeAccumulator.m; path = Firebase/Database/Core/View/Filter/FChildChangeAccumulator.m; sourceTree = "<group>"; }; - 54EDB5C773BAC4698020342F0696F390 /* FIRDatabaseComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDatabaseComponent.m; path = Firebase/Database/Api/FIRDatabaseComponent.m; sourceTree = "<group>"; }; - 569511E399F07ABE1A4CBB713DF08B7B /* db_impl.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = db_impl.cc; path = db/db_impl.cc; sourceTree = "<group>"; }; - 56E0BD3190452F623D2588E2959B1C38 /* FStringUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FStringUtilities.m; path = Firebase/Database/Utilities/FStringUtilities.m; sourceTree = "<group>"; }; - 575EF3111261A829259FBDB6C19F8205 /* APLevelDB.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = APLevelDB.mm; path = "Firebase/Database/third_party/Wrap-leveldb/APLevelDB.mm"; sourceTree = "<group>"; }; - 578B57E50EDBE961E26365AC7EB47A31 /* GoogleUtilities-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleUtilities-prefix.pch"; sourceTree = "<group>"; }; - 57D93D85D4F115B046E9F4E297055F80 /* FLLRBNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLLRBNode.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBNode.h; sourceTree = "<group>"; }; - 57FEBC63E8E55E8C1B6847CAEDE77959 /* GDTCORTransport_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransport_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransport_Private.h; sourceTree = "<group>"; }; - 58308FFBBA52F24C69542503039DE365 /* status.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = status.cc; path = util/status.cc; sourceTree = "<group>"; }; - 58570F7234627794C4BF02928884354A /* GDTCCTUploader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTUploader.m; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTUploader.m; sourceTree = "<group>"; }; - 587ECC487233834DCC0BDFB400FD82FE /* FirebaseDatabase.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseDatabase.release.xcconfig; sourceTree = "<group>"; }; - 593FEB0A405089A855F6A178DC382FFF /* FTreeSortedDictionaryEnumerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTreeSortedDictionaryEnumerator.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.m; sourceTree = "<group>"; }; - 59CB9FB4C1679210BE96723BFE245F15 /* FirebaseCoreDiagnostics.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCoreDiagnostics.release.xcconfig; sourceTree = "<group>"; }; - 59E7355A640C2063FA68A1828CEF33A8 /* dbformat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = dbformat.h; path = db/dbformat.h; sourceTree = "<group>"; }; - 59F59F63C4615D2ABBA8D3688DE5C1A2 /* FStorageEngine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FStorageEngine.h; path = Firebase/Database/Persistence/FStorageEngine.h; sourceTree = "<group>"; }; - 5AF6CFF33C19AC6817222406C326E673 /* FTupleCallbackStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleCallbackStatus.h; path = Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.h; sourceTree = "<group>"; }; - 5AF9DE0337F8113B726962277B249DA5 /* GDTCORFlatFileStorage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORFlatFileStorage.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORFlatFileStorage.m; sourceTree = "<group>"; }; - 5B65DAC962609F2CA5CAF579C31133A7 /* FAckUserWrite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FAckUserWrite.h; path = Firebase/Database/Core/Operation/FAckUserWrite.h; sourceTree = "<group>"; }; - 5B797E52A5E7D33056211AE0FE28030B /* filename.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = filename.cc; path = db/filename.cc; sourceTree = "<group>"; }; - 5C1A3ED649EAA4D369C665A9C4887D7D /* Pods-openTok.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-openTok.modulemap"; sourceTree = "<group>"; }; - 5CE08AC03F18A07FFDE865B02C63441E /* nanopb.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = nanopb.debug.xcconfig; sourceTree = "<group>"; }; - 5D57A1F107BF9AB8D7F78C220FD7D3FE /* FImmutableTree.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FImmutableTree.m; path = Firebase/Database/Core/Utilities/FImmutableTree.m; sourceTree = "<group>"; }; - 5D7BD1D203706AD133B003DE154D40AC /* c.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = c.cc; path = db/c.cc; sourceTree = "<group>"; }; - 5E7D64340689B27CEC98862A2A1558BA /* FView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FView.m; path = Firebase/Database/Core/View/FView.m; sourceTree = "<group>"; }; - 5EFC7D206D5469364E21D58DD4E6C7A8 /* FTupleNodePath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleNodePath.h; path = Firebase/Database/Utilities/Tuples/FTupleNodePath.h; sourceTree = "<group>"; }; - 5F0C162A1408DFD87160990CD1C5B5FE /* FBLPromise+Validate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Validate.h"; path = "Sources/FBLPromises/include/FBLPromise+Validate.h"; sourceTree = "<group>"; }; - 5F3DC736CC472D8C083FEE2D95582EF6 /* FirebaseCore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCore.debug.xcconfig; sourceTree = "<group>"; }; - 5F69F234C57436B1A1499CE33ED96AAA /* FTuplePathValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTuplePathValue.m; path = Firebase/Database/Utilities/Tuples/FTuplePathValue.m; sourceTree = "<group>"; }; - 5FD0137BAD2B0EED669DF6AC601CAB94 /* Pods-openTok.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-openTok.release.xcconfig"; sourceTree = "<group>"; }; - 60129F2C1744E4C6A0B45D363AEEF0FD /* FBLPromises.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBLPromises.h; path = Sources/FBLPromises/include/FBLPromises.h; sourceTree = "<group>"; }; - 6041B5E87AC260ED5B0E6C0B42DDA814 /* FTupleTSN.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleTSN.m; path = Firebase/Database/Utilities/Tuples/FTupleTSN.m; sourceTree = "<group>"; }; - 60FDC5A59E02334D7C8B34614969FCAA /* table_cache.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = table_cache.cc; path = db/table_cache.cc; sourceTree = "<group>"; }; - 612393A8C0D0B02C9ADA7AB38EC11ED1 /* cct.nanopb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = cct.nanopb.h; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h; sourceTree = "<group>"; }; - 61CCE79B8780E931635E80307FA09EE6 /* FLevelDBStorageEngine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLevelDBStorageEngine.h; path = Firebase/Database/Persistence/FLevelDBStorageEngine.h; sourceTree = "<group>"; }; - 62020A4F2BCB9E86DA99881A00474E3F /* FBLPromises.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBLPromises.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 621D483E45E92BE126C17E8261A0E6FA /* db.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = db.h; path = include/leveldb/db.h; sourceTree = "<group>"; }; - 6266F0F67AE31067A90DDC828E91BFB1 /* FTupleOnDisconnect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleOnDisconnect.h; path = Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.h; sourceTree = "<group>"; }; - 632A2A314E4EBB58C7333F3B1B5FA731 /* FWriteTree.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FWriteTree.m; path = Firebase/Database/Core/FWriteTree.m; sourceTree = "<group>"; }; - 635E69A93F16B99D33B27A6452B14DC5 /* logging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = logging.h; path = util/logging.h; sourceTree = "<group>"; }; - 64705E8D19B8D928285A3720DB0206AE /* GDTCORUploadPackage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORUploadPackage.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORUploadPackage.m; sourceTree = "<group>"; }; - 6581D2C778C2FD723629A78872C61FDC /* dumpfile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = dumpfile.h; path = include/leveldb/dumpfile.h; sourceTree = "<group>"; }; - 65A2EA4B48BA25E5F852CFA3518CEAC9 /* FCompoundWrite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCompoundWrite.h; path = Firebase/Database/Snapshot/FCompoundWrite.h; sourceTree = "<group>"; }; - 666F60F1D8D46D275395769502141CD1 /* FirebaseCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseCore.h; path = FirebaseCore/Sources/Public/FirebaseCore.h; sourceTree = "<group>"; }; - 66E4FD9B631E9F35722D53A6EC999ACE /* Pods-openTok-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-openTok-dummy.m"; sourceTree = "<group>"; }; - 673B1B561ACB418F330B4478AE33C9F3 /* builder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = builder.h; path = db/builder.h; sourceTree = "<group>"; }; - 674391F19F12A6728205D726D39B24BC /* GDTCORTransport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransport.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORTransport.h; sourceTree = "<group>"; }; - 674C8CF50302A87EC7519C90AF0C6F61 /* posix_logger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = posix_logger.h; path = util/posix_logger.h; sourceTree = "<group>"; }; - 67AA07E8EC09CCB7FE04406017A4C519 /* FBLPromise+Do.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Do.m"; path = "Sources/FBLPromises/FBLPromise+Do.m"; sourceTree = "<group>"; }; - 6836B2C094BEE9CCC043393E936B87BE /* FViewProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FViewProcessor.m; path = Firebase/Database/FViewProcessor.m; sourceTree = "<group>"; }; - 68949119150AE37E2185C8D318D06060 /* FOverwrite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FOverwrite.h; path = Firebase/Database/Core/Operation/FOverwrite.h; sourceTree = "<group>"; }; - 68B02E7BEB2979723066B27907E0A636 /* FChange.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FChange.h; path = Firebase/Database/Core/View/FChange.h; sourceTree = "<group>"; }; - 6942351307BC1F54575D9853307EAE0E /* GoogleDataTransportCCTSupport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GoogleDataTransportCCTSupport.framework; path = GoogleDataTransportCCTSupport.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 695B08F258794D8BA0F5ADA821C842AA /* GDTCORClock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORClock.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORClock.h; sourceTree = "<group>"; }; - 6A37D0DC62ADF6DFECBB8C229F50AF93 /* GDTCORDataFuture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORDataFuture.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORDataFuture.h; sourceTree = "<group>"; }; - 6A9D85795C3AB0FC818197A64F6ADC1F /* GDTCORPrioritizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORPrioritizer.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORPrioritizer.h; sourceTree = "<group>"; }; - 6AFC8703934BB1696C9104DD93F8811C /* FirebaseAuthInterop.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseAuthInterop.debug.xcconfig; sourceTree = "<group>"; }; - 6B4F0813AD0FE6A019D69BEE02FE48B2 /* FIRDatabaseComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseComponent.h; path = Firebase/Database/Api/FIRDatabaseComponent.h; sourceTree = "<group>"; }; - 6BD31C9DAA421C4A8E24D11F5161689F /* FIRVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVersion.h; path = FirebaseCore/Sources/FIRVersion.h; sourceTree = "<group>"; }; - 6C25234BF51BE9602848231B7842472C /* FIRNoopAuthTokenProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRNoopAuthTokenProvider.m; path = Firebase/Database/Login/FIRNoopAuthTokenProvider.m; sourceTree = "<group>"; }; - 6C35F58B895845211A8017AAC391E1B7 /* FEventRaiser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FEventRaiser.m; path = Firebase/Database/Core/View/FEventRaiser.m; sourceTree = "<group>"; }; - 6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 6CC2D13BD17F41391BB88C73E58BDA77 /* FIRDatabaseQuery_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseQuery_Private.h; path = Firebase/Database/Api/Private/FIRDatabaseQuery_Private.h; sourceTree = "<group>"; }; - 6D9B952974F6B3F89F6399C831D99CC2 /* FirebaseDatabase.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseDatabase.debug.xcconfig; sourceTree = "<group>"; }; - 6EB5D83F05D2269F33466C7DCFCD26A0 /* block_builder.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = block_builder.cc; path = table/block_builder.cc; sourceTree = "<group>"; }; - 6EBB17129E01D8CF54893F948D47D963 /* FIndexedFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIndexedFilter.h; path = Firebase/Database/Core/View/Filter/FIndexedFilter.h; sourceTree = "<group>"; }; - 6F2ED88980ADD02F9CD95D5F802803F1 /* FIRNoopAuthTokenProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRNoopAuthTokenProvider.h; path = Firebase/Database/Login/FIRNoopAuthTokenProvider.h; sourceTree = "<group>"; }; - 6FBAE93D87DDDF2F1354A512B9055879 /* FIRDatabaseReference.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseReference.h; path = Firebase/Database/Public/FIRDatabaseReference.h; sourceTree = "<group>"; }; - 70515A5CBED5171BEE1A7FD8B06C8338 /* GoogleDataTransport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GoogleDataTransport.h; path = GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport.h; sourceTree = "<group>"; }; - 7054A55E885CFA0B88E9B303F1CA6A8D /* FImmutableSortedDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FImmutableSortedDictionary.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.h; sourceTree = "<group>"; }; - 70C80FE5FEC8E37CDC7A3FECCC392C9C /* nanopb.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = nanopb.release.xcconfig; sourceTree = "<group>"; }; - 70E9D5DB507166468AF0FA89B51E2176 /* FLLRBValueNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLLRBValueNode.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.m; sourceTree = "<group>"; }; - 7114FD0EFDDFA8EFD0B729F54CA0E299 /* FTreeSortedDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTreeSortedDictionary.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.h; sourceTree = "<group>"; }; - 7193CDB6EF41B0AEB292E144AC86B962 /* firebasecore.nanopb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = firebasecore.nanopb.h; path = Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h; sourceTree = "<group>"; }; - 71D624A72A3D5A4BBC3E8E85FF70070C /* FIRAppInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppInternal.h; path = FirebaseCore/Sources/Private/FIRAppInternal.h; sourceTree = "<group>"; }; - 72EB4F6047A67ABF94B6F8BA86D2D234 /* format.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = format.h; path = table/format.h; sourceTree = "<group>"; }; - 744466560FAD76B6239D54402C0C52DC /* FBLPromise+Retry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Retry.m"; path = "Sources/FBLPromises/FBLPromise+Retry.m"; sourceTree = "<group>"; }; - 76009627450555684FFB602D5CDB66C8 /* FAtomicNumber.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FAtomicNumber.h; path = Firebase/Database/Utilities/FAtomicNumber.h; sourceTree = "<group>"; }; - 7608FC4EC17E98020B24155456A3AA39 /* FWriteRecord.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FWriteRecord.h; path = Firebase/Database/Core/FWriteRecord.h; sourceTree = "<group>"; }; - 7610135E50DA4D208AF3E88330FCBDC1 /* FBLPromise+Recover.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Recover.h"; path = "Sources/FBLPromises/include/FBLPromise+Recover.h"; sourceTree = "<group>"; }; - 76A86C67D20E7FD637F775A4E9F95B51 /* memtable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = memtable.h; path = db/memtable.h; sourceTree = "<group>"; }; - 77B8D860A5693BAB27B03B2D8262FBBB /* FIRHeartbeatInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRHeartbeatInfo.m; path = FirebaseCore/Sources/FIRHeartbeatInfo.m; sourceTree = "<group>"; }; - 77C1062B06298DDB3CE7B3ADE0C5DE14 /* FBLPromise+Async.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Async.m"; path = "Sources/FBLPromises/FBLPromise+Async.m"; sourceTree = "<group>"; }; - 77C24E7828CDD9A00B0A92ECEB5CFDB0 /* FArraySortedDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FArraySortedDictionary.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.h; sourceTree = "<group>"; }; - 784C73A1380FA3D7D7A731214DE53A13 /* export.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = export.h; path = include/leveldb/export.h; sourceTree = "<group>"; }; - 78AE048F46E327022930DDCA71CF3271 /* GDTCORClock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORClock.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORClock.m; sourceTree = "<group>"; }; - 78BAF0D547E00F0767C0DD113ADF19C0 /* GULKeychainStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULKeychainStorage.h; path = GoogleUtilities/Environment/Public/GULKeychainStorage.h; sourceTree = "<group>"; }; - 78CE4FC4674E17E99E511BCA4E3D89E0 /* FTupleObjectNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleObjectNode.m; path = Firebase/Database/Utilities/Tuples/FTupleObjectNode.m; sourceTree = "<group>"; }; - 7910CA09A4822C96B09D982D5AA1AAFD /* PromisesObjC-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "PromisesObjC-Info.plist"; sourceTree = "<group>"; }; - 7919424CA56B24B6F497FCB11FF6DB93 /* FChildEventRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FChildEventRegistration.h; path = Firebase/Database/Core/View/FChildEventRegistration.h; sourceTree = "<group>"; }; - 794FB584900DC2C9932AC53A681FF10C /* table.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = table.cc; path = table/table.cc; sourceTree = "<group>"; }; - 79E2BF71AE254982334583E815969709 /* FChange.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FChange.m; path = Firebase/Database/Core/View/FChange.m; sourceTree = "<group>"; }; - 7B7C8165FC40E1432F5EB7EA2782E04B /* coding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = coding.h; path = util/coding.h; sourceTree = "<group>"; }; - 7B9509605188658AC6DAEB774F27217B /* FIRDataSnapshot.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDataSnapshot.m; path = Firebase/Database/Api/FIRDataSnapshot.m; sourceTree = "<group>"; }; - 7CF6606C0578E7CDF7EDEF3D4B178B60 /* FirebaseCoreDiagnostics-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FirebaseCoreDiagnostics-Info.plist"; sourceTree = "<group>"; }; - 7D6E47B616DE755714427591880125AE /* env.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = env.h; path = include/leveldb/env.h; sourceTree = "<group>"; }; - 7DF8ED92CC74E5A76731E6B0F0B23799 /* GoogleDataTransport.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleDataTransport.modulemap; sourceTree = "<group>"; }; - 7E58E1A27F0803C11F2250F1DCEC0741 /* GoogleUtilities.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleUtilities.release.xcconfig; sourceTree = "<group>"; }; - 7EDEB0636E82100515CA48503A4D022C /* FViewCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FViewCache.m; path = Firebase/Database/Core/View/FViewCache.m; sourceTree = "<group>"; }; - 80AE48D6611499F9E4910CA9F46D2191 /* FRangeMerge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRangeMerge.h; path = Firebase/Database/Core/FRangeMerge.h; sourceTree = "<group>"; }; - 81F3FD7983F8C4391CC30B4E7370767E /* cache.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = cache.cc; path = util/cache.cc; sourceTree = "<group>"; }; - 823E7E73D27229EF57D62A2C3C62E62C /* GDTCORReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORReachability.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORReachability.h; sourceTree = "<group>"; }; - 825631D04FA349AC9CAE016BE347234D /* FIRErrors.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRErrors.m; path = FirebaseCore/Sources/FIRErrors.m; sourceTree = "<group>"; }; - 82BD2B064A081DE7FB1B130EDCAAA263 /* FBLPromise+Wrap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Wrap.h"; path = "Sources/FBLPromises/include/FBLPromise+Wrap.h"; sourceTree = "<group>"; }; - 838FEFECD8DD58DE24E9A5A672A11E81 /* FParsedUrl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FParsedUrl.m; path = Firebase/Database/Utilities/FParsedUrl.m; sourceTree = "<group>"; }; - 83AC43378C350989A6B691A3B81051E5 /* merger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = merger.h; path = table/merger.h; sourceTree = "<group>"; }; - 83AD72E6FF9339276439BA4350ABDA13 /* FBLPromisePrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBLPromisePrivate.h; path = Sources/FBLPromises/include/FBLPromisePrivate.h; sourceTree = "<group>"; }; - 8454AAD8C7BABB4D4FC9DC6D3F1FC788 /* FValueIndex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FValueIndex.m; path = Firebase/Database/FValueIndex.m; sourceTree = "<group>"; }; - 856B5CD56F194FAD26EA91620B66D614 /* GoogleDataTransport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GoogleDataTransport.framework; path = GoogleDataTransport.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 85F1AE2EBEC3ACE6F7F8518590D0F6A2 /* FBLPromise+Any.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Any.m"; path = "Sources/FBLPromises/FBLPromise+Any.m"; sourceTree = "<group>"; }; - 860B744356EA183E469CA636F94AEB50 /* FPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPath.h; path = Firebase/Database/Core/Utilities/FPath.h; sourceTree = "<group>"; }; - 8734EC42113C4820AC918A2ECB6EE41C /* FIRConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRConfiguration.m; path = FirebaseCore/Sources/FIRConfiguration.m; sourceTree = "<group>"; }; - 873B2D52C27790E76C58F17E637447EA /* FIRDependency.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDependency.m; path = FirebaseCore/Sources/FIRDependency.m; sourceTree = "<group>"; }; - 875DAAA3905FD883291E5E4ED1AE9052 /* GoogleDataTransport-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GoogleDataTransport-Info.plist"; sourceTree = "<group>"; }; - 87A11B9808FEF3BD00DEAAF8F1F7A1E8 /* FBLPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBLPromise.h; path = Sources/FBLPromises/include/FBLPromise.h; sourceTree = "<group>"; }; - 87AE9B4D3596ECB04407EB93492E47BD /* dumpfile.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = dumpfile.cc; path = db/dumpfile.cc; sourceTree = "<group>"; }; - 87C8D393D6580BF43944DB0760788D06 /* FIROptionsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptionsInternal.h; path = FirebaseCore/Sources/Private/FIROptionsInternal.h; sourceTree = "<group>"; }; - 88B434AB00179B49FC2340C88AA79645 /* FCompoundHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FCompoundHash.m; path = Firebase/Database/Core/FCompoundHash.m; sourceTree = "<group>"; }; - 89813D1225296221B8A1CD2141389CB2 /* GoogleDataTransport.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleDataTransport.release.xcconfig; sourceTree = "<group>"; }; - 8A0818CE0BCE0C31BA702F922277305F /* GULKeychainUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULKeychainUtils.h; path = GoogleUtilities/Environment/Public/GULKeychainUtils.h; sourceTree = "<group>"; }; - 8A4EB59A5D57265DCE22DAF6B0F62EC4 /* FIRDatabaseReference.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDatabaseReference.m; path = Firebase/Database/FIRDatabaseReference.m; sourceTree = "<group>"; }; - 8A4F5BC1A826B07C0F4C1030B7CBA8CD /* FirebaseCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseCore-dummy.m"; sourceTree = "<group>"; }; - 8B05621A5EF759E47A44989B0245FC6A /* dbformat.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = dbformat.cc; path = db/dbformat.cc; sourceTree = "<group>"; }; - 8BC4618A1AB60D74C5C3EE23BEC70362 /* mutexlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mutexlock.h; path = util/mutexlock.h; sourceTree = "<group>"; }; - 8BD8AF5861BD6D8277CCB8D46458CE6F /* FCacheNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCacheNode.h; path = Firebase/Database/Core/View/FCacheNode.h; sourceTree = "<group>"; }; - 8BE48E3EE3333BF5E2BE4F1CD5787E3D /* FLLRBEmptyNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLLRBEmptyNode.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBEmptyNode.m; sourceTree = "<group>"; }; - 8CC9178C366942FD6FF6A115604EAD58 /* FirebaseCoreDiagnostics.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseCoreDiagnostics.framework; path = FirebaseCoreDiagnostics.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8DB35C5A4E090537BCD1F8382ACCD601 /* hash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = hash.h; path = util/hash.h; sourceTree = "<group>"; }; - 8EAA3C6BA44BAFE3C08D2B7B5567778D /* FTrackedQueryManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTrackedQueryManager.m; path = Firebase/Database/Persistence/FTrackedQueryManager.m; sourceTree = "<group>"; }; - 8F2DF0513C9DB23D691523760E8A297A /* FIRBundleUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRBundleUtil.h; path = FirebaseCore/Sources/FIRBundleUtil.h; sourceTree = "<group>"; }; - 8F623F7FBC6EF232A1F47AACADC4C561 /* FLLRBValueNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLLRBValueNode.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FLLRBValueNode.h; sourceTree = "<group>"; }; - 8F89CFE3165AF36055F7014246855162 /* repair.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = repair.cc; path = db/repair.cc; sourceTree = "<group>"; }; - 8FB6A055AAC08E126DD875D10F1681BE /* FArraySortedDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FArraySortedDictionary.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FArraySortedDictionary.m; sourceTree = "<group>"; }; - 902E6002602A44EB342BBC2142E66B0D /* FIRMutableData_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMutableData_Private.h; path = Firebase/Database/Api/Private/FIRMutableData_Private.h; sourceTree = "<group>"; }; - 90316C54AEDD432C7EDDA954D02A16E0 /* APLevelDB.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APLevelDB.h; path = "Firebase/Database/third_party/Wrap-leveldb/APLevelDB.h"; sourceTree = "<group>"; }; - 90D45AEDE9F7AD08010F5EE9B389652E /* GDTCORTransport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORTransport.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORTransport.m; sourceTree = "<group>"; }; - 914AA32349DFFE43B88FD2C41C2E3880 /* FIRConfigurationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRConfigurationInternal.h; path = FirebaseCore/Sources/Private/FIRConfigurationInternal.h; sourceTree = "<group>"; }; - 916D739034B004E106182204228D42C0 /* FConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FConstants.m; path = Firebase/Database/Constants/FConstants.m; sourceTree = "<group>"; }; - 917F14DB5F41240C3D285C5384050E2C /* FirebaseCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseCore-umbrella.h"; sourceTree = "<group>"; }; - 91811F71C2FA9265B03192507FD0715D /* crc32c.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = crc32c.h; path = util/crc32c.h; sourceTree = "<group>"; }; - 922204FA6D1655751812D541250FEA72 /* FBLPromise+Then.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Then.m"; path = "Sources/FBLPromises/FBLPromise+Then.m"; sourceTree = "<group>"; }; - 9258D0107323650D356F6D0323D79CC3 /* FBLPromise+Catch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Catch.h"; path = "Sources/FBLPromises/include/FBLPromise+Catch.h"; sourceTree = "<group>"; }; - 92CD283D96DCA1B1A70CCFCEDE5A47B2 /* FIRComponentContainerInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentContainerInternal.h; path = FirebaseCore/Sources/Private/FIRComponentContainerInternal.h; sourceTree = "<group>"; }; - 941ACF372F977D2EFD95A9310219B60A /* pb_decode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_decode.h; sourceTree = "<group>"; }; - 945B168B765E0149A40FCDD1B383D898 /* FTupleCallbackStatus.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleCallbackStatus.m; path = Firebase/Database/Utilities/Tuples/FTupleCallbackStatus.m; sourceTree = "<group>"; }; - 94828B387C56139BACCCEDC781E42B5B /* GDTCORAssert.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORAssert.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m; sourceTree = "<group>"; }; - 94B46AAE0848AD9B3F922BBB8DA40DC5 /* GDTCORStorageProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORStorageProtocol.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORStorageProtocol.h; sourceTree = "<group>"; }; - 955193171396A5F7FDA4F76ECCAEAC78 /* FIRDatabaseConfig_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabaseConfig_Private.h; path = Firebase/Database/FIRDatabaseConfig_Private.h; sourceTree = "<group>"; }; - 95728A376DED6052F25B119402483838 /* testutil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = testutil.h; path = util/testutil.h; sourceTree = "<group>"; }; - 95D786CDC75102E908AC12A8FCEC111A /* GULAppEnvironmentUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULAppEnvironmentUtil.m; path = GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m; sourceTree = "<group>"; }; - 95EDE74C6DE1F87EE3663A0AD366B7B5 /* FMerge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMerge.h; path = Firebase/Database/Core/Operation/FMerge.h; sourceTree = "<group>"; }; - 96B97BCFDFB29A395ECEFEEE53D89889 /* log_reader.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = log_reader.cc; path = db/log_reader.cc; sourceTree = "<group>"; }; - 975D7F0C4BD02609E2E89C0BDB223652 /* FStringUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FStringUtilities.h; path = Firebase/Database/Utilities/FStringUtilities.h; sourceTree = "<group>"; }; - 97BCB79C675A3B16DD7740908974E9B3 /* FIRVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVersion.m; path = FirebaseCore/Sources/FIRVersion.m; sourceTree = "<group>"; }; - 98859E9B4B250386DEDD7C85EB0716D8 /* FRepoManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRepoManager.h; path = Firebase/Database/Core/FRepoManager.h; sourceTree = "<group>"; }; - 98B5D3DAE49B0B1F304E5AAF9095F733 /* random.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = random.h; path = util/random.h; sourceTree = "<group>"; }; - 98F196A197AFD44C0C2A0FB7E9BACF4C /* comparator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = comparator.h; path = include/leveldb/comparator.h; sourceTree = "<group>"; }; - 98FC3E75806D347BDE1998F9D6F7924D /* FBLPromise+Testing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Testing.h"; path = "Sources/FBLPromises/include/FBLPromise+Testing.h"; sourceTree = "<group>"; }; - 991856E8769D32D7006FE848E3EB873D /* FIRServerValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRServerValue.h; path = Firebase/Database/Public/FIRServerValue.h; sourceTree = "<group>"; }; - 99C96C3B40C51D1D79FC28DC8197EB3C /* two_level_iterator.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = two_level_iterator.cc; path = table/two_level_iterator.cc; sourceTree = "<group>"; }; - 99E6B34EBA0A767EED9DFC5E58B87DF5 /* FConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FConnection.h; path = Firebase/Database/Realtime/FConnection.h; sourceTree = "<group>"; }; - 9A971A378B109444D68EC9F1710744D4 /* histogram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = histogram.h; path = util/histogram.h; sourceTree = "<group>"; }; - 9AB3707E44CE0D64C47BB82321FE3BD4 /* GoogleDataTransportCCTSupport-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleDataTransportCCTSupport-dummy.m"; sourceTree = "<group>"; }; - 9AEA59B436FE7C179D1AA762546E52F0 /* FTreeNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTreeNode.h; path = Firebase/Database/Core/Utilities/FTreeNode.h; sourceTree = "<group>"; }; - 9B25CE4BCD165FCACCCB347BE5C627FA /* FIRDiagnosticsData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDiagnosticsData.h; path = FirebaseCore/Sources/Private/FIRDiagnosticsData.h; sourceTree = "<group>"; }; - 9BC93D2F01BC90BCC406F2269AFF64B1 /* FirebaseCoreDiagnosticsInterop.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCoreDiagnosticsInterop.debug.xcconfig; sourceTree = "<group>"; }; - 9C997CFFE0B0EB3DB9D6ADAF73854B4E /* testharness.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = testharness.cc; path = util/testharness.cc; sourceTree = "<group>"; }; - 9D049B599CD35B1EBCCFB40378A858E0 /* FValidation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FValidation.m; path = Firebase/Database/Utilities/FValidation.m; sourceTree = "<group>"; }; - 9D85A9AAC775F25C1D9D72DCD09CE492 /* GoogleDataTransport.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleDataTransport.debug.xcconfig; sourceTree = "<group>"; }; - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9DC5B45B4B2D0DC0AE3FB7A75E08649A /* FBLPromise+Race.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Race.h"; path = "Sources/FBLPromises/include/FBLPromise+Race.h"; sourceTree = "<group>"; }; - 9E2D65ECD11B6AEB036931D5A3380113 /* GULHeartbeatDateStorage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULHeartbeatDateStorage.m; path = GoogleUtilities/Environment/GULHeartbeatDateStorage.m; sourceTree = "<group>"; }; - 9E7B43761161E27D4FB4903970D91F4F /* FCompleteChildSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FCompleteChildSource.h; path = Firebase/Database/Core/View/Filter/FCompleteChildSource.h; sourceTree = "<group>"; }; - 9F12FA3516B540F46C4E817F486AD87A /* FIROptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptions.h; path = FirebaseCore/Sources/Public/FIROptions.h; sourceTree = "<group>"; }; - 9FFA595A6BC21A8745A22CAC7C9C9678 /* NSData+SRB64Additions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+SRB64Additions.h"; path = "Firebase/Database/third_party/SocketRocket/NSData+SRB64Additions.h"; sourceTree = "<group>"; }; - A0C2CA4BE08826E478724D7FBB8A6D94 /* FIndex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIndex.h; path = Firebase/Database/FIndex.h; sourceTree = "<group>"; }; - A0CDEC73746A123B250DF34810E0C957 /* GDTCORUploadCoordinator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORUploadCoordinator.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h; sourceTree = "<group>"; }; - A0D2B9693657353DC78B1C8AA8E503F4 /* FirebaseCoreDiagnosticsInterop.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCoreDiagnosticsInterop.release.xcconfig; sourceTree = "<group>"; }; - A11AE0A92B88FC456F083B131B991F1A /* FBLPromise+Reduce.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Reduce.m"; path = "Sources/FBLPromises/FBLPromise+Reduce.m"; sourceTree = "<group>"; }; - A1B575D60903423A2B9984866581EC10 /* FImmutableTree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FImmutableTree.h; path = Firebase/Database/Core/Utilities/FImmutableTree.h; sourceTree = "<group>"; }; - A1B705F633CD48849AE76995D60F22F5 /* FIndexedNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIndexedNode.m; path = Firebase/Database/Snapshot/FIndexedNode.m; sourceTree = "<group>"; }; - A2D25B8664C78BB8A4AAAF6FA3EF21AB /* env_posix.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = env_posix.cc; path = util/env_posix.cc; sourceTree = "<group>"; }; - A314FA39C00A05F50CD19B20BE48E0EE /* FDataEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FDataEvent.h; path = Firebase/Database/Core/View/FDataEvent.h; sourceTree = "<group>"; }; - A320AFD4407CF0B2CE66E62B45145BDB /* FRepoManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FRepoManager.m; path = Firebase/Database/Core/FRepoManager.m; sourceTree = "<group>"; }; - A3735655FE85A76B2A9B4658B9E1D579 /* GoogleUtilities.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleUtilities.modulemap; sourceTree = "<group>"; }; - A3823B10AD6A6B24863EBD4ECE0D691C /* cache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = cache.h; path = include/leveldb/cache.h; sourceTree = "<group>"; }; - A3DD7543FF2C526CD999ADA8530ED5EA /* FOperationSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FOperationSource.m; path = Firebase/Database/Core/Operation/FOperationSource.m; sourceTree = "<group>"; }; - A43C04A3FED5D0538408B186EB5A4FD1 /* FValidation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FValidation.h; path = Firebase/Database/Utilities/FValidation.h; sourceTree = "<group>"; }; - A551638736E976C6F89390DB407C4331 /* FIRServerValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRServerValue.m; path = Firebase/Database/Api/FIRServerValue.m; sourceTree = "<group>"; }; - A674C7C09F1C351BFF34B1C8A0910870 /* env.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = env.cc; path = util/env.cc; sourceTree = "<group>"; }; - A720480A68376788BC41CE5196AD1D6D /* FSnapshotUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSnapshotUtilities.h; path = Firebase/Database/Snapshot/FSnapshotUtilities.h; sourceTree = "<group>"; }; - A8D9FCB9E6E7263B05452B4A1E52C57B /* FWriteRecord.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FWriteRecord.m; path = Firebase/Database/Core/FWriteRecord.m; sourceTree = "<group>"; }; - A8DA6D09CA5BA0ADBB362152B7846961 /* FKeyIndex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FKeyIndex.h; path = Firebase/Database/FKeyIndex.h; sourceTree = "<group>"; }; - A908DAA989BEA273B10D102D558F47FD /* GDTCORRegistrar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORRegistrar.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORRegistrar.h; sourceTree = "<group>"; }; - A9D70C09F8DDD9DFB26AC7F97FAB70ED /* FTreeSortedDictionaryEnumerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTreeSortedDictionaryEnumerator.h; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionaryEnumerator.h; sourceTree = "<group>"; }; - AA690BDFA65E8C410A82130B3483B82A /* bloom.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = bloom.cc; path = util/bloom.cc; sourceTree = "<group>"; }; - AAC5E8282CA57B988CA60B91846B3AB9 /* GULHeartbeatDateStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULHeartbeatDateStorage.h; path = GoogleUtilities/Environment/Public/GULHeartbeatDateStorage.h; sourceTree = "<group>"; }; - AAF98DB258436A94B5CFFCB168CA4E11 /* FIRBundleUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRBundleUtil.m; path = FirebaseCore/Sources/FIRBundleUtil.m; sourceTree = "<group>"; }; - ABC4D7550679CE90B7A7D2AC9658CD2B /* FTupleNodePath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleNodePath.m; path = Firebase/Database/Utilities/Tuples/FTupleNodePath.m; sourceTree = "<group>"; }; - AC1A01D6B0D166DA6AAD158D6264F693 /* comparator.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = comparator.cc; path = util/comparator.cc; sourceTree = "<group>"; }; - ACA4F24A74FE27CDF4351A7341029FC3 /* FRangedFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRangedFilter.h; path = Firebase/Database/FRangedFilter.h; sourceTree = "<group>"; }; - AD39F1091B89CC90EB47C76A7740E528 /* FCompoundWrite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FCompoundWrite.m; path = Firebase/Database/Snapshot/FCompoundWrite.m; sourceTree = "<group>"; }; - AD6117C150F7C9AEC846B49F6EAA9BAF /* FBLPromise+Timeout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Timeout.m"; path = "Sources/FBLPromises/FBLPromise+Timeout.m"; sourceTree = "<group>"; }; - AEF3F09834AB87411FD7F6AF1067B39D /* fbase64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fbase64.h; path = Firebase/Database/third_party/SocketRocket/fbase64.h; sourceTree = "<group>"; }; - B1A323E1E6BBE609DB73C75EE7791C2C /* FUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUtilities.m; path = Firebase/Database/Utilities/FUtilities.m; sourceTree = "<group>"; }; - B1AEACA1BDF2D31AC8B5E8D8883CD1CA /* FIRDatabaseConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDatabaseConfig.m; path = Firebase/Database/Api/FIRDatabaseConfig.m; sourceTree = "<group>"; }; - B25E09C5A052F1C3A6AE26E97F071ED2 /* testharness.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = testharness.h; path = util/testharness.h; sourceTree = "<group>"; }; - B299C026C8827C5F992F488CCBA2D192 /* FBLPromise+Do.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Do.h"; path = "Sources/FBLPromises/include/FBLPromise+Do.h"; sourceTree = "<group>"; }; - B2A6FBBC1582B73F699D2622665AD418 /* GDTCORPlatform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORPlatform.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORPlatform.m; sourceTree = "<group>"; }; - B338B2C9808C5C0AF778CD7DADCE1AE8 /* FPathIndex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPathIndex.h; path = Firebase/Database/FPathIndex.h; sourceTree = "<group>"; }; - B33A7C7D5DA6BCED7A54588D8B519573 /* FPriorityIndex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPriorityIndex.m; path = Firebase/Database/FPriorityIndex.m; sourceTree = "<group>"; }; - B33DBADEF735E61DC443B9753E707E98 /* FIRRetryHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRRetryHelper.m; path = Firebase/Database/Core/Utilities/FIRRetryHelper.m; sourceTree = "<group>"; }; - B376CAF865729E1CF465CFCCA52115D9 /* FIRComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRComponent.m; path = FirebaseCore/Sources/FIRComponent.m; sourceTree = "<group>"; }; - B423C55EDD8B0EBA1C93A2C48DD3B22B /* FUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUtilities.h; path = Firebase/Database/Utilities/FUtilities.h; sourceTree = "<group>"; }; - B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GoogleUtilities.framework; path = GoogleUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B4600FE4208AE3E5795D8EBB5F97A617 /* GDTCORLifecycle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORLifecycle.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORLifecycle.h; sourceTree = "<group>"; }; - B5129F030E10972C371924DB4DCFA600 /* FPruneForest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPruneForest.m; path = Firebase/Database/Persistence/FPruneForest.m; sourceTree = "<group>"; }; - B5182676AC9060524937E8799614DFAC /* FTupleTransaction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleTransaction.m; path = Firebase/Database/Utilities/Tuples/FTupleTransaction.m; sourceTree = "<group>"; }; - B52430627E2CEB470F4622858A8480DA /* FTreeNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTreeNode.m; path = Firebase/Database/Core/Utilities/FTreeNode.m; sourceTree = "<group>"; }; - B5D4BE3DC5EADCF63F424C33B95D8E0F /* FIRCoreDiagnosticsConnector.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCoreDiagnosticsConnector.m; path = FirebaseCore/Sources/FIRCoreDiagnosticsConnector.m; sourceTree = "<group>"; }; - B62F2EFD836B0B4D141B7D3B7A76D1C8 /* env_posix_test_helper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = env_posix_test_helper.h; path = util/env_posix_test_helper.h; sourceTree = "<group>"; }; - B66C3F856B135140E3571B506C20655B /* leveldb-library-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "leveldb-library-Info.plist"; sourceTree = "<group>"; }; - B6B1D21BE3FE785C043FD82E5E14181D /* FIRLibrary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLibrary.h; path = FirebaseCore/Sources/Private/FIRLibrary.h; sourceTree = "<group>"; }; - B6D497A2AD9B52065632EE2AA511D94A /* Pods-openTok-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-openTok-acknowledgements.plist"; sourceTree = "<group>"; }; - B781D7A58A91FBED1BE497CD9B527741 /* FMerge.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMerge.m; path = Firebase/Database/Core/Operation/FMerge.m; sourceTree = "<group>"; }; - B835A6F7159081070635B80749DFB910 /* FTreeSortedDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTreeSortedDictionary.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FTreeSortedDictionary.m; sourceTree = "<group>"; }; - B93B0CDE62D8C9C5FE9C7139B4C0867E /* table_builder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = table_builder.h; path = include/leveldb/table_builder.h; sourceTree = "<group>"; }; - B9D7744ACAB828228094C7FE549D9408 /* arena.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = arena.h; path = util/arena.h; sourceTree = "<group>"; }; - BA31349F47B178F2D34395E3D9A54B31 /* Pods-openTok-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-openTok-Info.plist"; sourceTree = "<group>"; }; - BA39E2C48027666F9469709D4DC983B4 /* FirebaseDatabase-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseDatabase-umbrella.h"; sourceTree = "<group>"; }; - BACDC3D5A2E777358D664B3A45214F03 /* FAckUserWrite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FAckUserWrite.m; path = Firebase/Database/Core/Operation/FAckUserWrite.m; sourceTree = "<group>"; }; - BAE3B72678AB5BFDAF8CA9B8BB4477B6 /* thread_annotations.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = thread_annotations.h; path = port/thread_annotations.h; sourceTree = "<group>"; }; - BB0D2688C1F6E5C119D27FA7EB2A6087 /* FBLPromise+All.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+All.m"; path = "Sources/FBLPromises/FBLPromise+All.m"; sourceTree = "<group>"; }; - BB2662A73E4AB039897681B4F9987F6A /* no_destructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = no_destructor.h; path = util/no_destructor.h; sourceTree = "<group>"; }; - BBCAFB9BB21E3ACB769B48A3B1C75463 /* port.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = port.h; path = port/port.h; sourceTree = "<group>"; }; - BBE58D8C7B4DF5B650E6528061BAF00C /* GDTCORAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORAssert.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORAssert.h; sourceTree = "<group>"; }; - BD9507903A6A4787A9BCB8293A9F3826 /* FOverwrite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FOverwrite.m; path = Firebase/Database/Core/Operation/FOverwrite.m; sourceTree = "<group>"; }; - BE1A8F7A905D09BE7EB82BBFF174EE78 /* iterator_wrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = iterator_wrapper.h; path = table/iterator_wrapper.h; sourceTree = "<group>"; }; - BE1FF88442223E72C05A63E1D359C30A /* FTupleFirebase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleFirebase.m; path = Firebase/Database/Utilities/Tuples/FTupleFirebase.m; sourceTree = "<group>"; }; - BE2B0C81910979BDBCB280D64692E5BF /* FChildEventRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FChildEventRegistration.m; path = Firebase/Database/Core/View/FChildEventRegistration.m; sourceTree = "<group>"; }; - BF564EDAEE1DA9A93B72737F09F33227 /* crc32c.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = crc32c.cc; path = util/crc32c.cc; sourceTree = "<group>"; }; - C06D9B56F82CF06972FE49E8E289A7E2 /* PromisesObjC.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = PromisesObjC.modulemap; sourceTree = "<group>"; }; - C08F5263A7EA97B8AD1A8772345B4295 /* FPathIndex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPathIndex.m; path = Firebase/Database/FPathIndex.m; sourceTree = "<group>"; }; - C10C6020EDDB2016BD64181B672CBC2C /* GDTCORFlatFileStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORFlatFileStorage.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage.h; sourceTree = "<group>"; }; - C1138211F92A15BC81CD2389748F9E8B /* FIRDataSnapshot_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDataSnapshot_Private.h; path = Firebase/Database/Api/Private/FIRDataSnapshot_Private.h; sourceTree = "<group>"; }; - C22C5C60494445166C096866D5BC162E /* FSnapshotUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSnapshotUtilities.m; path = Firebase/Database/Snapshot/FSnapshotUtilities.m; sourceTree = "<group>"; }; - C24A10EC10F9B315031342CB463C1F89 /* version_edit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = version_edit.h; path = db/version_edit.h; sourceTree = "<group>"; }; - C26746AB2A5D53AF8402A1B015403633 /* GoogleUtilities.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleUtilities.debug.xcconfig; sourceTree = "<group>"; }; - C2760200A696A747EB2BB8996E5F37C0 /* FTuplePathValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTuplePathValue.h; path = Firebase/Database/Utilities/Tuples/FTuplePathValue.h; sourceTree = "<group>"; }; - C295B47E516F633178D34FA8303E944A /* FMaxNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMaxNode.h; path = Firebase/Database/FMaxNode.h; sourceTree = "<group>"; }; - C36919082934B6801606679F9235BAA5 /* FValueEventRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FValueEventRegistration.h; path = Firebase/Database/Core/View/FValueEventRegistration.h; sourceTree = "<group>"; }; - C3962A70D732F744EB86C655C8904117 /* FirebaseCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseCore.modulemap; sourceTree = "<group>"; }; - C3F1EA207BC255E9BA95DB0C99A876B3 /* FTrackedQueryManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTrackedQueryManager.h; path = Firebase/Database/Persistence/FTrackedQueryManager.h; sourceTree = "<group>"; }; - C443A630A1668A448ECF8A09F457DEFA /* pb_encode.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pb_encode.c; sourceTree = "<group>"; }; - C4C0ED34A72FF0624A93EC40E7CF6B37 /* leveldb-library-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "leveldb-library-umbrella.h"; sourceTree = "<group>"; }; - C5878F2A6B4FDCC6F17613A13676081E /* FBLPromise+Testing.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Testing.m"; path = "Sources/FBLPromises/FBLPromise+Testing.m"; sourceTree = "<group>"; }; - C659D2D4B99C8CDA79646FE859D2696A /* filter_policy.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = filter_policy.cc; path = util/filter_policy.cc; sourceTree = "<group>"; }; - C6D8EEB350A4ECED82D557A3EAB5AA77 /* GoogleUtilities-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleUtilities-dummy.m"; sourceTree = "<group>"; }; - C83F672C79ADC28FEFB9E4671207B48F /* fbase64.c */ = {isa = PBXFileReference; includeInIndex = 1; name = fbase64.c; path = Firebase/Database/third_party/SocketRocket/fbase64.c; sourceTree = "<group>"; }; - C8ADE11EC03AF033C186B754146EB29F /* FirebaseCoreDiagnostics-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseCoreDiagnostics-umbrella.h"; sourceTree = "<group>"; }; - CA283EA1FDCDD01C444F2DFCB23D0B41 /* FImmutableSortedDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FImmutableSortedDictionary.m; path = Firebase/Database/third_party/FImmutableSortedDictionary/FImmutableSortedDictionary/FImmutableSortedDictionary.m; sourceTree = "<group>"; }; - CA6848D4B1055686D25D93DF40B2C915 /* GDTCORReachability_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORReachability_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability_Private.h; sourceTree = "<group>"; }; - CAD6EEF839E19AE78EB0C9FF88CBECE2 /* GDTCORConsoleLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORConsoleLogger.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORConsoleLogger.h; sourceTree = "<group>"; }; - CAD98370F606C47C0E85A961278677BC /* FMaxNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMaxNode.m; path = Firebase/Database/FMaxNode.m; sourceTree = "<group>"; }; - CB03CAD9E17D96C89C856908211FD5AB /* GULLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULLogger.h; path = GoogleUtilities/Logger/Private/GULLogger.h; sourceTree = "<group>"; }; - CB4A191F4483E65DD757ECF72435553C /* FPersistentConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPersistentConnection.m; path = Firebase/Database/Core/FPersistentConnection.m; sourceTree = "<group>"; }; - CBF9637B074AD29A17C37F3502AF829A /* FIndex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIndex.m; path = Firebase/Database/FIndex.m; sourceTree = "<group>"; }; - CD158462CD76FEB1BCB0075BEED53C2A /* FEmptyNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FEmptyNode.m; path = Firebase/Database/Snapshot/FEmptyNode.m; sourceTree = "<group>"; }; - CD22B20DCEE97C6687C597002DC5BE44 /* FTransformedEnumerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTransformedEnumerator.m; path = Firebase/Database/FTransformedEnumerator.m; sourceTree = "<group>"; }; - CE06D2F80F632B8CC85AEB98C01748F7 /* FBLPromise+Delay.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Delay.m"; path = "Sources/FBLPromises/FBLPromise+Delay.m"; sourceTree = "<group>"; }; - CEDB10734368755E95741BEF1CF380C3 /* FTupleObjectNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleObjectNode.h; path = Firebase/Database/Utilities/Tuples/FTupleObjectNode.h; sourceTree = "<group>"; }; - D14605E2B290BBFBCFE713BA4B20BA76 /* FChildrenNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FChildrenNode.m; path = Firebase/Database/Snapshot/FChildrenNode.m; sourceTree = "<group>"; }; - D1E6D1D803B379D5B9D499DC2AEAAD57 /* FTupleBoolBlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleBoolBlock.h; path = Firebase/Database/Utilities/Tuples/FTupleBoolBlock.h; sourceTree = "<group>"; }; - D212664CA6B122A499E6AAE0259F5F5D /* GDTCOREventDataObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREventDataObject.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventDataObject.h; sourceTree = "<group>"; }; - D25C535A0ED2942C4E794B83583D12CD /* snapshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = snapshot.h; path = db/snapshot.h; sourceTree = "<group>"; }; - D2A24B05955F1EE99EBC76E88971F2D8 /* FBLPromise+Retry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Retry.h"; path = "Sources/FBLPromises/include/FBLPromise+Retry.h"; sourceTree = "<group>"; }; - D2C19F3B7A322A65FA2CC3F20A6DF678 /* leveldb-library.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "leveldb-library.release.xcconfig"; sourceTree = "<group>"; }; - D300E695491585B083A58415F81511F1 /* FTrackedQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTrackedQuery.m; path = Firebase/Database/Persistence/FTrackedQuery.m; sourceTree = "<group>"; }; - D3B07B31DDBEA3C5582D124B8D3B6443 /* GDTCCTCompressionHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTCompressionHelper.h; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTCompressionHelper.h; sourceTree = "<group>"; }; - D3C76A00399095A4DAA2020273DEE53B /* leveldb-library.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "leveldb-library.debug.xcconfig"; sourceTree = "<group>"; }; - D595AE273F09F91E6ECCB09DDE4BE1CA /* FRepo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRepo.h; path = Firebase/Database/Core/FRepo.h; sourceTree = "<group>"; }; - D5D7486A6BEF323ADBAE7A259186E285 /* FTransformedEnumerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTransformedEnumerator.h; path = Firebase/Database/FTransformedEnumerator.h; sourceTree = "<group>"; }; - D60179BD88EF9A234D60E6EDB1EEA0C5 /* FTupleOnDisconnect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleOnDisconnect.m; path = Firebase/Database/Utilities/Tuples/FTupleOnDisconnect.m; sourceTree = "<group>"; }; - D6870577D6F4991A666E6914A2F487A4 /* FIRDataEventType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDataEventType.h; path = Firebase/Database/Public/FIRDataEventType.h; sourceTree = "<group>"; }; - D7C3CEC573454AA3BE96772D20CBD14F /* FIndexedFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIndexedFilter.m; path = Firebase/Database/Core/View/Filter/FIndexedFilter.m; sourceTree = "<group>"; }; - D94F03D0CD3C49BEAAAACD23DB190B70 /* Firebase.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Firebase.debug.xcconfig; sourceTree = "<group>"; }; - D95FFC4B09BC1ED974D778A5C00737B1 /* FIRComponentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRComponentType.m; path = FirebaseCore/Sources/FIRComponentType.m; sourceTree = "<group>"; }; - D96FB1E0748CB2643821DE1953901D3B /* FTypedefs_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTypedefs_Private.h; path = Firebase/Database/Api/Private/FTypedefs_Private.h; sourceTree = "<group>"; }; - D9A699DB734FC836C80F34584A4A6781 /* FEventRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEventRegistration.h; path = Firebase/Database/Core/View/FEventRegistration.h; sourceTree = "<group>"; }; - D9C044CDB58F661488097BB87AF131F0 /* GDTCORRegistrar_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORRegistrar_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h; sourceTree = "<group>"; }; - DA1705E3E3B1D427074C708CE40F9CAC /* FLeafNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLeafNode.m; path = Firebase/Database/Snapshot/FLeafNode.m; sourceTree = "<group>"; }; - DB9220001C09A1747358192EC9ED2C84 /* FRepoInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FRepoInfo.m; path = Firebase/Database/Core/FRepoInfo.m; sourceTree = "<group>"; }; - DBB2A2E28ED4F674F6370BD3D6B4AB5A /* FChildChangeAccumulator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FChildChangeAccumulator.h; path = Firebase/Database/Core/View/Filter/FChildChangeAccumulator.h; sourceTree = "<group>"; }; - DBD5F0D6D5607CCC279F0AA16086D019 /* nanopb-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "nanopb-umbrella.h"; sourceTree = "<group>"; }; - DC29D06EF9DB0608699CE6668F459127 /* FViewCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FViewCache.h; path = Firebase/Database/Core/View/FViewCache.h; sourceTree = "<group>"; }; - DD34FF93A6587C0B4E47FFD49CA5445E /* FListenComplete.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FListenComplete.h; path = Firebase/Database/FListenComplete.h; sourceTree = "<group>"; }; - DE08BA4A6C1A53923EC02F9A515107F8 /* write_batch_internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = write_batch_internal.h; path = db/write_batch_internal.h; sourceTree = "<group>"; }; - DE8DDBC684EAB94B117FB431D6983794 /* FTupleBoolBlock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleBoolBlock.m; path = Firebase/Database/Utilities/Tuples/FTupleBoolBlock.m; sourceTree = "<group>"; }; - DF3E939FA895E12649FDF094D1D8DC7D /* pb_common.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pb_common.c; sourceTree = "<group>"; }; - DF67693BB6E8BFC4254953D2178F5408 /* FPersistenceManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPersistenceManager.h; path = Firebase/Database/Persistence/FPersistenceManager.h; sourceTree = "<group>"; }; - DF9EDE9DB2CF0517FF04BC31DCAEC0FE /* FNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FNode.h; path = Firebase/Database/Snapshot/FNode.h; sourceTree = "<group>"; }; - DFDD92BA3AA85D306208B74066AA26E9 /* FNodeFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FNodeFilter.h; path = Firebase/Database/Core/View/Filter/FNodeFilter.h; sourceTree = "<group>"; }; - E0133CE971C065D957EDE8B9AAF9B36F /* FTupleSetIdPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleSetIdPath.m; path = Firebase/Database/Utilities/Tuples/FTupleSetIdPath.m; sourceTree = "<group>"; }; - E090AC85D60368344DE2CF202EDFBFE3 /* FirebaseDatabase-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseDatabase-dummy.m"; sourceTree = "<group>"; }; - E0B7CD0C231C6586963B625078141F9B /* logging.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = logging.cc; path = util/logging.cc; sourceTree = "<group>"; }; - E0EBF5A75E65BAB478184C63E9D29E55 /* FRepo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FRepo.m; path = Firebase/Database/Core/FRepo.m; sourceTree = "<group>"; }; - E17B23410BF812634C8DD594B2392929 /* FRepo_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRepo_Private.h; path = Firebase/Database/Core/FRepo_Private.h; sourceTree = "<group>"; }; - E1FC5A36113AB7A7F53F63FA047F3B95 /* FNextPushId.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FNextPushId.h; path = Firebase/Database/Utilities/FNextPushId.h; sourceTree = "<group>"; }; - E21CC05454593B859E1DD97BECD0AF1C /* histogram.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = histogram.cc; path = util/histogram.cc; sourceTree = "<group>"; }; - E2A534E083CF2D8F6EC559D6489659F4 /* GoogleDataTransport-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleDataTransport-umbrella.h"; sourceTree = "<group>"; }; - E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseCore.framework; path = FirebaseCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E2B8A272C8F2DE84AE5BEE68D7C5A30F /* FPersistentConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FPersistentConnection.h; path = Firebase/Database/Core/FPersistentConnection.h; sourceTree = "<group>"; }; - E37B33D6D220B28F622B08C2BA4A4DC6 /* FClock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FClock.m; path = Firebase/Database/FClock.m; sourceTree = "<group>"; }; - E3B99A902AB32FA5853427C93DCEA165 /* db_iter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = db_iter.h; path = db/db_iter.h; sourceTree = "<group>"; }; - E3E8EF9776569DF1C4FBACF2A05C6984 /* GDTCCTNanopbHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTNanopbHelpers.h; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h; sourceTree = "<group>"; }; - E4CF0D1BCDD54ABB40EE9AD5F541C198 /* coding.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = coding.cc; path = util/coding.cc; sourceTree = "<group>"; }; - E58F4E0A35AE5270A10F0B182C0CBC9E /* FNextPushId.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FNextPushId.m; path = Firebase/Database/Utilities/FNextPushId.m; sourceTree = "<group>"; }; - E5FE3C03918579D14DEB83FD5B810D8C /* FIRAnalyticsConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAnalyticsConfiguration.h; path = FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h; sourceTree = "<group>"; }; - E7C728948CE0F1485BF0F4BAFD54D11C /* FSyncTree.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSyncTree.m; path = Firebase/Database/Core/FSyncTree.m; sourceTree = "<group>"; }; - E8DE921A3AADBF970D703992669E82E0 /* version_edit.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = version_edit.cc; path = db/version_edit.cc; sourceTree = "<group>"; }; - E9558FB6E3417EEB6ACC4BAC9665F3A6 /* cct.nanopb.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cct.nanopb.c; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c; sourceTree = "<group>"; }; - E9A9F5F708FDFD0E308F6410820EE811 /* FTree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTree.h; path = Firebase/Database/Core/Utilities/FTree.h; sourceTree = "<group>"; }; - EA42623F573679F9A5B044DF94A4DDA6 /* FIRTransactionResult_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRTransactionResult_Private.h; path = Firebase/Database/Api/Private/FIRTransactionResult_Private.h; sourceTree = "<group>"; }; - EAE499B2DF8EBB7143A877BF5CDAEF4E /* FTupleUserCallback.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleUserCallback.h; path = Firebase/Database/Utilities/Tuples/FTupleUserCallback.h; sourceTree = "<group>"; }; - EAEAD2C37A2F7D54EB5D112BE700E464 /* FTupleRemovedQueriesEvents.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleRemovedQueriesEvents.m; path = Firebase/Database/Utilities/Tuples/FTupleRemovedQueriesEvents.m; sourceTree = "<group>"; }; - EB37EA4EA45CE7F317015ADC8D64A10E /* FirebaseCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FirebaseCore-Info.plist"; sourceTree = "<group>"; }; - EB4E2D2A1C3DEB62CAA9C59348F802D1 /* Firebase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Firebase.h; path = CoreOnly/Sources/Firebase.h; sourceTree = "<group>"; }; - EB6A33237EFBF55F3A9EBC83F548B03D /* FValueIndex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FValueIndex.h; path = Firebase/Database/FValueIndex.h; sourceTree = "<group>"; }; - EBA7E6C2A107483467C6124774CEF75D /* block.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = block.h; path = table/block.h; sourceTree = "<group>"; }; - EBAA464D5B2F65ED6BE6FB25E8A135C5 /* FKeepSyncedEventRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FKeepSyncedEventRegistration.m; path = Firebase/Database/Core/View/FKeepSyncedEventRegistration.m; sourceTree = "<group>"; }; - EC267D96A5B075660F91DDA49D90E56C /* FTupleObjects.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTupleObjects.m; path = Firebase/Database/Utilities/Tuples/FTupleObjects.m; sourceTree = "<group>"; }; - EC6B40288A57CC407F022CB43E26AAF1 /* FCacheNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FCacheNode.m; path = Firebase/Database/Core/View/FCacheNode.m; sourceTree = "<group>"; }; - EC794BDF881104077CA6D858C004F116 /* GDTCORUploadPackage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORUploadPackage.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploadPackage.h; sourceTree = "<group>"; }; - ED14BCF081A83EBB8A978CDDD5E13ADD /* FBLPromise+Reduce.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Reduce.h"; path = "Sources/FBLPromises/include/FBLPromise+Reduce.h"; sourceTree = "<group>"; }; - ED2B093C80BA032660F888C7F81B1D9D /* c.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = c.h; path = include/leveldb/c.h; sourceTree = "<group>"; }; - EE5C51CE831C623408DB778C1ABA0148 /* FBLPromise+Catch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Catch.m"; path = "Sources/FBLPromises/FBLPromise+Catch.m"; sourceTree = "<group>"; }; - EEAFB8AE27936F24FCBC0EBF570E19DF /* FIROptions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIROptions.m; path = FirebaseCore/Sources/FIROptions.m; sourceTree = "<group>"; }; - EEFA0E6408C1EE9694F24C8CDD87CC8E /* FSparseSnapshotTree.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSparseSnapshotTree.m; path = Firebase/Database/Core/FSparseSnapshotTree.m; sourceTree = "<group>"; }; - F0534E9B7F9A2AC947BBFFCC17B73753 /* FParsedUrl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FParsedUrl.h; path = Firebase/Database/Utilities/FParsedUrl.h; sourceTree = "<group>"; }; - F13DF5348224F0D6CBA0689639782254 /* slice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = slice.h; path = include/leveldb/slice.h; sourceTree = "<group>"; }; - F21172F501A44D23EDDB3AEA5234235C /* builder.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = builder.cc; path = db/builder.cc; sourceTree = "<group>"; }; - F229899516D0622E81CAD20651193F00 /* FIRDatabaseQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDatabaseQuery.m; path = Firebase/Database/Api/FIRDatabaseQuery.m; sourceTree = "<group>"; }; - F24B2FE999A991B0FB72A88254F127A9 /* GDTCOREvent_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREvent_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h; sourceTree = "<group>"; }; - F2560D7CA1567608F6BCDCD70881AFB4 /* FTypedefs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTypedefs.h; path = Firebase/Database/Utilities/FTypedefs.h; sourceTree = "<group>"; }; - F26C357D95872C344F908100D46E5153 /* FEventGenerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FEventGenerator.m; path = Firebase/Database/FEventGenerator.m; sourceTree = "<group>"; }; - F28A8199104EC2C984FA676FED6D9FBF /* FBLPromise+Delay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Delay.h"; path = "Sources/FBLPromises/include/FBLPromise+Delay.h"; sourceTree = "<group>"; }; - F3082C73B86C39432F3BEE1DB2F53924 /* GDTCOREventTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREventTransformer.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventTransformer.h; sourceTree = "<group>"; }; - F34FEBEB586D8DDC4CE36905BFC79C9B /* FListenProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FListenProvider.h; path = Firebase/Database/Core/FListenProvider.h; sourceTree = "<group>"; }; - F42C7C268617DB7675F42B8B5E5495AA /* FKeepSyncedEventRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FKeepSyncedEventRegistration.h; path = Firebase/Database/Core/View/FKeepSyncedEventRegistration.h; sourceTree = "<group>"; }; - F47CA6F1F12ACAF9B0755A517EEF8774 /* FQueryParams.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FQueryParams.h; path = Firebase/Database/Core/FQueryParams.h; sourceTree = "<group>"; }; - F4D50B06AA311127F439590F709F5807 /* FIRComponentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentType.h; path = FirebaseCore/Sources/Private/FIRComponentType.h; sourceTree = "<group>"; }; - F4DC65C04D076732C25AE29A2908DF95 /* GDTCORRegistrar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORRegistrar.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORRegistrar.m; sourceTree = "<group>"; }; - F64C9236D303103F4D3C397C4862BAA9 /* FServerValues.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FServerValues.h; path = Firebase/Database/Core/FServerValues.h; sourceTree = "<group>"; }; - F7A2885FF922A7315C564CF997DC7503 /* FirebaseDatabase.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseDatabase.modulemap; sourceTree = "<group>"; }; - F8514701493814AB84C06709B66B8991 /* FTree.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FTree.m; path = Firebase/Database/Core/Utilities/FTree.m; sourceTree = "<group>"; }; - F86A2D7DF81C3E8869A794D7E0292C97 /* db_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = db_impl.h; path = db/db_impl.h; sourceTree = "<group>"; }; - F8A34FFCCCD318ED0E09E4B62FAF6EA8 /* options.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = options.h; path = include/leveldb/options.h; sourceTree = "<group>"; }; - F8B8FAE3380266FF581E5704B032BC1D /* FBLPromise+Timeout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Timeout.h"; path = "Sources/FBLPromises/include/FBLPromise+Timeout.h"; sourceTree = "<group>"; }; - F8CC6FBC5815D2063DB2E3808DC024DB /* leveldb-library-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "leveldb-library-prefix.pch"; sourceTree = "<group>"; }; - F8FDB31CF6B1C1358EE35ADE19844DC7 /* FBLPromise+Always.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Always.h"; path = "Sources/FBLPromises/include/FBLPromise+Always.h"; sourceTree = "<group>"; }; - F907DDF83A30F1299472C033320155FC /* version_set.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = version_set.h; path = db/version_set.h; sourceTree = "<group>"; }; - F9B57561D347F59214C52B97CB5421A8 /* FRepoInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FRepoInfo.h; path = Firebase/Database/Core/FRepoInfo.h; sourceTree = "<group>"; }; - FA32E456E1C52FF9AC73AE5949A43B5E /* FBLPromise+Recover.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Recover.m"; path = "Sources/FBLPromises/FBLPromise+Recover.m"; sourceTree = "<group>"; }; - FA42256409F6AE11E423BC2D052A2AB3 /* FPendingPut.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FPendingPut.m; path = Firebase/Database/Persistence/FPendingPut.m; sourceTree = "<group>"; }; - FA47D62FD3660036076067B875D655A9 /* FEventGenerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FEventGenerator.h; path = Firebase/Database/FEventGenerator.h; sourceTree = "<group>"; }; - FAD139992C71368B1D6232300F330E1E /* FIRApp.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRApp.m; path = FirebaseCore/Sources/FIRApp.m; sourceTree = "<group>"; }; - FB1BD93373D49F12576A33ADBC3BB1E8 /* FTupleSetIdPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FTupleSetIdPath.h; path = Firebase/Database/Utilities/Tuples/FTupleSetIdPath.h; sourceTree = "<group>"; }; - FB1CF18DE410CAADC9B10DDD72B0B536 /* GULAppEnvironmentUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULAppEnvironmentUtil.h; path = GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.h; sourceTree = "<group>"; }; - FBA2C6C1EE48B9B639ED048474EB4157 /* hash.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = hash.cc; path = util/hash.cc; sourceTree = "<group>"; }; - FC1EFE2DCD55CE417891AFDE45E7C27A /* FSyncTree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSyncTree.h; path = Firebase/Database/Core/FSyncTree.h; sourceTree = "<group>"; }; - FC65A9652178080D84042446A2B9C021 /* FIRDependency.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDependency.h; path = FirebaseCore/Sources/Private/FIRDependency.h; sourceTree = "<group>"; }; - FD7581EECCCABA4BECF7F34AA2731B64 /* FIRDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDatabase.h; path = Firebase/Database/Public/FIRDatabase.h; sourceTree = "<group>"; }; - FD83A1F8DD099D0395534007C8A5EA71 /* memtable.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = memtable.cc; path = db/memtable.cc; sourceTree = "<group>"; }; - FE464F7C6ACA43984F0CE6C4734378E8 /* FirebaseCoreDiagnostics.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCoreDiagnostics.debug.xcconfig; sourceTree = "<group>"; }; - FE5998250B73CE8F1C7FC072542E79C7 /* FKeyIndex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FKeyIndex.m; path = Firebase/Database/FKeyIndex.m; sourceTree = "<group>"; }; - FFADC6E448C500341452C5E5C14C8B48 /* FValueEventRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FValueEventRegistration.m; path = Firebase/Database/Core/View/FValueEventRegistration.m; sourceTree = "<group>"; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 2B847EC9F642EFA623AF85427D7F5D6C /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 7C53A6196C34CBBE5F47F4B30215F6A8 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 301942F9FBB54A7C29EC65FB93D084B5 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 665579D80965906C049310B67DB8A18F /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 477B1EBCCA0EF7E6D74F2C2243B920B9 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 22A247A90EF8093E9BA1B0D58AD11D6D /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4D795267449E2E77F2C9E12DF3785D06 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 8464F1BABCF4CAA35574FDCFF3BB99DE /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4F00AE09C48E9A5504870A90CE6F1EAE /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 36AFEF5F38B16A22C7ACE7DD9037AD76 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5617A0BB9C5753E42E7D79212AF605E0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 95075C8107ED96F6C5E393C0528BAA24 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5BCF26CE614C85AC64F9F81B7F404C0F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D3AA7BFC4F1811139A87AED29C65B568 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6751468BB80C4AF1CF6394E0BD57CF9F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C7A5F5CE6CDF617255F34E95436634B0 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7B7CEF043B39B6E95CBFE1B56CED771E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ABD93BC90532E19EC023F2EF7F9D9371 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B959A7F826CE815470B03B08C71E5942 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 43A804271733F4A147E063DC379C6060 /* FBLPromises.framework in Frameworks */, - 2791FE6C4F39B16C3799C83AA518523B /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 0090480FAAAF214A35BF433A410D49DF /* FirebaseCoreDiagnostics */ = { - isa = PBXGroup; - children = ( - 0639F28CB196245922C7D8D3836E0964 /* FIRCoreDiagnostics.m */, - 19E1B93177BA8A0D2F8885B9BFF9D994 /* firebasecore.nanopb.c */, - 7193CDB6EF41B0AEB292E144AC86B962 /* firebasecore.nanopb.h */, - D7A929CB0184DEB473B7B44F17CFF47E /* Support Files */, - ); - name = FirebaseCoreDiagnostics; - path = FirebaseCoreDiagnostics; - sourceTree = "<group>"; - }; - 00FFE1454901BD5E4F8B7C065C6C99D3 /* Support Files */ = { - isa = PBXGroup; - children = ( - C3962A70D732F744EB86C655C8904117 /* FirebaseCore.modulemap */, - 8A4F5BC1A826B07C0F4C1030B7CBA8CD /* FirebaseCore-dummy.m */, - EB37EA4EA45CE7F317015ADC8D64A10E /* FirebaseCore-Info.plist */, - 917F14DB5F41240C3D285C5384050E2C /* FirebaseCore-umbrella.h */, - 5F3DC736CC472D8C083FEE2D95582EF6 /* FirebaseCore.debug.xcconfig */, - 3A78563412DD19D641BB6F1F170DA015 /* FirebaseCore.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/FirebaseCore"; - sourceTree = "<group>"; - }; - 08FCE314B2BEFDBD429FDE4BAA06FB80 /* Support Files */ = { - isa = PBXGroup; - children = ( - C06D9B56F82CF06972FE49E8E289A7E2 /* PromisesObjC.modulemap */, - 47CD1AEAB4C797A6A730DB00DE47D9CB /* PromisesObjC-dummy.m */, - 7910CA09A4822C96B09D982D5AA1AAFD /* PromisesObjC-Info.plist */, - 394D1BEAD6AA9B9EFDBAA0EAAB06D478 /* PromisesObjC-umbrella.h */, - 33ECE23F2ECD946250E06C49AD38D464 /* PromisesObjC.debug.xcconfig */, - 4517272EC7E584B42E4C304B2779D6B2 /* PromisesObjC.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/PromisesObjC"; - sourceTree = "<group>"; - }; - 106133EDDEB417663076A59D4FFAD214 /* Pods-openTok */ = { - isa = PBXGroup; - children = ( - 5C1A3ED649EAA4D369C665A9C4887D7D /* Pods-openTok.modulemap */, - 076B0F9655C1D328103BF4CFB4F0E0EC /* Pods-openTok-acknowledgements.markdown */, - B6D497A2AD9B52065632EE2AA511D94A /* Pods-openTok-acknowledgements.plist */, - 66E4FD9B631E9F35722D53A6EC999ACE /* Pods-openTok-dummy.m */, - 27DA1AAEA65D58C03CF0B6628644FE95 /* Pods-openTok-frameworks.sh */, - BA31349F47B178F2D34395E3D9A54B31 /* Pods-openTok-Info.plist */, - 3B87707E352D3B5520BAD0A84C358DC8 /* Pods-openTok-umbrella.h */, - 0D46DA763E703DDDB7846A3B498EA469 /* Pods-openTok.debug.xcconfig */, - 5FD0137BAD2B0EED669DF6AC601CAB94 /* Pods-openTok.release.xcconfig */, - ); - name = "Pods-openTok"; - path = "Target Support Files/Pods-openTok"; - sourceTree = "<group>"; - }; - 14A5A8D41905FA5E4A0C0A5BFAB417B0 /* Logger */ = { - isa = PBXGroup; - children = ( - CB03CAD9E17D96C89C856908211FD5AB /* GULLogger.h */, - 06EC7B364270EE75563BEB149A98E2DC /* GULLogger.m */, - 3144BEFF69AFAEDE619B25FE59B16969 /* GULLoggerLevel.h */, - ); - name = Logger; - sourceTree = "<group>"; - }; - 1B4EBD07C7FF3B9DFD52CF040166F1D6 /* Pods */ = { - isa = PBXGroup; - children = ( - 40C69A44B1557415FA9F57EE5FB199F4 /* Firebase */, - 90ADE0A91FF96131961B084B8649A310 /* FirebaseAuthInterop */, - EEEC29BDBC15B23A4B68997A977DC826 /* FirebaseCore */, - 0090480FAAAF214A35BF433A410D49DF /* FirebaseCoreDiagnostics */, - 1C34D934CD8D16CE8F713143FB40BA94 /* FirebaseCoreDiagnosticsInterop */, - 85B110C7B614BAAC33765E8011E188F9 /* FirebaseDatabase */, - 4750F567B1A83B07A3BF48753AA7299F /* GoogleDataTransport */, - 7D921290F3FEF47501F3B36519940850 /* GoogleDataTransportCCTSupport */, - 6ECE8D03379F08D25D8C811D33C5B4C5 /* GoogleUtilities */, - 21229610F5553CCF2953E99B9EADF8F9 /* leveldb-library */, - 5DA437DAF035B2E772BC1AE4E1506CF1 /* nanopb */, - 61C4012B92C92E604D92F4DD2F5639D7 /* PromisesObjC */, - ); - name = Pods; - sourceTree = "<group>"; - }; - 1C34D934CD8D16CE8F713143FB40BA94 /* FirebaseCoreDiagnosticsInterop */ = { - isa = PBXGroup; - children = ( - 4D8F88C55CA62E3CEF68D39A29F74646 /* FIRCoreDiagnosticsData.h */, - 3639E6825CB07BF545A128E69034513C /* FIRCoreDiagnosticsInterop.h */, - AA07292FD2905535EE2E39FF9206B8EF /* Support Files */, - ); - name = FirebaseCoreDiagnosticsInterop; - path = FirebaseCoreDiagnosticsInterop; - sourceTree = "<group>"; - }; - 21229610F5553CCF2953E99B9EADF8F9 /* leveldb-library */ = { - isa = PBXGroup; - children = ( - 3787BE6B13B4E6006135EB46DB54DC42 /* arena.cc */, - B9D7744ACAB828228094C7FE549D9408 /* arena.h */, - 4D75E00B047D89EA15BE5CDEE752D7A0 /* block.cc */, - EBA7E6C2A107483467C6124774CEF75D /* block.h */, - 6EB5D83F05D2269F33466C7DCFCD26A0 /* block_builder.cc */, - 4E856DB50BD68A84A63AE55499872178 /* block_builder.h */, - AA690BDFA65E8C410A82130B3483B82A /* bloom.cc */, - F21172F501A44D23EDDB3AEA5234235C /* builder.cc */, - 673B1B561ACB418F330B4478AE33C9F3 /* builder.h */, - 5D7BD1D203706AD133B003DE154D40AC /* c.cc */, - ED2B093C80BA032660F888C7F81B1D9D /* c.h */, - 81F3FD7983F8C4391CC30B4E7370767E /* cache.cc */, - A3823B10AD6A6B24863EBD4ECE0D691C /* cache.h */, - E4CF0D1BCDD54ABB40EE9AD5F541C198 /* coding.cc */, - 7B7C8165FC40E1432F5EB7EA2782E04B /* coding.h */, - AC1A01D6B0D166DA6AAD158D6264F693 /* comparator.cc */, - 98F196A197AFD44C0C2A0FB7E9BACF4C /* comparator.h */, - BF564EDAEE1DA9A93B72737F09F33227 /* crc32c.cc */, - 91811F71C2FA9265B03192507FD0715D /* crc32c.h */, - 621D483E45E92BE126C17E8261A0E6FA /* db.h */, - 569511E399F07ABE1A4CBB713DF08B7B /* db_impl.cc */, - F86A2D7DF81C3E8869A794D7E0292C97 /* db_impl.h */, - 2601511FCCD0B4CE7A74652349B3779A /* db_iter.cc */, - E3B99A902AB32FA5853427C93DCEA165 /* db_iter.h */, - 8B05621A5EF759E47A44989B0245FC6A /* dbformat.cc */, - 59E7355A640C2063FA68A1828CEF33A8 /* dbformat.h */, - 87AE9B4D3596ECB04407EB93492E47BD /* dumpfile.cc */, - 6581D2C778C2FD723629A78872C61FDC /* dumpfile.h */, - A674C7C09F1C351BFF34B1C8A0910870 /* env.cc */, - 7D6E47B616DE755714427591880125AE /* env.h */, - A2D25B8664C78BB8A4AAAF6FA3EF21AB /* env_posix.cc */, - B62F2EFD836B0B4D141B7D3B7A76D1C8 /* env_posix_test_helper.h */, - 083D3597C0190CB5D637CC9EE15579C8 /* env_windows_test_helper.h */, - 784C73A1380FA3D7D7A731214DE53A13 /* export.h */, - 5B797E52A5E7D33056211AE0FE28030B /* filename.cc */, - 1942EA14A957EE8A1FD53150BCF5FC1E /* filename.h */, - 2B470A9772DB8914D65302D7E669FDAF /* filter_block.cc */, - 27F81C53060A8621A2223C2F50CD241B /* filter_block.h */, - C659D2D4B99C8CDA79646FE859D2696A /* filter_policy.cc */, - 3FDA53CDBFCA82B7F7184B44BC7FBC7C /* filter_policy.h */, - 338E9E4797BEAD2FFF893017AB97CC8B /* format.cc */, - 72EB4F6047A67ABF94B6F8BA86D2D234 /* format.h */, - FBA2C6C1EE48B9B639ED048474EB4157 /* hash.cc */, - 8DB35C5A4E090537BCD1F8382ACCD601 /* hash.h */, - E21CC05454593B859E1DD97BECD0AF1C /* histogram.cc */, - 9A971A378B109444D68EC9F1710744D4 /* histogram.h */, - 3C38FD08C4002E8A3E088547DD0523ED /* iterator.cc */, - 46440B55B39BD26A9DF8DBAD2638BB2F /* iterator.h */, - BE1A8F7A905D09BE7EB82BBFF174EE78 /* iterator_wrapper.h */, - 4321B4C224765D94C7503E3C6431F9B9 /* log_format.h */, - 96B97BCFDFB29A395ECEFEEE53D89889 /* log_reader.cc */, - 40FE1C2937524054AB15B3A3F4272345 /* log_reader.h */, - 2A0B383E88DBB23E8139375596467FAC /* log_writer.cc */, - 2E86539022322DD1F5296F3214CEC49E /* log_writer.h */, - E0B7CD0C231C6586963B625078141F9B /* logging.cc */, - 635E69A93F16B99D33B27A6452B14DC5 /* logging.h */, - FD83A1F8DD099D0395534007C8A5EA71 /* memtable.cc */, - 76A86C67D20E7FD637F775A4E9F95B51 /* memtable.h */, - 3455A08B816E9633E67F45031FC9F6CD /* merger.cc */, - 83AC43378C350989A6B691A3B81051E5 /* merger.h */, - 8BC4618A1AB60D74C5C3EE23BEC70362 /* mutexlock.h */, - BB2662A73E4AB039897681B4F9987F6A /* no_destructor.h */, - 1248B00EF3BE8EB5FDF7E92EE8995ABF /* options.cc */, - F8A34FFCCCD318ED0E09E4B62FAF6EA8 /* options.h */, - BBCAFB9BB21E3ACB769B48A3B1C75463 /* port.h */, - 4781B46372655A8914D2F3F4F92B66A8 /* port_example.h */, - 2902A4C38873FCFF5786F23795F66406 /* port_stdcxx.h */, - 674C8CF50302A87EC7519C90AF0C6F61 /* posix_logger.h */, - 98B5D3DAE49B0B1F304E5AAF9095F733 /* random.h */, - 8F89CFE3165AF36055F7014246855162 /* repair.cc */, - 15DFFF5A3D3D914F480B877952EFAFBD /* skiplist.h */, - F13DF5348224F0D6CBA0689639782254 /* slice.h */, - D25C535A0ED2942C4E794B83583D12CD /* snapshot.h */, - 58308FFBBA52F24C69542503039DE365 /* status.cc */, - 27B04C54C4F176938DD4A50E3DAD384D /* status.h */, - 794FB584900DC2C9932AC53A681FF10C /* table.cc */, - 35CE8D2A98B792BEEDD0D72E89B33BAD /* table.h */, - 34621C372310B419B41B61763C42149F /* table_builder.cc */, - B93B0CDE62D8C9C5FE9C7139B4C0867E /* table_builder.h */, - 60FDC5A59E02334D7C8B34614969FCAA /* table_cache.cc */, - 2FE487E9D169B1987ED50BF7CA45AB85 /* table_cache.h */, - 9C997CFFE0B0EB3DB9D6ADAF73854B4E /* testharness.cc */, - B25E09C5A052F1C3A6AE26E97F071ED2 /* testharness.h */, - 95728A376DED6052F25B119402483838 /* testutil.h */, - BAE3B72678AB5BFDAF8CA9B8BB4477B6 /* thread_annotations.h */, - 99C96C3B40C51D1D79FC28DC8197EB3C /* two_level_iterator.cc */, - 3F3A37BF930274FDB2AF3C64E5BA6C63 /* two_level_iterator.h */, - E8DE921A3AADBF970D703992669E82E0 /* version_edit.cc */, - C24A10EC10F9B315031342CB463C1F89 /* version_edit.h */, - 2FB3B6224E0EA157E5E5C71782ADA330 /* version_set.cc */, - F907DDF83A30F1299472C033320155FC /* version_set.h */, - 3D339BC8AB099B5E05C88DAA77FBD0DF /* windows_logger.h */, - 31965476AB0C9A0CA09E0AC2D405690B /* write_batch.cc */, - 3C101CA28A87922BFF183FCB605139A6 /* write_batch.h */, - DE08BA4A6C1A53923EC02F9A515107F8 /* write_batch_internal.h */, - CEF4BDF97A3F68AB11FD0F39F6FC818A /* Support Files */, - ); - name = "leveldb-library"; - path = "leveldb-library"; - sourceTree = "<group>"; - }; - 28DC2CE1ADE7CB9A548DB101E5CF8D11 /* Support Files */ = { - isa = PBXGroup; - children = ( - F7A2885FF922A7315C564CF997DC7503 /* FirebaseDatabase.modulemap */, - E090AC85D60368344DE2CF202EDFBFE3 /* FirebaseDatabase-dummy.m */, - 37C3A94692642015055302CE6D458CCE /* FirebaseDatabase-Info.plist */, - BA39E2C48027666F9469709D4DC983B4 /* FirebaseDatabase-umbrella.h */, - 6D9B952974F6B3F89F6399C831D99CC2 /* FirebaseDatabase.debug.xcconfig */, - 587ECC487233834DCC0BDFB400FD82FE /* FirebaseDatabase.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/FirebaseDatabase"; - sourceTree = "<group>"; - }; - 2A95F72240D94B812814C6F95A1C4E74 /* Products */ = { - isa = PBXGroup; - children = ( - 3347A1AB6546F0A3977529B8F199DC41 /* FBLPromises.framework */, - E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore.framework */, - 8CC9178C366942FD6FF6A115604EAD58 /* FirebaseCoreDiagnostics.framework */, - 51671C73F008B5C0C3751B3855999213 /* FirebaseDatabase.framework */, - 856B5CD56F194FAD26EA91620B66D614 /* GoogleDataTransport.framework */, - 6942351307BC1F54575D9853307EAE0E /* GoogleDataTransportCCTSupport.framework */, - B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities.framework */, - 0A9F46A999C47653013D3AD854352507 /* leveldb.framework */, - 06FC5C9CF96D60C50FCD47D339C91951 /* nanopb.framework */, - 17A5FB2BB510D58010F5154CE559C2C3 /* Pods_openTok.framework */, - ); - name = Products; - sourceTree = "<group>"; - }; - 2D7219444627D2D5238868A4CCD5704D /* Frameworks */ = { - isa = PBXGroup; - children = ( - 62020A4F2BCB9E86DA99881A00474E3F /* FBLPromises.framework */, - 901C6573DC7352F89FD5AC0EC3EA7C88 /* iOS */, - ); - name = Frameworks; - sourceTree = "<group>"; - }; - 388C5FB09807DDDA166121B8CF8F7961 /* Support Files */ = { - isa = PBXGroup; - children = ( - 5151B4B90DF95DFF56C5C5AC51E5B2F1 /* GoogleDataTransportCCTSupport.modulemap */, - 9AB3707E44CE0D64C47BB82321FE3BD4 /* GoogleDataTransportCCTSupport-dummy.m */, - 0B3E8D29A38AED64881329262599A505 /* GoogleDataTransportCCTSupport-Info.plist */, - 4A10A4C81C220281B540EA7061D36321 /* GoogleDataTransportCCTSupport-umbrella.h */, - 3E54B1318AB1AA3CC7468878C8B0C39E /* GoogleDataTransportCCTSupport.debug.xcconfig */, - 25F19CE11FB446E8B2C37D3F9C3B1BFC /* GoogleDataTransportCCTSupport.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/GoogleDataTransportCCTSupport"; - sourceTree = "<group>"; - }; - 40C69A44B1557415FA9F57EE5FB199F4 /* Firebase */ = { - isa = PBXGroup; - children = ( - C92BEB878EA261B63A3FE8C6F070519D /* CoreOnly */, - 87D0DDB613352CCCCBF092FE5653A0E6 /* Support Files */, - ); - name = Firebase; - path = Firebase; - sourceTree = "<group>"; - }; - 4750F567B1A83B07A3BF48753AA7299F /* GoogleDataTransport */ = { - isa = PBXGroup; - children = ( - BBE58D8C7B4DF5B650E6528061BAF00C /* GDTCORAssert.h */, - 94828B387C56139BACCCEDC781E42B5B /* GDTCORAssert.m */, - 695B08F258794D8BA0F5ADA821C842AA /* GDTCORClock.h */, - 78AE048F46E327022930DDCA71CF3271 /* GDTCORClock.m */, - CAD6EEF839E19AE78EB0C9FF88CBECE2 /* GDTCORConsoleLogger.h */, - 3096846386F3836A75FB794288AA257E /* GDTCORConsoleLogger.m */, - 6A37D0DC62ADF6DFECBB8C229F50AF93 /* GDTCORDataFuture.h */, - 23DF0DDD2310CC408B1DBE663F9C3CAA /* GDTCORDataFuture.m */, - 2C3685222F5D9D2662CE36EF1DF7D307 /* GDTCOREvent.h */, - 1F616D4FBC71458933254CDA110C11CA /* GDTCOREvent.m */, - F24B2FE999A991B0FB72A88254F127A9 /* GDTCOREvent_Private.h */, - D212664CA6B122A499E6AAE0259F5F5D /* GDTCOREventDataObject.h */, - F3082C73B86C39432F3BEE1DB2F53924 /* GDTCOREventTransformer.h */, - C10C6020EDDB2016BD64181B672CBC2C /* GDTCORFlatFileStorage.h */, - 5AF9DE0337F8113B726962277B249DA5 /* GDTCORFlatFileStorage.m */, - B4600FE4208AE3E5795D8EBB5F97A617 /* GDTCORLifecycle.h */, - 0EF03490A41396D7B4FB796D16239538 /* GDTCORLifecycle.m */, - 3F89EABDE73772529AA4D1632A76AB10 /* GDTCORPlatform.h */, - B2A6FBBC1582B73F699D2622665AD418 /* GDTCORPlatform.m */, - 6A9D85795C3AB0FC818197A64F6ADC1F /* GDTCORPrioritizer.h */, - 823E7E73D27229EF57D62A2C3C62E62C /* GDTCORReachability.h */, - 3B32762245BBA7D25AC72093BF9D75E6 /* GDTCORReachability.m */, - CA6848D4B1055686D25D93DF40B2C915 /* GDTCORReachability_Private.h */, - A908DAA989BEA273B10D102D558F47FD /* GDTCORRegistrar.h */, - F4DC65C04D076732C25AE29A2908DF95 /* GDTCORRegistrar.m */, - D9C044CDB58F661488097BB87AF131F0 /* GDTCORRegistrar_Private.h */, - 94B46AAE0848AD9B3F922BBB8DA40DC5 /* GDTCORStorageProtocol.h */, - 1313113294676D69BB1A6FB6FC2AC8D9 /* GDTCORTargets.h */, - 0BAC11B5BD73140CC06EBFFB33C6E3E4 /* GDTCORTransformer.h */, - 1B54F40D4D8961A88689128664F1E34C /* GDTCORTransformer.m */, - 088E9D65F0C3C763F8B1466BDCCEAEED /* GDTCORTransformer_Private.h */, - 674391F19F12A6728205D726D39B24BC /* GDTCORTransport.h */, - 90D45AEDE9F7AD08010F5EE9B389652E /* GDTCORTransport.m */, - 57FEBC63E8E55E8C1B6847CAEDE77959 /* GDTCORTransport_Private.h */, - A0CDEC73746A123B250DF34810E0C957 /* GDTCORUploadCoordinator.h */, - 057F550138403A0C7FD68032C21A0E20 /* GDTCORUploadCoordinator.m */, - 4B04B5BCD905ACB2C2079AFD75AB6597 /* GDTCORUploader.h */, - EC794BDF881104077CA6D858C004F116 /* GDTCORUploadPackage.h */, - 64705E8D19B8D928285A3720DB0206AE /* GDTCORUploadPackage.m */, - 428B977BF39D31F8F69EF02D8F825E96 /* GDTCORUploadPackage_Private.h */, - 70515A5CBED5171BEE1A7FD8B06C8338 /* GoogleDataTransport.h */, - ABFF73A025C87B0FA649525A4C415222 /* Support Files */, - ); - name = GoogleDataTransport; - path = GoogleDataTransport; - sourceTree = "<group>"; - }; - 5DA437DAF035B2E772BC1AE4E1506CF1 /* nanopb */ = { - isa = PBXGroup; - children = ( - 31E464D7B81E4278F8FB81146755F379 /* pb.h */, - DF3E939FA895E12649FDF094D1D8DC7D /* pb_common.c */, - 37991EF098780E2D9FBD3B42EA8175D3 /* pb_common.h */, - 3DE1D8D85EC90A32E28154D880378587 /* pb_decode.c */, - 941ACF372F977D2EFD95A9310219B60A /* pb_decode.h */, - C443A630A1668A448ECF8A09F457DEFA /* pb_encode.c */, - 541C1635CF2ACAB31B12B3FD9367089D /* pb_encode.h */, - B47ED0E63DA98525AF50E7EDD3D4ACFF /* decode */, - FC0E1F21ECE4473409254E531F75BC91 /* encode */, - 7F88036529DCEC6C37CF5D9F36F2875B /* Support Files */, - ); - name = nanopb; - path = nanopb; - sourceTree = "<group>"; - }; - 61C4012B92C92E604D92F4DD2F5639D7 /* PromisesObjC */ = { - isa = PBXGroup; - children = ( - 87A11B9808FEF3BD00DEAAF8F1F7A1E8 /* FBLPromise.h */, - 4860AAD628A98E1A707FF827FF3AF9E9 /* FBLPromise.m */, - 29BD25E1380AF136F830D5ADC46CB53E /* FBLPromise+All.h */, - BB0D2688C1F6E5C119D27FA7EB2A6087 /* FBLPromise+All.m */, - F8FDB31CF6B1C1358EE35ADE19844DC7 /* FBLPromise+Always.h */, - 3D7B530E73F5DDD639F32EA9C53A45C2 /* FBLPromise+Always.m */, - 0E8161CED1C17230153CB59CBAA2ABA9 /* FBLPromise+Any.h */, - 85F1AE2EBEC3ACE6F7F8518590D0F6A2 /* FBLPromise+Any.m */, - 0E5714B2DDE9933EA30C49F766B5E69A /* FBLPromise+Async.h */, - 77C1062B06298DDB3CE7B3ADE0C5DE14 /* FBLPromise+Async.m */, - 072544F03E5AE2F64EF237E82D81D545 /* FBLPromise+Await.h */, - 1891D121FC2FBC6537BC90D17D133401 /* FBLPromise+Await.m */, - 9258D0107323650D356F6D0323D79CC3 /* FBLPromise+Catch.h */, - EE5C51CE831C623408DB778C1ABA0148 /* FBLPromise+Catch.m */, - F28A8199104EC2C984FA676FED6D9FBF /* FBLPromise+Delay.h */, - CE06D2F80F632B8CC85AEB98C01748F7 /* FBLPromise+Delay.m */, - B299C026C8827C5F992F488CCBA2D192 /* FBLPromise+Do.h */, - 67AA07E8EC09CCB7FE04406017A4C519 /* FBLPromise+Do.m */, - 9DC5B45B4B2D0DC0AE3FB7A75E08649A /* FBLPromise+Race.h */, - 4421DDED849BD83DC71031CD3143C0DD /* FBLPromise+Race.m */, - 7610135E50DA4D208AF3E88330FCBDC1 /* FBLPromise+Recover.h */, - FA32E456E1C52FF9AC73AE5949A43B5E /* FBLPromise+Recover.m */, - ED14BCF081A83EBB8A978CDDD5E13ADD /* FBLPromise+Reduce.h */, - A11AE0A92B88FC456F083B131B991F1A /* FBLPromise+Reduce.m */, - D2A24B05955F1EE99EBC76E88971F2D8 /* FBLPromise+Retry.h */, - 744466560FAD76B6239D54402C0C52DC /* FBLPromise+Retry.m */, - 98FC3E75806D347BDE1998F9D6F7924D /* FBLPromise+Testing.h */, - C5878F2A6B4FDCC6F17613A13676081E /* FBLPromise+Testing.m */, - 272A06E4DFA111E0A5504FF347BBF984 /* FBLPromise+Then.h */, - 922204FA6D1655751812D541250FEA72 /* FBLPromise+Then.m */, - F8B8FAE3380266FF581E5704B032BC1D /* FBLPromise+Timeout.h */, - AD6117C150F7C9AEC846B49F6EAA9BAF /* FBLPromise+Timeout.m */, - 5F0C162A1408DFD87160990CD1C5B5FE /* FBLPromise+Validate.h */, - 1ADE589487EE027BD9C1EBD727FC2E9E /* FBLPromise+Validate.m */, - 82BD2B064A081DE7FB1B130EDCAAA263 /* FBLPromise+Wrap.h */, - 50625C3A47D2BE9C9BD6151D17714D80 /* FBLPromise+Wrap.m */, - 33D40A09F8C5975F8B550A0483033801 /* FBLPromiseError.h */, - 0496F85216D9C79A563C82C7CDB45620 /* FBLPromiseError.m */, - 83AD72E6FF9339276439BA4350ABDA13 /* FBLPromisePrivate.h */, - 60129F2C1744E4C6A0B45D363AEEF0FD /* FBLPromises.h */, - 08FCE314B2BEFDBD429FDE4BAA06FB80 /* Support Files */, - ); - name = PromisesObjC; - path = PromisesObjC; - sourceTree = "<group>"; - }; - 6ECE8D03379F08D25D8C811D33C5B4C5 /* GoogleUtilities */ = { - isa = PBXGroup; - children = ( - C8FD4308F0FB96CCA4A83437B052AD3D /* Environment */, - 14A5A8D41905FA5E4A0C0A5BFAB417B0 /* Logger */, - 787B78FE0DFF84C33C5F4082383111D6 /* Support Files */, - ); - name = GoogleUtilities; - path = GoogleUtilities; - sourceTree = "<group>"; - }; - 734DDD76806A8BB7989DEC328634F270 /* Targets Support Files */ = { - isa = PBXGroup; - children = ( - 106133EDDEB417663076A59D4FFAD214 /* Pods-openTok */, - ); - name = "Targets Support Files"; - sourceTree = "<group>"; - }; - 787B78FE0DFF84C33C5F4082383111D6 /* Support Files */ = { - isa = PBXGroup; - children = ( - A3735655FE85A76B2A9B4658B9E1D579 /* GoogleUtilities.modulemap */, - C6D8EEB350A4ECED82D557A3EAB5AA77 /* GoogleUtilities-dummy.m */, - 3E80C7D2190CFBE7BF524863C6D694D7 /* GoogleUtilities-Info.plist */, - 578B57E50EDBE961E26365AC7EB47A31 /* GoogleUtilities-prefix.pch */, - 23C1A4E1F44845DC103D917C703A455A /* GoogleUtilities-umbrella.h */, - C26746AB2A5D53AF8402A1B015403633 /* GoogleUtilities.debug.xcconfig */, - 7E58E1A27F0803C11F2250F1DCEC0741 /* GoogleUtilities.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/GoogleUtilities"; - sourceTree = "<group>"; - }; - 7D921290F3FEF47501F3B36519940850 /* GoogleDataTransportCCTSupport */ = { - isa = PBXGroup; - children = ( - E9558FB6E3417EEB6ACC4BAC9665F3A6 /* cct.nanopb.c */, - 612393A8C0D0B02C9ADA7AB38EC11ED1 /* cct.nanopb.h */, - D3B07B31DDBEA3C5582D124B8D3B6443 /* GDTCCTCompressionHelper.h */, - 3E7DD82D268001C64258EB45BA0470F2 /* GDTCCTCompressionHelper.m */, - E3E8EF9776569DF1C4FBACF2A05C6984 /* GDTCCTNanopbHelpers.h */, - 080B6ED2BE515044B2F811627F849632 /* GDTCCTNanopbHelpers.m */, - 3E328AFED73206DE3C41B2F236188BAA /* GDTCCTPrioritizer.h */, - 196DCB453BE1CEE606A4656ED3F3DCBB /* GDTCCTPrioritizer.m */, - 0AC4A9BC66B8D2CD0D2CB7874781F3E5 /* GDTCCTUploader.h */, - 58570F7234627794C4BF02928884354A /* GDTCCTUploader.m */, - 393AE47449FD921FAD26AC79342F7367 /* GDTCOREvent+NetworkConnectionInfo.h */, - 12F7E2F7B784439C5476A1EF8BD49AF0 /* GDTCOREvent+NetworkConnectionInfo.m */, - 388C5FB09807DDDA166121B8CF8F7961 /* Support Files */, - ); - name = GoogleDataTransportCCTSupport; - path = GoogleDataTransportCCTSupport; - sourceTree = "<group>"; - }; - 7F88036529DCEC6C37CF5D9F36F2875B /* Support Files */ = { - isa = PBXGroup; - children = ( - 04F745AE9D062907C9D1CDD8FCCA4A43 /* nanopb.modulemap */, - 12AD2385ABCEF551C7DB322A63BDA8B6 /* nanopb-dummy.m */, - 51E90B1F65C14253EDC9375768CCD83C /* nanopb-Info.plist */, - 0C6CB77E47E775AC8AC2B8FE8C3C1874 /* nanopb-prefix.pch */, - DBD5F0D6D5607CCC279F0AA16086D019 /* nanopb-umbrella.h */, - 5CE08AC03F18A07FFDE865B02C63441E /* nanopb.debug.xcconfig */, - 70C80FE5FEC8E37CDC7A3FECCC392C9C /* nanopb.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/nanopb"; - sourceTree = "<group>"; - }; - 80A0FF1F0D09427F7B4E660E38EBF3BA /* Support Files */ = { - isa = PBXGroup; - children = ( - 6AFC8703934BB1696C9104DD93F8811C /* FirebaseAuthInterop.debug.xcconfig */, - 41FD95F75B109D21E5C0FF3B47B92CEA /* FirebaseAuthInterop.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/FirebaseAuthInterop"; - sourceTree = "<group>"; - }; - 85B110C7B614BAAC33765E8011E188F9 /* FirebaseDatabase */ = { - isa = PBXGroup; - children = ( - 90316C54AEDD432C7EDDA954D02A16E0 /* APLevelDB.h */, - 575EF3111261A829259FBDB6C19F8205 /* APLevelDB.mm */, - 5B65DAC962609F2CA5CAF579C31133A7 /* FAckUserWrite.h */, - BACDC3D5A2E777358D664B3A45214F03 /* FAckUserWrite.m */, - 77C24E7828CDD9A00B0A92ECEB5CFDB0 /* FArraySortedDictionary.h */, - 8FB6A055AAC08E126DD875D10F1681BE /* FArraySortedDictionary.m */, - 76009627450555684FFB602D5CDB66C8 /* FAtomicNumber.h */, - 1135C43506403E886D86BDFF9D1CC4A5 /* FAtomicNumber.m */, - 0BD62334D7DD704E7183CB5CD05D5FEF /* FAuthTokenProvider.h */, - 44BF5A2F11832E18FAA9160A4734E51B /* FAuthTokenProvider.m */, - C83F672C79ADC28FEFB9E4671207B48F /* fbase64.c */, - AEF3F09834AB87411FD7F6AF1067B39D /* fbase64.h */, - 8BD8AF5861BD6D8277CCB8D46458CE6F /* FCacheNode.h */, - EC6B40288A57CC407F022CB43E26AAF1 /* FCacheNode.m */, - 4CB725B760590589CCA74355CA795432 /* FCachePolicy.h */, - 2AF11CCF6B730B0458E39354C36DB72A /* FCachePolicy.m */, - 3BAE9DB2B881172814343BCA44C7BC98 /* FCancelEvent.h */, - 52176DC15D315EAA2CE7CAE7871EF263 /* FCancelEvent.m */, - 68B02E7BEB2979723066B27907E0A636 /* FChange.h */, - 79E2BF71AE254982334583E815969709 /* FChange.m */, - DBB2A2E28ED4F674F6370BD3D6B4AB5A /* FChildChangeAccumulator.h */, - 543616AED705E736331D7BF0C4810E1F /* FChildChangeAccumulator.m */, - 7919424CA56B24B6F497FCB11FF6DB93 /* FChildEventRegistration.h */, - BE2B0C81910979BDBCB280D64692E5BF /* FChildEventRegistration.m */, - 3C86C564F525877739284E8120ACBE75 /* FChildrenNode.h */, - D14605E2B290BBFBCFE713BA4B20BA76 /* FChildrenNode.m */, - 3EA2D82B72EC58BCC44AD8106CB4E716 /* FClock.h */, - E37B33D6D220B28F622B08C2BA4A4DC6 /* FClock.m */, - 9E7B43761161E27D4FB4903970D91F4F /* FCompleteChildSource.h */, - 2FD56C3309CCD46F670D5CC2DEA4B8F6 /* FCompoundHash.h */, - 88B434AB00179B49FC2340C88AA79645 /* FCompoundHash.m */, - 65A2EA4B48BA25E5F852CFA3518CEAC9 /* FCompoundWrite.h */, - AD39F1091B89CC90EB47C76A7740E528 /* FCompoundWrite.m */, - 99E6B34EBA0A767EED9DFC5E58B87DF5 /* FConnection.h */, - 39A3D499C991661974D88771D65ED755 /* FConnection.m */, - 1648A0F596A5947A31091A8D2A3F2DD5 /* FConstants.h */, - 916D739034B004E106182204228D42C0 /* FConstants.m */, - A314FA39C00A05F50CD19B20BE48E0EE /* FDataEvent.h */, - 36E86F31E1010E4369DFD5A8B2C46D99 /* FDataEvent.m */, - 1BBD1F80252B16388D8A2E0DC2FC7D9E /* FEmptyNode.h */, - CD158462CD76FEB1BCB0075BEED53C2A /* FEmptyNode.m */, - 102352296297C117CC7869815C0B18C2 /* FEvent.h */, - 21EDE18558B70D38E006596E26788D36 /* FEventEmitter.h */, - 24AD25CF950ACF35024D9FAC762DD3A3 /* FEventEmitter.m */, - FA47D62FD3660036076067B875D655A9 /* FEventGenerator.h */, - F26C357D95872C344F908100D46E5153 /* FEventGenerator.m */, - 39587D5ABC154C593C4C834BD6058580 /* FEventRaiser.h */, - 6C35F58B895845211A8017AAC391E1B7 /* FEventRaiser.m */, - D9A699DB734FC836C80F34584A4A6781 /* FEventRegistration.h */, - 7054A55E885CFA0B88E9B303F1CA6A8D /* FImmutableSortedDictionary.h */, - CA283EA1FDCDD01C444F2DFCB23D0B41 /* FImmutableSortedDictionary.m */, - 361D5CC60A972E92E4E30CAE036573B2 /* FImmutableSortedSet.h */, - 0D5A4DB629B5B17E2F7AB448096A4572 /* FImmutableSortedSet.m */, - A1B575D60903423A2B9984866581EC10 /* FImmutableTree.h */, - 5D57A1F107BF9AB8D7F78C220FD7D3FE /* FImmutableTree.m */, - A0C2CA4BE08826E478724D7FBB8A6D94 /* FIndex.h */, - CBF9637B074AD29A17C37F3502AF829A /* FIndex.m */, - 6EBB17129E01D8CF54893F948D47D963 /* FIndexedFilter.h */, - D7C3CEC573454AA3BE96772D20CBD14F /* FIndexedFilter.m */, - 18E5CB0D0571E1527E8DCD0C6A5690A7 /* FIndexedNode.h */, - A1B705F633CD48849AE76995D60F22F5 /* FIndexedNode.m */, - FD7581EECCCABA4BECF7F34AA2731B64 /* FIRDatabase.h */, - 30D3A7460028A9EA81EADFC2C2A322F8 /* FIRDatabase.m */, - 39B71F3A4C20F71B0FA8620190D0629E /* FIRDatabase_Private.h */, - 6B4F0813AD0FE6A019D69BEE02FE48B2 /* FIRDatabaseComponent.h */, - 54EDB5C773BAC4698020342F0696F390 /* FIRDatabaseComponent.m */, - 151EDA5ED0508649DD81C32BBAB5B133 /* FIRDatabaseConfig.h */, - B1AEACA1BDF2D31AC8B5E8D8883CD1CA /* FIRDatabaseConfig.m */, - 955193171396A5F7FDA4F76ECCAEAC78 /* FIRDatabaseConfig_Private.h */, - 50F19DE27755B2D81E7D4874D093FB38 /* FIRDatabaseQuery.h */, - F229899516D0622E81CAD20651193F00 /* FIRDatabaseQuery.m */, - 6CC2D13BD17F41391BB88C73E58BDA77 /* FIRDatabaseQuery_Private.h */, - 6FBAE93D87DDDF2F1354A512B9055879 /* FIRDatabaseReference.h */, - 8A4EB59A5D57265DCE22DAF6B0F62EC4 /* FIRDatabaseReference.m */, - 052D1A59D81CF3189CCE9443B2F2ADE7 /* FIRDatabaseReference_Private.h */, - D6870577D6F4991A666E6914A2F487A4 /* FIRDataEventType.h */, - 3AC6719935B3430DE4E11C520944D8BF /* FIRDataSnapshot.h */, - 7B9509605188658AC6DAEB774F27217B /* FIRDataSnapshot.m */, - C1138211F92A15BC81CD2389748F9E8B /* FIRDataSnapshot_Private.h */, - 148C3A198D5DEC1D04F9AC25F9963A0F /* FirebaseDatabase.h */, - 1A2A620A27AF95651BEB93E9CE562A04 /* FIRMutableData.h */, - 09306EA07C5E6C3D3EB420111146C811 /* FIRMutableData.m */, - 902E6002602A44EB342BBC2142E66B0D /* FIRMutableData_Private.h */, - 6F2ED88980ADD02F9CD95D5F802803F1 /* FIRNoopAuthTokenProvider.h */, - 6C25234BF51BE9602848231B7842472C /* FIRNoopAuthTokenProvider.m */, - 3FE1ACAC1C23FF4E29B8821ADC8ED85F /* FIRRetryHelper.h */, - B33DBADEF735E61DC443B9753E707E98 /* FIRRetryHelper.m */, - 991856E8769D32D7006FE848E3EB873D /* FIRServerValue.h */, - A551638736E976C6F89390DB407C4331 /* FIRServerValue.m */, - 39E847F87FE098403E173AF071476BF0 /* FIRTransactionResult.h */, - 0B51796ECD501253EDB5FCF8F42BCF07 /* FIRTransactionResult.m */, - EA42623F573679F9A5B044DF94A4DDA6 /* FIRTransactionResult_Private.h */, - F42C7C268617DB7675F42B8B5E5495AA /* FKeepSyncedEventRegistration.h */, - EBAA464D5B2F65ED6BE6FB25E8A135C5 /* FKeepSyncedEventRegistration.m */, - A8DA6D09CA5BA0ADBB362152B7846961 /* FKeyIndex.h */, - FE5998250B73CE8F1C7FC072542E79C7 /* FKeyIndex.m */, - 0541259BE7A9475648BF4DC718F6F409 /* FLeafNode.h */, - DA1705E3E3B1D427074C708CE40F9CAC /* FLeafNode.m */, - 61CCE79B8780E931635E80307FA09EE6 /* FLevelDBStorageEngine.h */, - 37FBC87BF2448D86A7BDADF009B9803B /* FLevelDBStorageEngine.m */, - 301EA1964717D61EA78FF69CC56657C3 /* FLimitedFilter.h */, - 20A93D898B3FF479357C52053210F552 /* FLimitedFilter.m */, - DD34FF93A6587C0B4E47FFD49CA5445E /* FListenComplete.h */, - 1823A9ACE2C8152C1B82264C89EE7A22 /* FListenComplete.m */, - F34FEBEB586D8DDC4CE36905BFC79C9B /* FListenProvider.h */, - 066378BC5E55BCFB87BFFC5EDAFA4B99 /* FListenProvider.m */, - 4BD6ADA3108223D06CC45B5E4D709C49 /* FLLRBEmptyNode.h */, - 8BE48E3EE3333BF5E2BE4F1CD5787E3D /* FLLRBEmptyNode.m */, - 57D93D85D4F115B046E9F4E297055F80 /* FLLRBNode.h */, - 8F623F7FBC6EF232A1F47AACADC4C561 /* FLLRBValueNode.h */, - 70E9D5DB507166468AF0FA89B51E2176 /* FLLRBValueNode.m */, - C295B47E516F633178D34FA8303E944A /* FMaxNode.h */, - CAD98370F606C47C0E85A961278677BC /* FMaxNode.m */, - 95EDE74C6DE1F87EE3663A0AD366B7B5 /* FMerge.h */, - B781D7A58A91FBED1BE497CD9B527741 /* FMerge.m */, - 097A95430769429A66795E9E6AC6450A /* FNamedNode.h */, - 1A2422E97EFCFEA1741CB84A57211468 /* FNamedNode.m */, - E1FC5A36113AB7A7F53F63FA047F3B95 /* FNextPushId.h */, - E58F4E0A35AE5270A10F0B182C0CBC9E /* FNextPushId.m */, - DF9EDE9DB2CF0517FF04BC31DCAEC0FE /* FNode.h */, - DFDD92BA3AA85D306208B74066AA26E9 /* FNodeFilter.h */, - 52183C4DFF461846157BB45716C61701 /* FOperation.h */, - 193284F73773846AA3A34879EC56EF86 /* FOperationSource.h */, - A3DD7543FF2C526CD999ADA8530ED5EA /* FOperationSource.m */, - 68949119150AE37E2185C8D318D06060 /* FOverwrite.h */, - BD9507903A6A4787A9BCB8293A9F3826 /* FOverwrite.m */, - F0534E9B7F9A2AC947BBFFCC17B73753 /* FParsedUrl.h */, - 838FEFECD8DD58DE24E9A5A672A11E81 /* FParsedUrl.m */, - 860B744356EA183E469CA636F94AEB50 /* FPath.h */, - 43744D2FF04A8F6E07656E852E3190B2 /* FPath.m */, - B338B2C9808C5C0AF778CD7DADCE1AE8 /* FPathIndex.h */, - C08F5263A7EA97B8AD1A8772345B4295 /* FPathIndex.m */, - 460A5884CBCEBDCCDD70D08A0D2EE516 /* FPendingPut.h */, - FA42256409F6AE11E423BC2D052A2AB3 /* FPendingPut.m */, - DF67693BB6E8BFC4254953D2178F5408 /* FPersistenceManager.h */, - 11E7D6789B496C8DAF72B8FF1F569778 /* FPersistenceManager.m */, - E2B8A272C8F2DE84AE5BEE68D7C5A30F /* FPersistentConnection.h */, - CB4A191F4483E65DD757ECF72435553C /* FPersistentConnection.m */, - 25581B666C44E4E2526DFBDCAF320168 /* FPriorityIndex.h */, - B33A7C7D5DA6BCED7A54588D8B519573 /* FPriorityIndex.m */, - 45586F5816585DB8B45FE1C976525A1C /* FPruneForest.h */, - B5129F030E10972C371924DB4DCFA600 /* FPruneForest.m */, - F47CA6F1F12ACAF9B0755A517EEF8774 /* FQueryParams.h */, - 43C180B98E9AA37DFE45416D2E782F89 /* FQueryParams.m */, - 25DCDEF8A7F32E0E3701AD90BC946FDD /* FQuerySpec.h */, - 2EB182B0C82CC8AEF45E12CE2FE0023A /* FQuerySpec.m */, - ACA4F24A74FE27CDF4351A7341029FC3 /* FRangedFilter.h */, - 1EF34E159FC9FB47A99C6BA51BBFA12D /* FRangedFilter.m */, - 80AE48D6611499F9E4910CA9F46D2191 /* FRangeMerge.h */, - 3E711BF9F9249CDACE333119FED50E76 /* FRangeMerge.m */, - D595AE273F09F91E6ECCB09DDE4BE1CA /* FRepo.h */, - E0EBF5A75E65BAB478184C63E9D29E55 /* FRepo.m */, - E17B23410BF812634C8DD594B2392929 /* FRepo_Private.h */, - F9B57561D347F59214C52B97CB5421A8 /* FRepoInfo.h */, - DB9220001C09A1747358192EC9ED2C84 /* FRepoInfo.m */, - 98859E9B4B250386DEDD7C85EB0716D8 /* FRepoManager.h */, - A320AFD4407CF0B2CE66E62B45145BDB /* FRepoManager.m */, - F64C9236D303103F4D3C397C4862BAA9 /* FServerValues.h */, - 32B7228504715C2E4B9E3D0DD3622543 /* FServerValues.m */, - 0180C3C1B654EF6C601C67697BC4EC62 /* FSnapshotHolder.h */, - 35EAD172ED92244F64C80D04A17BDE79 /* FSnapshotHolder.m */, - A720480A68376788BC41CE5196AD1D6D /* FSnapshotUtilities.h */, - C22C5C60494445166C096866D5BC162E /* FSnapshotUtilities.m */, - 19E2FAFAF8471A64BF957711063D1E73 /* FSparseSnapshotTree.h */, - EEFA0E6408C1EE9694F24C8CDD87CC8E /* FSparseSnapshotTree.m */, - 1E1C4E4A64421A0A894E0DDA64147BDD /* FSRWebSocket.h */, - 45EAA633A2105904DF70B93DB59F865A /* FSRWebSocket.m */, - 59F59F63C4615D2ABBA8D3688DE5C1A2 /* FStorageEngine.h */, - 975D7F0C4BD02609E2E89C0BDB223652 /* FStringUtilities.h */, - 56E0BD3190452F623D2588E2959B1C38 /* FStringUtilities.m */, - 11480D63F4E0BD36E1D198F5A9A73FB2 /* FSyncPoint.h */, - 218E7BC1C220924B1D6785CA4C25DC96 /* FSyncPoint.m */, - FC1EFE2DCD55CE417891AFDE45E7C27A /* FSyncTree.h */, - E7C728948CE0F1485BF0F4BAFD54D11C /* FSyncTree.m */, - 378857989CF09BD719CBDF32E1B87FBA /* FTrackedQuery.h */, - D300E695491585B083A58415F81511F1 /* FTrackedQuery.m */, - C3F1EA207BC255E9BA95DB0C99A876B3 /* FTrackedQueryManager.h */, - 8EAA3C6BA44BAFE3C08D2B7B5567778D /* FTrackedQueryManager.m */, - D5D7486A6BEF323ADBAE7A259186E285 /* FTransformedEnumerator.h */, - CD22B20DCEE97C6687C597002DC5BE44 /* FTransformedEnumerator.m */, - E9A9F5F708FDFD0E308F6410820EE811 /* FTree.h */, - F8514701493814AB84C06709B66B8991 /* FTree.m */, - 9AEA59B436FE7C179D1AA762546E52F0 /* FTreeNode.h */, - B52430627E2CEB470F4622858A8480DA /* FTreeNode.m */, - 7114FD0EFDDFA8EFD0B729F54CA0E299 /* FTreeSortedDictionary.h */, - B835A6F7159081070635B80749DFB910 /* FTreeSortedDictionary.m */, - A9D70C09F8DDD9DFB26AC7F97FAB70ED /* FTreeSortedDictionaryEnumerator.h */, - 593FEB0A405089A855F6A178DC382FFF /* FTreeSortedDictionaryEnumerator.m */, - D1E6D1D803B379D5B9D499DC2AEAAD57 /* FTupleBoolBlock.h */, - DE8DDBC684EAB94B117FB431D6983794 /* FTupleBoolBlock.m */, - 5AF6CFF33C19AC6817222406C326E673 /* FTupleCallbackStatus.h */, - 945B168B765E0149A40FCDD1B383D898 /* FTupleCallbackStatus.m */, - 11BE64F7B2DF4B6B01EDEE2BB90359CE /* FTupleFirebase.h */, - BE1FF88442223E72C05A63E1D359C30A /* FTupleFirebase.m */, - 5EFC7D206D5469364E21D58DD4E6C7A8 /* FTupleNodePath.h */, - ABC4D7550679CE90B7A7D2AC9658CD2B /* FTupleNodePath.m */, - CEDB10734368755E95741BEF1CF380C3 /* FTupleObjectNode.h */, - 78CE4FC4674E17E99E511BCA4E3D89E0 /* FTupleObjectNode.m */, - 38A43235156A1459847105BB4F2B300D /* FTupleObjects.h */, - EC267D96A5B075660F91DDA49D90E56C /* FTupleObjects.m */, - 6266F0F67AE31067A90DDC828E91BFB1 /* FTupleOnDisconnect.h */, - D60179BD88EF9A234D60E6EDB1EEA0C5 /* FTupleOnDisconnect.m */, - C2760200A696A747EB2BB8996E5F37C0 /* FTuplePathValue.h */, - 5F69F234C57436B1A1499CE33ED96AAA /* FTuplePathValue.m */, - 08B4449BD6E520A4C1E8BE42FFE7BAA1 /* FTupleRemovedQueriesEvents.h */, - EAEAD2C37A2F7D54EB5D112BE700E464 /* FTupleRemovedQueriesEvents.m */, - FB1BD93373D49F12576A33ADBC3BB1E8 /* FTupleSetIdPath.h */, - E0133CE971C065D957EDE8B9AAF9B36F /* FTupleSetIdPath.m */, - 357108ED8E1BE0FAC53EFE9A522C6D0C /* FTupleStringNode.h */, - 4D6D098D6D2D89BD890B660DDC02B2C5 /* FTupleStringNode.m */, - 37E34EE4B371BB8626B0ECA106A5B8E0 /* FTupleTransaction.h */, - B5182676AC9060524937E8799614DFAC /* FTupleTransaction.m */, - 3CC76FAD8FA0F6D23526A68F7A0EDE8E /* FTupleTSN.h */, - 6041B5E87AC260ED5B0E6C0B42DDA814 /* FTupleTSN.m */, - EAE499B2DF8EBB7143A877BF5CDAEF4E /* FTupleUserCallback.h */, - 3294C1F7B7748B520AFE0A6E3E5FDE30 /* FTupleUserCallback.m */, - F2560D7CA1567608F6BCDCD70881AFB4 /* FTypedefs.h */, - D96FB1E0748CB2643821DE1953901D3B /* FTypedefs_Private.h */, - B423C55EDD8B0EBA1C93A2C48DD3B22B /* FUtilities.h */, - B1A323E1E6BBE609DB73C75EE7791C2C /* FUtilities.m */, - A43C04A3FED5D0538408B186EB5A4FD1 /* FValidation.h */, - 9D049B599CD35B1EBCCFB40378A858E0 /* FValidation.m */, - C36919082934B6801606679F9235BAA5 /* FValueEventRegistration.h */, - FFADC6E448C500341452C5E5C14C8B48 /* FValueEventRegistration.m */, - EB6A33237EFBF55F3A9EBC83F548B03D /* FValueIndex.h */, - 8454AAD8C7BABB4D4FC9DC6D3F1FC788 /* FValueIndex.m */, - 14B5225C335FF4E58484DB38F7D71113 /* FView.h */, - 5E7D64340689B27CEC98862A2A1558BA /* FView.m */, - DC29D06EF9DB0608699CE6668F459127 /* FViewCache.h */, - 7EDEB0636E82100515CA48503A4D022C /* FViewCache.m */, - 3B2312F44AC0B0A5F30BD2D7E4AD31E1 /* FViewProcessor.h */, - 6836B2C094BEE9CCC043393E936B87BE /* FViewProcessor.m */, - 026599AE480DD91768D8F683E59FE6CC /* FViewProcessorResult.h */, - 3BDC69FEF92061A1018272C226777880 /* FViewProcessorResult.m */, - 1B380EF7F940448A641CDF3A87516109 /* FWebSocketConnection.h */, - 30798651CA0BD508AD85DC790BB2D9B1 /* FWebSocketConnection.m */, - 7608FC4EC17E98020B24155456A3AA39 /* FWriteRecord.h */, - A8D9FCB9E6E7263B05452B4A1E52C57B /* FWriteRecord.m */, - 385FA78D355DA5FF4ED09DE6A1AB8057 /* FWriteTree.h */, - 632A2A314E4EBB58C7333F3B1B5FA731 /* FWriteTree.m */, - 2AF24CAB681011F26CE27B6CD0DA5E53 /* FWriteTreeRef.h */, - 2085AB8AA9E4822704336873BF314E65 /* FWriteTreeRef.m */, - 9FFA595A6BC21A8745A22CAC7C9C9678 /* NSData+SRB64Additions.h */, - 36FBDDD8326F0B0C781905C5CF742D68 /* NSData+SRB64Additions.m */, - 28DC2CE1ADE7CB9A548DB101E5CF8D11 /* Support Files */, - ); - name = FirebaseDatabase; - path = FirebaseDatabase; - sourceTree = "<group>"; - }; - 87D0DDB613352CCCCBF092FE5653A0E6 /* Support Files */ = { - isa = PBXGroup; - children = ( - D94F03D0CD3C49BEAAAACD23DB190B70 /* Firebase.debug.xcconfig */, - 24C765C6EE99FAF5BDC49CFE9E15D8A5 /* Firebase.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Firebase"; - sourceTree = "<group>"; - }; - 901C6573DC7352F89FD5AC0EC3EA7C88 /* iOS */ = { - isa = PBXGroup; - children = ( - 6C3C1EB539A57B6F7CBF5F5F61AEC46A /* Foundation.framework */, - ); - name = iOS; - sourceTree = "<group>"; - }; - 90ADE0A91FF96131961B084B8649A310 /* FirebaseAuthInterop */ = { - isa = PBXGroup; - children = ( - 1B004F3F21ACD69E835051891AC01C17 /* FIRAuthInterop.h */, - 80A0FF1F0D09427F7B4E660E38EBF3BA /* Support Files */, - ); - name = FirebaseAuthInterop; - path = FirebaseAuthInterop; - sourceTree = "<group>"; - }; - AA07292FD2905535EE2E39FF9206B8EF /* Support Files */ = { - isa = PBXGroup; - children = ( - 9BC93D2F01BC90BCC406F2269AFF64B1 /* FirebaseCoreDiagnosticsInterop.debug.xcconfig */, - A0D2B9693657353DC78B1C8AA8E503F4 /* FirebaseCoreDiagnosticsInterop.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/FirebaseCoreDiagnosticsInterop"; - sourceTree = "<group>"; - }; - ABFF73A025C87B0FA649525A4C415222 /* Support Files */ = { - isa = PBXGroup; - children = ( - 7DF8ED92CC74E5A76731E6B0F0B23799 /* GoogleDataTransport.modulemap */, - 3275B1466A10C59A57FA855C3AC6DECD /* GoogleDataTransport-dummy.m */, - 875DAAA3905FD883291E5E4ED1AE9052 /* GoogleDataTransport-Info.plist */, - E2A534E083CF2D8F6EC559D6489659F4 /* GoogleDataTransport-umbrella.h */, - 9D85A9AAC775F25C1D9D72DCD09CE492 /* GoogleDataTransport.debug.xcconfig */, - 89813D1225296221B8A1CD2141389CB2 /* GoogleDataTransport.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/GoogleDataTransport"; - sourceTree = "<group>"; - }; - B47ED0E63DA98525AF50E7EDD3D4ACFF /* decode */ = { - isa = PBXGroup; - children = ( - ); - name = decode; - sourceTree = "<group>"; - }; - C8FD4308F0FB96CCA4A83437B052AD3D /* Environment */ = { - isa = PBXGroup; - children = ( - FB1CF18DE410CAADC9B10DDD72B0B536 /* GULAppEnvironmentUtil.h */, - 95D786CDC75102E908AC12A8FCEC111A /* GULAppEnvironmentUtil.m */, - AAC5E8282CA57B988CA60B91846B3AB9 /* GULHeartbeatDateStorage.h */, - 9E2D65ECD11B6AEB036931D5A3380113 /* GULHeartbeatDateStorage.m */, - 78BAF0D547E00F0767C0DD113ADF19C0 /* GULKeychainStorage.h */, - 446761389CFA822783FA41B1CAB429AA /* GULKeychainStorage.m */, - 8A0818CE0BCE0C31BA702F922277305F /* GULKeychainUtils.h */, - 0B4C64BD56CF6985E80B66695B59DF88 /* GULKeychainUtils.m */, - 0E14920ECDB2908894AFBB2FDC931F02 /* GULSecureCoding.h */, - 4D1AF60094F489C5CAB30597E9300702 /* GULSecureCoding.m */, - ); - name = Environment; - sourceTree = "<group>"; - }; - C92BEB878EA261B63A3FE8C6F070519D /* CoreOnly */ = { - isa = PBXGroup; - children = ( - EB4E2D2A1C3DEB62CAA9C59348F802D1 /* Firebase.h */, - ); - name = CoreOnly; - sourceTree = "<group>"; - }; - CEF4BDF97A3F68AB11FD0F39F6FC818A /* Support Files */ = { - isa = PBXGroup; - children = ( - 02FF0A3B1C66CF58CBF6ED0DA70E2CF2 /* leveldb-library.modulemap */, - 0A186237A208BD1CF32D3CDD83B8CAF2 /* leveldb-library-dummy.m */, - B66C3F856B135140E3571B506C20655B /* leveldb-library-Info.plist */, - F8CC6FBC5815D2063DB2E3808DC024DB /* leveldb-library-prefix.pch */, - C4C0ED34A72FF0624A93EC40E7CF6B37 /* leveldb-library-umbrella.h */, - D3C76A00399095A4DAA2020273DEE53B /* leveldb-library.debug.xcconfig */, - D2C19F3B7A322A65FA2CC3F20A6DF678 /* leveldb-library.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/leveldb-library"; - sourceTree = "<group>"; - }; - CF1408CF629C7361332E53B88F7BD30C = { - isa = PBXGroup; - children = ( - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - 2D7219444627D2D5238868A4CCD5704D /* Frameworks */, - 1B4EBD07C7FF3B9DFD52CF040166F1D6 /* Pods */, - 2A95F72240D94B812814C6F95A1C4E74 /* Products */, - 734DDD76806A8BB7989DEC328634F270 /* Targets Support Files */, - ); - sourceTree = "<group>"; - }; - D7A929CB0184DEB473B7B44F17CFF47E /* Support Files */ = { - isa = PBXGroup; - children = ( - 1EAE4B9FB26CEEA47D06DB17655CBB32 /* FirebaseCoreDiagnostics.modulemap */, - 119F6DBEC2830D0007421DCE8BF46135 /* FirebaseCoreDiagnostics-dummy.m */, - 7CF6606C0578E7CDF7EDEF3D4B178B60 /* FirebaseCoreDiagnostics-Info.plist */, - C8ADE11EC03AF033C186B754146EB29F /* FirebaseCoreDiagnostics-umbrella.h */, - FE464F7C6ACA43984F0CE6C4734378E8 /* FirebaseCoreDiagnostics.debug.xcconfig */, - 59CB9FB4C1679210BE96723BFE245F15 /* FirebaseCoreDiagnostics.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/FirebaseCoreDiagnostics"; - sourceTree = "<group>"; - }; - EEEC29BDBC15B23A4B68997A977DC826 /* FirebaseCore */ = { - isa = PBXGroup; - children = ( - E5FE3C03918579D14DEB83FD5B810D8C /* FIRAnalyticsConfiguration.h */, - 3F8222E00AF134E0711FE08042A039C2 /* FIRAnalyticsConfiguration.m */, - 4C73EAF4D8A7A12724B8D66F3FB39624 /* FIRApp.h */, - FAD139992C71368B1D6232300F330E1E /* FIRApp.m */, - 371751A703B71351DE13FF939FF962D6 /* FIRAppAssociationRegistration.h */, - 38795B0F87C340F69CFEDED0CCBFAC37 /* FIRAppAssociationRegistration.m */, - 71D624A72A3D5A4BBC3E8E85FF70070C /* FIRAppInternal.h */, - 8F2DF0513C9DB23D691523760E8A297A /* FIRBundleUtil.h */, - AAF98DB258436A94B5CFFCB168CA4E11 /* FIRBundleUtil.m */, - 2F468A47D4B1484163852DBA4C01BDC2 /* FIRComponent.h */, - B376CAF865729E1CF465CFCCA52115D9 /* FIRComponent.m */, - 301F5A9AE16774CF0D41657DAD925B78 /* FIRComponentContainer.h */, - 1D07B68D86353EF71AF26AD8633ED011 /* FIRComponentContainer.m */, - 92CD283D96DCA1B1A70CCFCEDE5A47B2 /* FIRComponentContainerInternal.h */, - F4D50B06AA311127F439590F709F5807 /* FIRComponentType.h */, - D95FFC4B09BC1ED974D778A5C00737B1 /* FIRComponentType.m */, - 25EBF5F50A964142282100BB3127D79D /* FIRConfiguration.h */, - 8734EC42113C4820AC918A2ECB6EE41C /* FIRConfiguration.m */, - 914AA32349DFFE43B88FD2C41C2E3880 /* FIRConfigurationInternal.h */, - 4AFF92094D4BC33FA831C1108F731A13 /* FIRCoreDiagnosticsConnector.h */, - B5D4BE3DC5EADCF63F424C33B95D8E0F /* FIRCoreDiagnosticsConnector.m */, - FC65A9652178080D84042446A2B9C021 /* FIRDependency.h */, - 873B2D52C27790E76C58F17E637447EA /* FIRDependency.m */, - 9B25CE4BCD165FCACCCB347BE5C627FA /* FIRDiagnosticsData.h */, - 1F51C701E1D20698B669E1172FD5E4CB /* FIRDiagnosticsData.m */, - 666F60F1D8D46D275395769502141CD1 /* FirebaseCore.h */, - 2392A33D7F9C9CB28B956D731DA8F557 /* FIRErrorCode.h */, - 1B12871BB34F2EA4AC753A384DD80F71 /* FIRErrors.h */, - 825631D04FA349AC9CAE016BE347234D /* FIRErrors.m */, - 4E65C99CB1E05FEDE149BE32F292733C /* FIRHeartbeatInfo.h */, - 77B8D860A5693BAB27B03B2D8262FBBB /* FIRHeartbeatInfo.m */, - B6B1D21BE3FE785C043FD82E5E14181D /* FIRLibrary.h */, - 5004A374237FC691736F521969A16337 /* FIRLogger.h */, - 3F2E840DE3E5096DD4B221B61ABE94B4 /* FIRLogger.m */, - 061A348B4063578DACB2E0C334E75E2E /* FIRLoggerLevel.h */, - 9F12FA3516B540F46C4E817F486AD87A /* FIROptions.h */, - EEAFB8AE27936F24FCBC0EBF570E19DF /* FIROptions.m */, - 87C8D393D6580BF43944DB0760788D06 /* FIROptionsInternal.h */, - 6BD31C9DAA421C4A8E24D11F5161689F /* FIRVersion.h */, - 97BCB79C675A3B16DD7740908974E9B3 /* FIRVersion.m */, - 00FFE1454901BD5E4F8B7C065C6C99D3 /* Support Files */, - ); - name = FirebaseCore; - path = FirebaseCore; - sourceTree = "<group>"; - }; - FC0E1F21ECE4473409254E531F75BC91 /* encode */ = { - isa = PBXGroup; - children = ( - ); - name = encode; - sourceTree = "<group>"; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 1DD803FE060BC73A3D01942A1B852FFC /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 49D2B6171D735598F776C41BA90697E0 /* firebasecore.nanopb.h in Headers */, - CCE81C520CE25D15FDBA09D537AFF746 /* FirebaseCoreDiagnostics-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F1A29F02E1D162FC479713AF2B06783 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - FEEC3CEC5F56947B1E9391C9FDD24D1F /* Pods-openTok-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6CD78F23D4128188EF999D177C06916E /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 70EF2DF97705C4E7DC796A993C8131CC /* FBLPromise+All.h in Headers */, - F8ECC6E59188EE721B9AC5C2EC1C4C4F /* FBLPromise+Always.h in Headers */, - 4726CCB900BC87AC820DB76627C38EFA /* FBLPromise+Any.h in Headers */, - F1ADBEBF87EDAC904CFE9724211D4D55 /* FBLPromise+Async.h in Headers */, - BE9467BE9494527D5D49C93812D30079 /* FBLPromise+Await.h in Headers */, - 78066B813499E43C772003B1BF0427AA /* FBLPromise+Catch.h in Headers */, - 09F5D7B633DBB6888DBAFD7BF2156441 /* FBLPromise+Delay.h in Headers */, - 158B87CF98F428E31623B0E931A78408 /* FBLPromise+Do.h in Headers */, - AC9140659556BDBA9D745D74CD3A6428 /* FBLPromise+Race.h in Headers */, - 85A99CFD1EAF4B2F16D252AB054441E1 /* FBLPromise+Recover.h in Headers */, - 3DFB61A0B67EF7337CB48246FE5F5F53 /* FBLPromise+Reduce.h in Headers */, - C923E01B60A3AB065A6E62679ED8E750 /* FBLPromise+Retry.h in Headers */, - 3EA71BDD8FC82E07FD501469DA03C46B /* FBLPromise+Testing.h in Headers */, - 371FF6CFCCBDE43DD79F5F8476A478AA /* FBLPromise+Then.h in Headers */, - 8CBFAB6FCA1E4F62C29F2C30E42EF00F /* FBLPromise+Timeout.h in Headers */, - 6A2FD4A639D49DA6C2278A0C9E91232C /* FBLPromise+Validate.h in Headers */, - C00B4883920C764B9AAE225E756DACF0 /* FBLPromise+Wrap.h in Headers */, - E054D4F5671FCE00657213A710EA8CF0 /* FBLPromise.h in Headers */, - 8BE66D549E7580DCF6128DF93DA4A244 /* FBLPromiseError.h in Headers */, - F42B8685FA5C3492C6D5C7B606BCD01E /* FBLPromisePrivate.h in Headers */, - 0A33307F590A537399B19787B87690CC /* FBLPromises.h in Headers */, - F30E60AFC01B39D14ABC67D9949E7996 /* PromisesObjC-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7C3D494E08A8568F24EC772DAF53F0DA /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 60BE2ED8380E6A7CF121EC37BD34A8C7 /* FIRAnalyticsConfiguration.h in Headers */, - D3EF13736C1E7C79191294C5C6AFE061 /* FIRApp.h in Headers */, - 22906D1F2EBDB2DB72C53F96C55CE359 /* FIRAppAssociationRegistration.h in Headers */, - 5A0405864E8F4C6C9E7FA0C0957740BB /* FIRAppInternal.h in Headers */, - C7EB3D4DF6FE9676259754253B9A7A99 /* FIRBundleUtil.h in Headers */, - 9982123CD233B4B9CCD7726EB385AC47 /* FIRComponent.h in Headers */, - D38250CC0ABA2279901BE2CE4615E1BC /* FIRComponentContainer.h in Headers */, - 652C7D589C4B335702DE85D4942D99CA /* FIRComponentContainerInternal.h in Headers */, - 45F553F660EF71AFC23BF7C212AB43D6 /* FIRComponentType.h in Headers */, - 48AD74D2B771B41A9F2C75397D04A890 /* FIRConfiguration.h in Headers */, - F6B3E03523BAFADB7293332CE15F6B35 /* FIRConfigurationInternal.h in Headers */, - 568A54C8176D35F8A7EDB6C00C879B71 /* FIRCoreDiagnosticsConnector.h in Headers */, - 514734A6E03887212B98136B5C2E70E4 /* FIRDependency.h in Headers */, - CF911D7374D087D44CC4AAEFA75725E8 /* FIRDiagnosticsData.h in Headers */, - 780B68AAE183B3B79A09360D6D86DDC8 /* FirebaseCore-umbrella.h in Headers */, - AE2804D9077D31BCFFB1776E9E7329ED /* FirebaseCore.h in Headers */, - F9193842F4C05FA2AABF0EB1215B74AB /* FIRErrorCode.h in Headers */, - 9456C0CC30E27EC6E44E1B7E509C7908 /* FIRErrors.h in Headers */, - C4F84818D463A2C85D1B0AC785C0D75A /* FIRHeartbeatInfo.h in Headers */, - 77728A7BED51FEF74A4BD7261D3230F4 /* FIRLibrary.h in Headers */, - 7F1E012AD8F03E57353F4F1EE729FD0B /* FIRLogger.h in Headers */, - 5ACD9CCCFCEC9B7B56E858A2E0204AE0 /* FIRLoggerLevel.h in Headers */, - 1D453D2D6F52C91B3C0F41216EAB2474 /* FIROptions.h in Headers */, - 94605D578942F9050F95C09666C8A0DE /* FIROptionsInternal.h in Headers */, - 56B2284C696879C63E21C1B12C3ACFEF /* FIRVersion.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7D3105B483B9F739D9AEA849D1194C6B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 1CD40EF7C7409AAF764EB1A036E88F58 /* APLevelDB.h in Headers */, - 376006A9DEBAADE7B841299DE819CF71 /* FAckUserWrite.h in Headers */, - F61055D1ACAD3A04A2E02885B9E5428E /* FArraySortedDictionary.h in Headers */, - 972069230464E6CE883137D34054A915 /* FAtomicNumber.h in Headers */, - A1EA5FBC078FE046032A7944CB6643B4 /* FAuthTokenProvider.h in Headers */, - 87CCA0094B49425EFD2E1467E4A5646A /* fbase64.h in Headers */, - C920951A0C1DD5F402838058F6D760CC /* FCacheNode.h in Headers */, - 09E37749C750B91B3E3FD67D80984B3C /* FCachePolicy.h in Headers */, - D563DF007CB1939F99BC90947D9D8678 /* FCancelEvent.h in Headers */, - 4118726C30DDD8B59270D8C0522FCAD4 /* FChange.h in Headers */, - 1CB9A10DD61563EC43A64ADA9ADAD2F9 /* FChildChangeAccumulator.h in Headers */, - 3E3B68C439E38A6A6F13BC73827BD7E5 /* FChildEventRegistration.h in Headers */, - 19DE00627C79A1AFBD25247C04241C20 /* FChildrenNode.h in Headers */, - E9D939A583E0F24A7AA009FB06342C44 /* FClock.h in Headers */, - 80883E58195D0C95FF43C861FB0634E1 /* FCompleteChildSource.h in Headers */, - 94D3B9222CFE703A7F324982FB2896C2 /* FCompoundHash.h in Headers */, - 4CA6CA316B486CCED39D435DED7F5AF0 /* FCompoundWrite.h in Headers */, - 3EE42B1C7D4A0329C4177617DE5864AA /* FConnection.h in Headers */, - 208C26E4F7F9544E46DE7DCCF56DCEDC /* FConstants.h in Headers */, - B4592A85208BA71D07F267C9743D0210 /* FDataEvent.h in Headers */, - C6E30428F84E81A7DBC8300BE93C9239 /* FEmptyNode.h in Headers */, - 35C43AFBC7EA71125CAF4D1CFF5D9E4A /* FEvent.h in Headers */, - 7778A74F15FFFD1C05497A5E926E8715 /* FEventEmitter.h in Headers */, - 8C42D689F7282ECFB561869D5D4E9647 /* FEventGenerator.h in Headers */, - 2C463D6B7A5EC5291926FCC7D01F2C47 /* FEventRaiser.h in Headers */, - C4E1E950931E52050E9BE5FCD9272EEE /* FEventRegistration.h in Headers */, - B8CA041BC37733E92042E962A580E099 /* FImmutableSortedDictionary.h in Headers */, - 99B08BD22638BB764A6DB636BD6EEE83 /* FImmutableSortedSet.h in Headers */, - 65DDC8DA853BA7480883F3BAFB91A171 /* FImmutableTree.h in Headers */, - 47B7043414C74508AF47375D56971161 /* FIndex.h in Headers */, - 849A0FE6B697BF9683283B3EB1974738 /* FIndexedFilter.h in Headers */, - 228929A7082BBB9704D2E27875BBBC3C /* FIndexedNode.h in Headers */, - 7B816CEC366EA348B2258921C66F1FFD /* FIRDatabase.h in Headers */, - 4A89D83C5CC15E68857BC96F14C6650A /* FIRDatabase_Private.h in Headers */, - C251990DC88BD29ACCA3CB46E5935711 /* FIRDatabaseComponent.h in Headers */, - 202B598D9F522FC624E1A5CA144FBF88 /* FIRDatabaseConfig.h in Headers */, - E3D6CE7A26373CE27EA2F2758B2D4150 /* FIRDatabaseConfig_Private.h in Headers */, - DA396B909B86FC5569879519A6FE8E22 /* FIRDatabaseQuery.h in Headers */, - 20F0342925167698872DC671F62230A1 /* FIRDatabaseQuery_Private.h in Headers */, - C79C2E16C567BE240374AB2ACA80E9D3 /* FIRDatabaseReference.h in Headers */, - 6B2411DC7943C6C7EA36A81B77060E1B /* FIRDatabaseReference_Private.h in Headers */, - 2CBF94020885D3E5D21547C8957B4727 /* FIRDataEventType.h in Headers */, - A35AAF57E54A60DAE0F8B0B73A95E909 /* FIRDataSnapshot.h in Headers */, - 2CA687E15AC9FA358EBC36A0F852F969 /* FIRDataSnapshot_Private.h in Headers */, - 57F3914A57D8C391B28D7543A043EE5D /* FirebaseDatabase-umbrella.h in Headers */, - 963AC4F88FC6DB6A294C23A6B94B895E /* FirebaseDatabase.h in Headers */, - 470FDDE3E540331E5BE054C0503565F0 /* FIRMutableData.h in Headers */, - 3E4EEE0E3EE4D0921C6E38F5B43B14ED /* FIRMutableData_Private.h in Headers */, - CFF003B36714BB84CCABFD01A374DEF7 /* FIRNoopAuthTokenProvider.h in Headers */, - 5CC90ADB1221D7A10D9E9EE241C524EA /* FIRRetryHelper.h in Headers */, - C69ADB52F0C74C9395A7D765309FCD83 /* FIRServerValue.h in Headers */, - 55958675C0EF11E90E71F3EDEA3D06DD /* FIRTransactionResult.h in Headers */, - D52AFA8E3FBCEC394CDC82379FE88B52 /* FIRTransactionResult_Private.h in Headers */, - 5B975A3DECF705D94BB558B2D3D2DF40 /* FKeepSyncedEventRegistration.h in Headers */, - A68E8B2EE1FF194B6655B436EB9BDC33 /* FKeyIndex.h in Headers */, - 70031267032F653DD49657907E61FA20 /* FLeafNode.h in Headers */, - 11909EA60514E6096BA099AFCCA379C5 /* FLevelDBStorageEngine.h in Headers */, - 48ED6CD7CE693EB34FE9C061FDFF5BAC /* FLimitedFilter.h in Headers */, - 4804CD4E94A28FF0B14D20E80F800441 /* FListenComplete.h in Headers */, - 2451451CBD8C77F590EF31AB7EE78677 /* FListenProvider.h in Headers */, - 5AAE67A01BF047446F46E6B3664C4103 /* FLLRBEmptyNode.h in Headers */, - 8C800877FC0D7864D21CCC0F4EDE99B2 /* FLLRBNode.h in Headers */, - 19E64928C0FC267F6E776C53E24209C6 /* FLLRBValueNode.h in Headers */, - 051C58E6804A52F6CF7B07F80DE42636 /* FMaxNode.h in Headers */, - D8D511258397444B99E83CE98266F4B8 /* FMerge.h in Headers */, - B011CBB9CD6B822748DBDFC864B74856 /* FNamedNode.h in Headers */, - E98AEA2493832610AD36E545FB8EF061 /* FNextPushId.h in Headers */, - 659DDECDB1D8A810216CF4556E9BE3EE /* FNode.h in Headers */, - 4AB9971E89197C7C9F49C300467656AA /* FNodeFilter.h in Headers */, - 2CFE1B703A0C9BE2E09D32BE5CD79D90 /* FOperation.h in Headers */, - BFDFD609230B6D3440C1D188AFC60895 /* FOperationSource.h in Headers */, - 221B165A4CB43C6F0214B528EB09269F /* FOverwrite.h in Headers */, - 097040CACC3CDACE82F943EFFB956500 /* FParsedUrl.h in Headers */, - A93A8D91D7274E5B74371311D47C73F7 /* FPath.h in Headers */, - 9DB252952D8A38CCE72464F9F7200248 /* FPathIndex.h in Headers */, - F9FC3FD462F8BBAA08CFA4281BEDAA05 /* FPendingPut.h in Headers */, - 2C14CAD723AA204EF0CDA409CE396B2F /* FPersistenceManager.h in Headers */, - D8A5DE27DCB5E12927641DB568623146 /* FPersistentConnection.h in Headers */, - 23D304F5D4898524973C90F483721F94 /* FPriorityIndex.h in Headers */, - 1965EAB9CD8AE482223EB5F0E31D7D68 /* FPruneForest.h in Headers */, - C678D9A28B761A4DA5E29CCF6DCBE82A /* FQueryParams.h in Headers */, - 18B203D4F60DA2A5FA9E3974EB4D187A /* FQuerySpec.h in Headers */, - 31E211272046EA07C2045244B153B550 /* FRangedFilter.h in Headers */, - 3D2636DAE91F7C2F9B77790C4531C0D1 /* FRangeMerge.h in Headers */, - 259224D7B367FA639FD4BBFA1013468E /* FRepo.h in Headers */, - AEB451E345319D5C736EC9E375325C18 /* FRepo_Private.h in Headers */, - 06FADEA97461819677F4A1759A451B54 /* FRepoInfo.h in Headers */, - 7F2F5653A57ABB9417C394852A04B755 /* FRepoManager.h in Headers */, - 5C9DC0DDA64154FCD249C79DFE95B6B5 /* FServerValues.h in Headers */, - 28A75C5EBFF04D453E76388DB74D8FFE /* FSnapshotHolder.h in Headers */, - C8551DAA6BEE4C8D580B625D19EED829 /* FSnapshotUtilities.h in Headers */, - 2F572EF33ED6B78210874F444B84B640 /* FSparseSnapshotTree.h in Headers */, - D260EB226C838D723F36960F519FA36A /* FSRWebSocket.h in Headers */, - F382F5EE61B5A56B06F26BE8C4E98657 /* FStorageEngine.h in Headers */, - D5EBF5BEB2D1AD674AF8B08215FE9A09 /* FStringUtilities.h in Headers */, - A19AD85CAB80A263AFE2A2B213D752F7 /* FSyncPoint.h in Headers */, - D806CC0D12BBBE72304FF80125CFFB95 /* FSyncTree.h in Headers */, - 69AD7F4C5ECF8E9C8E699F6BC5018DCA /* FTrackedQuery.h in Headers */, - F12D3A396FD4AFB5E00C6DB18698306B /* FTrackedQueryManager.h in Headers */, - 5A52D232EABA2665C7EEF5035A49373E /* FTransformedEnumerator.h in Headers */, - 70E6D6C00DE7612C2B1BAEF1BC3AB1CB /* FTree.h in Headers */, - 01F14311F4F4FC48397BE16D21E33530 /* FTreeNode.h in Headers */, - 2BEABA1DB7F161D3909C14E7D3B744A2 /* FTreeSortedDictionary.h in Headers */, - EF101A4A352EAF4EDE9A0F75DC37AAEC /* FTreeSortedDictionaryEnumerator.h in Headers */, - B1F0A49CE2997BD30DF7252D6920BA40 /* FTupleBoolBlock.h in Headers */, - 6D1271BD091A228A0F042FB570729DD1 /* FTupleCallbackStatus.h in Headers */, - 16EE0BBA1E994DCB35C6112274E78E49 /* FTupleFirebase.h in Headers */, - 7A81401CD997F8C281A44B24AD0C1C47 /* FTupleNodePath.h in Headers */, - 07DA3F6F36D2000762876319982A08D8 /* FTupleObjectNode.h in Headers */, - D312D681EDBEB8E36664C1DEB29425FD /* FTupleObjects.h in Headers */, - CBF64DE8DF849F4CF5E27D6BB749E2FC /* FTupleOnDisconnect.h in Headers */, - DAAEA152388F6C52245AA64E442D05FC /* FTuplePathValue.h in Headers */, - 26211344E4366BFE48BA6B1145DB814C /* FTupleRemovedQueriesEvents.h in Headers */, - 0C3CD46BCBCCF60B4D053E598FEFF3CC /* FTupleSetIdPath.h in Headers */, - 1879D3460407979438FAB2CA5DCAF2EB /* FTupleStringNode.h in Headers */, - 16E45CDE3F7FD18E427FB09401303BD6 /* FTupleTransaction.h in Headers */, - 47738E305055A2711E3FF8FFA7CDBCF2 /* FTupleTSN.h in Headers */, - A4A889BBD02B931CB5C8BFD0D4F41883 /* FTupleUserCallback.h in Headers */, - C7C18B192A7D3836E0740DCFA83F0713 /* FTypedefs.h in Headers */, - BFA1C79B75FE0EDD55BCDC01CEA539B2 /* FTypedefs_Private.h in Headers */, - D4956895D64F9FC87662AB74344D45FA /* FUtilities.h in Headers */, - BF08B4C324DECBE26BFD0F695C4190BF /* FValidation.h in Headers */, - 7EFBFADDE51783B82A51CCED09D408C1 /* FValueEventRegistration.h in Headers */, - 279EEB1AA09C07042ADB5B7E99F04874 /* FValueIndex.h in Headers */, - 1BD91D20F81071C7A1510A50F4497F88 /* FView.h in Headers */, - 98CE6713616C5FB36055CE35CB912580 /* FViewCache.h in Headers */, - 7D0FE3A51F36E7C4A2678853982A411D /* FViewProcessor.h in Headers */, - 5A9C4484FCE755697ADFC6A28E20A016 /* FViewProcessorResult.h in Headers */, - FD9FFF2F68300DC16B9A1A9F20F816B2 /* FWebSocketConnection.h in Headers */, - 699B4E6CCA689A6F0E4969C29E270439 /* FWriteRecord.h in Headers */, - 7B52884624478BA3B6D5273237DA612C /* FWriteTree.h in Headers */, - B5121C8C0C047C4C994A3296F4CBFA29 /* FWriteTreeRef.h in Headers */, - E3AD662787E8CC55CC07DABB793339B9 /* NSData+SRB64Additions.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABA67676FDB60A7C731882A20C8E81A8 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - F0F32B4EEF9319CAE2FD9492C961AD46 /* arena.h in Headers */, - DDF72157B0D446D7EF4A6D0367B053B8 /* block.h in Headers */, - C7C5928AE2BAFCE30C33F465FC27168F /* block_builder.h in Headers */, - D71A9029947DDB7C7445FC4B406652A8 /* builder.h in Headers */, - 1F32BFF2BC7FAF7A084CD1BB15AF91E7 /* c.h in Headers */, - D2B8D11353EE71C28309AD98487B8F89 /* cache.h in Headers */, - B4E0070CB2B00E4EFDFBD22D3115C495 /* coding.h in Headers */, - CEA524769B166ED5FC36B6E9FA0B041D /* comparator.h in Headers */, - 3855955853294797A0C2C84BE912A404 /* crc32c.h in Headers */, - D2F2DD920168057066470E3B831DE30C /* db.h in Headers */, - 619DF4CCAA6E644FCC811DDB00BFEFE9 /* db_impl.h in Headers */, - 69426E491EC5E31B1F89407ED742FE37 /* db_iter.h in Headers */, - 2D135A659B0C2F30BDBFC9AA2C99E2D7 /* dbformat.h in Headers */, - 16EA928A38BEB76C4360E0EE35EFBD54 /* dumpfile.h in Headers */, - B38FE144483BB55FAE1610A2ABE9AD1E /* env.h in Headers */, - 140985971178C5D41E3754E4D0E24CE5 /* env_posix_test_helper.h in Headers */, - 5F0ECED121063D05096B8D84C08255B6 /* env_windows_test_helper.h in Headers */, - 8FAA82B55473DB6B1C1003882B31A970 /* export.h in Headers */, - EA1E8453723787E846BF722D1313A31A /* filename.h in Headers */, - 5A4626A78A5C4E49BDB009D02D3E261B /* filter_block.h in Headers */, - E40EC66CF2490B6FC9306FB9368DC6C0 /* filter_policy.h in Headers */, - CEB003A648ED9530DED6E090307C484B /* format.h in Headers */, - B7F3AA388B10FFB10143FA5537650DE3 /* hash.h in Headers */, - CACA4866A8A21F378C5C22C4550461CC /* histogram.h in Headers */, - 87910C8366AC5C2E1F9E36AE14F2CA27 /* iterator.h in Headers */, - 88C13D592F16B7278CEE5150D44A0F66 /* iterator_wrapper.h in Headers */, - 7DC98B441048ADBA595C6F12B37AC7CE /* leveldb-library-umbrella.h in Headers */, - DBAF982DF23404E0B19A86076B64C05D /* log_format.h in Headers */, - 93D5643C0AB33FEEBBC46006C28AD6EC /* log_reader.h in Headers */, - 6330222D094742EE882DEB728FF1E4F8 /* log_writer.h in Headers */, - 926AA07593CA64CDB72ADCC7CBA0479C /* logging.h in Headers */, - 2E10DF9E19D8A04DC5A179A4C33399C0 /* memtable.h in Headers */, - 5610D55DC7926A495CA4069724B8821D /* merger.h in Headers */, - 0886A6110663ED25DDF1B88272082117 /* mutexlock.h in Headers */, - 0AA93414C026466DC54C9F92AE2330CF /* no_destructor.h in Headers */, - 13BF445F2F36873CF3CA07CB28111B6A /* options.h in Headers */, - 89BA3207279ECA125A45BF428F2A38B8 /* port.h in Headers */, - 94F443F2A3E409A0DD460F8CED709426 /* port_example.h in Headers */, - 4B397BF3049EE16BB28615BA0363A45A /* port_stdcxx.h in Headers */, - 8F6DE00950247BF705BAEA10E4A231FC /* posix_logger.h in Headers */, - 79301BB80C42E8D6F837287E5BF87C4C /* random.h in Headers */, - EF84EEE29E8E694C0B5352DC64618DBC /* skiplist.h in Headers */, - 78173DD3AD8FEBDC30D56CBCA2A8420D /* slice.h in Headers */, - 2CCBC93C06F5DC0F576D2942A1ADDF23 /* snapshot.h in Headers */, - 00DC3A5E3088F6BC409056FF2759504C /* status.h in Headers */, - 3D6B3854EA4680B3AEE04274CE3CB053 /* table.h in Headers */, - 1F16F7F044524F9AC7E1F047728FF56C /* table_builder.h in Headers */, - C30900E8594FBAAAAE8F3699D8F3A31E /* table_cache.h in Headers */, - FAA990BC4EB21DBA7A5B4C96DD13C0BA /* testharness.h in Headers */, - 5A8F8D9E203FF204C505E11577716FE6 /* testutil.h in Headers */, - 44C4FF48A0CA1153ADC2F11A7E7D9853 /* thread_annotations.h in Headers */, - 2D0764461AAE28446CF1FB7F4B24B200 /* two_level_iterator.h in Headers */, - 1D83E631A206C9DD34CF8676CC11014D /* version_edit.h in Headers */, - 69014479FF4FA988406168B4BE30EDF1 /* version_set.h in Headers */, - C0840CA66776CEA209B224ED2C274294 /* windows_logger.h in Headers */, - 46C616765663C3ACB4778DE8108575CE /* write_batch.h in Headers */, - EC64299425B5180EDF4E687B084C7A04 /* write_batch_internal.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BEE3891473A15CF8CB4AD681672D254D /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D179BDCEA10E68B3BEC247D80C2629E1 /* GoogleUtilities-umbrella.h in Headers */, - 9094065368AC7058A86BB581D076CFF3 /* GULAppEnvironmentUtil.h in Headers */, - D22F0143382C701C65528F14BBF6F3A3 /* GULHeartbeatDateStorage.h in Headers */, - 6E23414B614CF0541D4234A44D46E6A9 /* GULKeychainStorage.h in Headers */, - A71FF5D6D6D76CC6FC7B3B43B6C33376 /* GULKeychainUtils.h in Headers */, - CE649478AFA1F9ADA8924C1D1598400F /* GULLogger.h in Headers */, - BAADC524E75E1D8928202B1A5CD0FE6E /* GULLoggerLevel.h in Headers */, - 276285542CBD047E16A240C92D981C9F /* GULSecureCoding.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D1E9DD2094CEAB318483F8919C3332C5 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - E80BFE452CF64B1A92B59699AAA3FBBD /* GDTCORAssert.h in Headers */, - 6A8AA68F2D6AF1B11F283156321088FC /* GDTCORClock.h in Headers */, - 3BF1D3EC5952C1777B11B7D357FB5AE2 /* GDTCORConsoleLogger.h in Headers */, - 547E592CCE6FFFEC8B870CA68D4642C5 /* GDTCORDataFuture.h in Headers */, - DC58F5895F8BCD218A84F9054BC3E86C /* GDTCOREvent.h in Headers */, - 86AC5E16F0CB973D87D07A3A1813EDCF /* GDTCOREvent_Private.h in Headers */, - 60E5A2DE0C8C9144803E3861B1958FE4 /* GDTCOREventDataObject.h in Headers */, - BF7F746EAC86697E7B02E108948287F5 /* GDTCOREventTransformer.h in Headers */, - CF948DD801C7F1000C5484B956587B3C /* GDTCORFlatFileStorage.h in Headers */, - BE8B58E802E3BFC76B2ADD29F2EC4AF8 /* GDTCORLifecycle.h in Headers */, - CAE26FCEE07519D3D1BB7633D4CB301B /* GDTCORPlatform.h in Headers */, - B9B6AC6AA6B4045C5E47AB555D26D4DE /* GDTCORPrioritizer.h in Headers */, - 6AE785742922D3C6C01E2F07B874B586 /* GDTCORReachability.h in Headers */, - 756B4E768703DC810CF59DCAB2F75B99 /* GDTCORReachability_Private.h in Headers */, - 032657E3A1E35E842C7BF1668C6505DF /* GDTCORRegistrar.h in Headers */, - F48022BCC822C16AF2D17202FEE170F3 /* GDTCORRegistrar_Private.h in Headers */, - 621E3BBEA4C5834B355B1DCC0EC89EF0 /* GDTCORStorageProtocol.h in Headers */, - 1182CF33679A44B433D77AACE124DEA6 /* GDTCORTargets.h in Headers */, - 75E5079C628FEAB8F122ECFFF541CE65 /* GDTCORTransformer.h in Headers */, - 6FA79E35AAEE2335FC5F1EA7701CCB38 /* GDTCORTransformer_Private.h in Headers */, - AEC4797BD06C0E8B4DF592D417318437 /* GDTCORTransport.h in Headers */, - 74831D60BF46F763B40E019D3835F87D /* GDTCORTransport_Private.h in Headers */, - DB79E37CCB8545B7EE8831773E26CFDF /* GDTCORUploadCoordinator.h in Headers */, - 92B13C918F4EF811AA2A66F54DBC66A0 /* GDTCORUploader.h in Headers */, - D6B664412AE127A4AC23D401920FEB09 /* GDTCORUploadPackage.h in Headers */, - 82457C88EEDA09C07B542C95C505C68F /* GDTCORUploadPackage_Private.h in Headers */, - 88DE778EA02BEFE5E2EC61E357354DA0 /* GoogleDataTransport-umbrella.h in Headers */, - 02D10C14DA679930370B85710695DC08 /* GoogleDataTransport.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F4B4A15AFE8B97D97C7D1E0F01C99895 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - C5D7F1E742FC356D7634879D05F7E194 /* cct.nanopb.h in Headers */, - 754738AB24E60CE84A402F4D60C145F7 /* GDTCCTCompressionHelper.h in Headers */, - 55095E5933B1AA1740A9E48E4D490DDD /* GDTCCTNanopbHelpers.h in Headers */, - E8BB147D613CF877470C822F05E42DFD /* GDTCCTPrioritizer.h in Headers */, - C2EFBC4F0E04491F1E47B04D8DB2A7BD /* GDTCCTUploader.h in Headers */, - AF1811523BA6E37F94F756239BE65D94 /* GDTCOREvent+NetworkConnectionInfo.h in Headers */, - 2AE327A1A87D191D0BE3EE72F7417E41 /* GoogleDataTransportCCTSupport-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F5D0EAAFD8DA9792625FED4C232DCF3D /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - B7E58D721D4EB5B30F25444AD97F6915 /* nanopb-umbrella.h in Headers */, - 4E40D1A913022E26EE13436779D6DAFE /* pb.h in Headers */, - D87DEFF98E5A8549450A1851FC4987AA /* pb_common.h in Headers */, - 3FAB976E8FED078E86BE0BC439996714 /* pb_decode.h in Headers */, - CBC9592C21A1A9DEAA3C3953C198354E /* pb_encode.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */ = { - isa = PBXNativeTarget; - buildConfigurationList = 73D7039327B012B3B4982F70E1071971 /* Build configuration list for PBXNativeTarget "PromisesObjC" */; - buildPhases = ( - 6CD78F23D4128188EF999D177C06916E /* Headers */, - 342034DA9FFE74C862EB3037761FED1A /* Copy . Private Headers */, - D22D6CC9B78A3B46B528EE4DF61DFADC /* Copy . Public Headers */, - DC748FCA9230EDCDDFCFB391312AF625 /* Sources */, - 4D795267449E2E77F2C9E12DF3785D06 /* Frameworks */, - B96681F0999E2CAE6665891034DDDF27 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = PromisesObjC; - productName = PromisesObjC; - productReference = 3347A1AB6546F0A3977529B8F199DC41 /* FBLPromises.framework */; - productType = "com.apple.product-type.framework"; - }; - 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */ = { - isa = PBXNativeTarget; - buildConfigurationList = 3435C2ED50CB457766D806A0A6BB12E6 /* Build configuration list for PBXNativeTarget "FirebaseCore" */; - buildPhases = ( - 7C3D494E08A8568F24EC772DAF53F0DA /* Headers */, - 7AA1EC049F5419E78B4ECDFAA743F9A8 /* Sources */, - 4F00AE09C48E9A5504870A90CE6F1EAE /* Frameworks */, - 598EA81F6D609725AF3C405DCEC51F1B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 26FC2161961F82AD944794A5997EB784 /* PBXTargetDependency */, - B99B55B0C1626310699BE909D29A1772 /* PBXTargetDependency */, - DBF84127F945C1C7D81DD8293C0605A2 /* PBXTargetDependency */, - ); - name = FirebaseCore; - productName = FirebaseCore; - productReference = E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore.framework */; - productType = "com.apple.product-type.framework"; - }; - 5C0371EE948D0357B8EE0E34ABB44BF0 /* GoogleDataTransport */ = { - isa = PBXNativeTarget; - buildConfigurationList = 05B49849CA3C215D143DB2840104B4FA /* Build configuration list for PBXNativeTarget "GoogleDataTransport" */; - buildPhases = ( - D1E9DD2094CEAB318483F8919C3332C5 /* Headers */, - ADBEF7104660ED701544401F0AEFCA4F /* Sources */, - 477B1EBCCA0EF7E6D74F2C2243B920B9 /* Frameworks */, - 5FB5FFC31A71F1172D45E7AE78AF89AC /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = GoogleDataTransport; - productName = GoogleDataTransport; - productReference = 856B5CD56F194FAD26EA91620B66D614 /* GoogleDataTransport.framework */; - productType = "com.apple.product-type.framework"; - }; - 620E05868772C10B4920DC7E324F2C87 /* FirebaseCoreDiagnostics */ = { - isa = PBXNativeTarget; - buildConfigurationList = C6158C953A35D1170546EC7F8DA13EF9 /* Build configuration list for PBXNativeTarget "FirebaseCoreDiagnostics" */; - buildPhases = ( - 1DD803FE060BC73A3D01942A1B852FFC /* Headers */, - 8716DD37801753F317D0EB9CDD236476 /* Sources */, - 7B7CEF043B39B6E95CBFE1B56CED771E /* Frameworks */, - 751409BE84215398AC80A92142483FC3 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 3691D6761F1E170863ABF8C504320FB5 /* PBXTargetDependency */, - 43DE77A89C899E34324DCEF88910219F /* PBXTargetDependency */, - C6978527C8AABEF32FE49D2C989DA8DC /* PBXTargetDependency */, - 6E838F720E0A45A23453941FB7FAFCE6 /* PBXTargetDependency */, - ); - name = FirebaseCoreDiagnostics; - productName = FirebaseCoreDiagnostics; - productReference = 8CC9178C366942FD6FF6A115604EAD58 /* FirebaseCoreDiagnostics.framework */; - productType = "com.apple.product-type.framework"; - }; - 736AF68F6527ACF6B4A4C54728824A1C /* FirebaseDatabase */ = { - isa = PBXNativeTarget; - buildConfigurationList = D907BE725A2E71CEBEB020517B9168DC /* Build configuration list for PBXNativeTarget "FirebaseDatabase" */; - buildPhases = ( - 7D3105B483B9F739D9AEA849D1194C6B /* Headers */, - 265BB15A03974EC7D1FBA324A7E78C0D /* Sources */, - 6751468BB80C4AF1CF6394E0BD57CF9F /* Frameworks */, - CF2B193338A91E7EBBFED14D22A98BDA /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 1C5D35E2072BC65722A5FBF9DFED4330 /* PBXTargetDependency */, - 1A76BA8905879F4B6A03DF488E3F6DBC /* PBXTargetDependency */, - 7EC7F475FF034F08AA6359041957F5E1 /* PBXTargetDependency */, - ); - name = FirebaseDatabase; - productName = FirebaseDatabase; - productReference = 51671C73F008B5C0C3751B3855999213 /* FirebaseDatabase.framework */; - productType = "com.apple.product-type.framework"; - }; - 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */ = { - isa = PBXNativeTarget; - buildConfigurationList = A6C1285A3A85AD57E7A34AC0F64F6E3D /* Build configuration list for PBXNativeTarget "GoogleUtilities" */; - buildPhases = ( - BEE3891473A15CF8CB4AD681672D254D /* Headers */, - 8A081F2D7C3CAF7EE9E1C54276FFA425 /* Sources */, - B959A7F826CE815470B03B08C71E5942 /* Frameworks */, - 80FDA8C0B37076C7686DA72C0B639BC6 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - C614A6DBEA2266B48117FD3CC0CA82A6 /* PBXTargetDependency */, - ); - name = GoogleUtilities; - productName = GoogleUtilities; - productReference = B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities.framework */; - productType = "com.apple.product-type.framework"; - }; - 9307B7A119490930CF70393AB529AAC1 /* leveldb-library */ = { - isa = PBXNativeTarget; - buildConfigurationList = 687F852DB15D7E0F2C84046A996FF2D6 /* Build configuration list for PBXNativeTarget "leveldb-library" */; - buildPhases = ( - ABA67676FDB60A7C731882A20C8E81A8 /* Headers */, - 8F82E161C16BB4526E938FBAB9CCF63A /* Sources */, - 301942F9FBB54A7C29EC65FB93D084B5 /* Frameworks */, - 5C42A166504262EFB0008B9D98F6EBA0 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "leveldb-library"; - productName = "leveldb-library"; - productReference = 0A9F46A999C47653013D3AD854352507 /* leveldb.framework */; - productType = "com.apple.product-type.framework"; - }; - D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */ = { - isa = PBXNativeTarget; - buildConfigurationList = CEF916B3F6E10D600D494DF7F04648A7 /* Build configuration list for PBXNativeTarget "nanopb" */; - buildPhases = ( - F5D0EAAFD8DA9792625FED4C232DCF3D /* Headers */, - D29FFB04B766D1D421440604C5623964 /* Sources */, - 5BCF26CE614C85AC64F9F81B7F404C0F /* Frameworks */, - 5350E54C51C2E95E95183D53E4C003DF /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = nanopb; - productName = nanopb; - productReference = 06FC5C9CF96D60C50FCD47D339C91951 /* nanopb.framework */; - productType = "com.apple.product-type.framework"; - }; - F4BE744C6379A956B2D5CC93D8F1EE2E /* Pods-openTok */ = { - isa = PBXNativeTarget; - buildConfigurationList = 16D35C68618DC0606DA4F1588993ACAC /* Build configuration list for PBXNativeTarget "Pods-openTok" */; - buildPhases = ( - 5F1A29F02E1D162FC479713AF2B06783 /* Headers */, - 4C27C647CCDA6D975C4AB9F5D64C88DC /* Sources */, - 5617A0BB9C5753E42E7D79212AF605E0 /* Frameworks */, - 52EEA9E49EFBF83B100FBF47D4B2DA22 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 05C75EA42F5967E620D78FEFEC522BA1 /* PBXTargetDependency */, - A3C98ED32CF1CD1DC5D0821BD0DC0ABD /* PBXTargetDependency */, - EE98EBE58BEA57ED772859CD1D7DB074 /* PBXTargetDependency */, - C1955461A167D0D64799DE8DEDE093E7 /* PBXTargetDependency */, - 00FFA57F9CC490792E3DCAE3019E4960 /* PBXTargetDependency */, - BE485465786C25F3EB4BD1736B954C7C /* PBXTargetDependency */, - 47BEAA6CB899E33E648464BE3CCF8998 /* PBXTargetDependency */, - 08AF07E3A18727585148418198202BC4 /* PBXTargetDependency */, - 46AEFC4310A18B1B432B0E21430D3CEB /* PBXTargetDependency */, - 2265E310D5A7434D379EBC42CF13AC11 /* PBXTargetDependency */, - 29226BC32636F37D85BDAD06C455F391 /* PBXTargetDependency */, - 844BAF623E2BCE1EABF79500E460BDD5 /* PBXTargetDependency */, - ); - name = "Pods-openTok"; - productName = "Pods-openTok"; - productReference = 17A5FB2BB510D58010F5154CE559C2C3 /* Pods_openTok.framework */; - productType = "com.apple.product-type.framework"; - }; - F4F25FCAC51B51FD5F986EB939BF1F87 /* GoogleDataTransportCCTSupport */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8F6C4E35B62D2E11DF31C69F295F71C9 /* Build configuration list for PBXNativeTarget "GoogleDataTransportCCTSupport" */; - buildPhases = ( - F4B4A15AFE8B97D97C7D1E0F01C99895 /* Headers */, - 0B6591EEAA293C5F4CDEDDFC92369872 /* Sources */, - 2B847EC9F642EFA623AF85427D7F5D6C /* Frameworks */, - AE10F36B820DCF5EB2D7A412252B621C /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 5E85804415BEC75E80DCD84AC2B3734A /* PBXTargetDependency */, - C8A870403BB3782CD599915F0F1B4DDA /* PBXTargetDependency */, - ); - name = GoogleDataTransportCCTSupport; - productName = GoogleDataTransportCCTSupport; - productReference = 6942351307BC1F54575D9853307EAE0E /* GoogleDataTransportCCTSupport.framework */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - BFDFE7DC352907FC980B868725387E98 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 1100; - LastUpgradeCheck = 1100; - }; - buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 2A95F72240D94B812814C6F95A1C4E74 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 072CEA044D2EF26F03496D5996BBF59F /* Firebase */, - 8EC0F2618965C875A96BFDBEE5D9734C /* FirebaseAuthInterop */, - 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */, - 620E05868772C10B4920DC7E324F2C87 /* FirebaseCoreDiagnostics */, - 5EB4B0B6DA6D5C0C3365733BEAA1C485 /* FirebaseCoreDiagnosticsInterop */, - 736AF68F6527ACF6B4A4C54728824A1C /* FirebaseDatabase */, - 5C0371EE948D0357B8EE0E34ABB44BF0 /* GoogleDataTransport */, - F4F25FCAC51B51FD5F986EB939BF1F87 /* GoogleDataTransportCCTSupport */, - 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */, - 9307B7A119490930CF70393AB529AAC1 /* leveldb-library */, - D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */, - F4BE744C6379A956B2D5CC93D8F1EE2E /* Pods-openTok */, - 2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 52EEA9E49EFBF83B100FBF47D4B2DA22 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5350E54C51C2E95E95183D53E4C003DF /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 598EA81F6D609725AF3C405DCEC51F1B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5C42A166504262EFB0008B9D98F6EBA0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5FB5FFC31A71F1172D45E7AE78AF89AC /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 751409BE84215398AC80A92142483FC3 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 80FDA8C0B37076C7686DA72C0B639BC6 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AE10F36B820DCF5EB2D7A412252B621C /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B96681F0999E2CAE6665891034DDDF27 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CF2B193338A91E7EBBFED14D22A98BDA /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 0B6591EEAA293C5F4CDEDDFC92369872 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - E6775BF598A27C32D40B1DCA108C595A /* cct.nanopb.c in Sources */, - B172CD005EC2DB0C68CDCFEE1A1442E1 /* GDTCCTCompressionHelper.m in Sources */, - 6585F9E21D3910193D605670449B5F1D /* GDTCCTNanopbHelpers.m in Sources */, - 3D8B37C55A23D17BDD1FF9FC819D2F9C /* GDTCCTPrioritizer.m in Sources */, - C23156AB0C67FB70CAC131BD5EA62A7D /* GDTCCTUploader.m in Sources */, - 95DD27DE92BA62EBD4899815B8B82E94 /* GDTCOREvent+NetworkConnectionInfo.m in Sources */, - A2AB536DABF58FA5367313F8A4DD4E6E /* GoogleDataTransportCCTSupport-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 265BB15A03974EC7D1FBA324A7E78C0D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B8B790054A38100E5BFDB4C9F2166DF8 /* APLevelDB.mm in Sources */, - 5668DA111AC78F9066F04161000C0446 /* FAckUserWrite.m in Sources */, - EEF056693CD4BFDEFDCDF74271D1682B /* FArraySortedDictionary.m in Sources */, - 2B1703370EEE9C47ED0EF8BE139FB77B /* FAtomicNumber.m in Sources */, - 36F62A55218BAF702B2FF08559F6772A /* FAuthTokenProvider.m in Sources */, - 453177599B69C3035FB65976DB71A88A /* fbase64.c in Sources */, - EA91FA2AA434FF82E02F1E5357C0CDEE /* FCacheNode.m in Sources */, - 9C9383AFE832544B9A756FD939602FE1 /* FCachePolicy.m in Sources */, - 39CEAC444ACA263FBB71A36C598A988B /* FCancelEvent.m in Sources */, - B8A54C5C3CC014705A8AEEE4F8130837 /* FChange.m in Sources */, - 802B6DAEB0CE8C6E44DB8BB5FEFDDB28 /* FChildChangeAccumulator.m in Sources */, - 0FD5E4E620E147108F75B3F2B08A84E8 /* FChildEventRegistration.m in Sources */, - 7C0F5FA852455BB602CB06301F73D14C /* FChildrenNode.m in Sources */, - 2308A882AC63D9EDA7BF9A30CE71A15B /* FClock.m in Sources */, - AB0E800A978D847EF27F7AA5C14CF881 /* FCompoundHash.m in Sources */, - 6BFF9CABC2AC3E40CD05E0A7837E0A86 /* FCompoundWrite.m in Sources */, - 2A7FC6706A43FA0DD2717B58AF346AF4 /* FConnection.m in Sources */, - 6CE6CAFFC9CEE98DBF5F7AFC4277110F /* FConstants.m in Sources */, - AF3ADCA0514ECA43FAF773D4E9DECC18 /* FDataEvent.m in Sources */, - B134B0CEE9718272E9DF54276CA6CB5A /* FEmptyNode.m in Sources */, - 6D7D25CD028F7733E540220C3D285BB2 /* FEventEmitter.m in Sources */, - 2770F513094AD2122DC41DA20E6DF45B /* FEventGenerator.m in Sources */, - 51D4F6526EFCD9C5AFB03818A4006E91 /* FEventRaiser.m in Sources */, - 2D7CAF5FF42E9C0A104773BF58066D72 /* FImmutableSortedDictionary.m in Sources */, - B911CFB8610BBF3C0F24B65ABA3CF3F0 /* FImmutableSortedSet.m in Sources */, - 56ADE8988785176BF58473001683DEB2 /* FImmutableTree.m in Sources */, - 4F7A0971FBDC07F6B66F3F79D2DDF5BE /* FIndex.m in Sources */, - 96EE898B4D6112C56164BD01DF544A95 /* FIndexedFilter.m in Sources */, - 782F4AC4A6D48CCFB91AA97ED5433141 /* FIndexedNode.m in Sources */, - D6D52B1DF78845B91144E2C6CCD5C62E /* FIRDatabase.m in Sources */, - 7A2EE53A852A177298C0AEFF53F36E57 /* FIRDatabaseComponent.m in Sources */, - F7F640FAEB3616081ADA43308E65F784 /* FIRDatabaseConfig.m in Sources */, - 9709DEECF73CB7857CD08B0F7CC324DC /* FIRDatabaseQuery.m in Sources */, - AEAB078B047E355A69FE5114F8154936 /* FIRDatabaseReference.m in Sources */, - 547F74694AA3F101A60FC29AF4777ECB /* FIRDataSnapshot.m in Sources */, - DDAB6756EE8FE818CB93EB1A9D952A4D /* FirebaseDatabase-dummy.m in Sources */, - A6FDAD94CB273F331BDBB351144134B8 /* FIRMutableData.m in Sources */, - 30D3C8C65968B13A370B6DC8BC26175A /* FIRNoopAuthTokenProvider.m in Sources */, - EA4B84BFA49549860AB720711432D5FB /* FIRRetryHelper.m in Sources */, - A981CEB46C05996B9F96978A564D4DBE /* FIRServerValue.m in Sources */, - 8F622CBD13FD505E49C926EF05281863 /* FIRTransactionResult.m in Sources */, - 1794DED80261D1DA5F4EBFEC563D9A34 /* FKeepSyncedEventRegistration.m in Sources */, - 87DC0888CE2B5E68997CA2E2B91A4943 /* FKeyIndex.m in Sources */, - 68FD1F5350878B5D0B4EE2938C67AA6E /* FLeafNode.m in Sources */, - AE0DD7A7FBBEE2BBD6287686FBC88221 /* FLevelDBStorageEngine.m in Sources */, - 86F9279C083639AB20DB701A533CCCCA /* FLimitedFilter.m in Sources */, - DC6E0025FB91F7FADFCD8770AA001155 /* FListenComplete.m in Sources */, - 2D2254DCD01BA887C5F4646CE07AC06B /* FListenProvider.m in Sources */, - A676E368E2A95B5AC9D25DEE38C0102C /* FLLRBEmptyNode.m in Sources */, - 07EB38B563731DDFAC0446DDDB806AA3 /* FLLRBValueNode.m in Sources */, - 5A9A9AE6AC1291C88F5953D3BFC4D965 /* FMaxNode.m in Sources */, - D54C12CCD45AD385ADA492A74CCFCE47 /* FMerge.m in Sources */, - 0E853ECD571210CCA0AE8D49E8AB16B3 /* FNamedNode.m in Sources */, - A170992FA484285612C6963363E5DA79 /* FNextPushId.m in Sources */, - 4FCA995164B919C8FA3CD4AA7CC873E4 /* FOperationSource.m in Sources */, - 31634FC234EA80C8EDBFB62D3A173F05 /* FOverwrite.m in Sources */, - 0F55FA658A750DC4B6F3D1E97E13C6DF /* FParsedUrl.m in Sources */, - E9EEB22091465F6135B7ECE0ED0A287E /* FPath.m in Sources */, - 6A6AB52A108BF6FF2FD4FAA9F7FF4AF4 /* FPathIndex.m in Sources */, - 682894F93E41C971ED72F78FAFD72163 /* FPendingPut.m in Sources */, - 2A8B94488C854FA57EA18F6EDD2C8065 /* FPersistenceManager.m in Sources */, - FF8265E682F5B31C4127924028A5C92E /* FPersistentConnection.m in Sources */, - C7736F65BB6EADB27DBC7391CDA9F97E /* FPriorityIndex.m in Sources */, - 32CAA0959C1714776EBC690E5648B6DC /* FPruneForest.m in Sources */, - 86AA6392AA1FEDCA0ADF69B38B14755B /* FQueryParams.m in Sources */, - 8E2F20850942EFB5BA9919749461F27C /* FQuerySpec.m in Sources */, - D90F58C9020028273163366EE06B6ADE /* FRangedFilter.m in Sources */, - 3F46D2CCA4E26F7C3196F3EE84D2AD1F /* FRangeMerge.m in Sources */, - BFF780519BE9369BA0159FFE686B5B00 /* FRepo.m in Sources */, - CADD0B727BBB942525DC66741C672D41 /* FRepoInfo.m in Sources */, - 2EF3851F1EB458DB00170E169F7094FC /* FRepoManager.m in Sources */, - BB464EF178EBC021F6AAF6DB41B88D5C /* FServerValues.m in Sources */, - D1A080CA4394BF24FA7EE1F4D9FE6C06 /* FSnapshotHolder.m in Sources */, - F96DA5EE1BC259712FEB86A4E864D5C8 /* FSnapshotUtilities.m in Sources */, - 01C52B14BE2E2A76B771F7D7D79A26E0 /* FSparseSnapshotTree.m in Sources */, - FD35B35ABAF436987B500776F6D1CCF6 /* FSRWebSocket.m in Sources */, - 0F3F72C16878451737D593D75A14210C /* FStringUtilities.m in Sources */, - BC5A60CB3173669785FDA3DF8D0CDA6A /* FSyncPoint.m in Sources */, - 9C96B262B9F7AD344AC96B378D6575EA /* FSyncTree.m in Sources */, - A30642CFFF9C5A8F3478A7A60AE5B7B1 /* FTrackedQuery.m in Sources */, - 86E8E207A4D9F6D115E2FFEDD8EEB3AA /* FTrackedQueryManager.m in Sources */, - 907C68C2C45324A2E72BF9CAF93F48CF /* FTransformedEnumerator.m in Sources */, - F52BE9EA5A6FA30AD7591AA7243324B6 /* FTree.m in Sources */, - 87D730E28EF617D4F2CF863BF0F6737F /* FTreeNode.m in Sources */, - 3103362AF88F977054122551BCB0A19E /* FTreeSortedDictionary.m in Sources */, - 6DBE9B3D6F0F2CE13E49E5F688DE7F49 /* FTreeSortedDictionaryEnumerator.m in Sources */, - CAF5489A9704768C8FDD43DEC3AAC933 /* FTupleBoolBlock.m in Sources */, - 90B7A4A975358FF6210D58AA46861C62 /* FTupleCallbackStatus.m in Sources */, - 9D89A42D660A393CF67488B773CAFB86 /* FTupleFirebase.m in Sources */, - 2C0F8BFC1A40062BCBF52D763A89235F /* FTupleNodePath.m in Sources */, - 5DED636C6146A0FAF727E7096AB0C763 /* FTupleObjectNode.m in Sources */, - 9288373444BB899F7AA1DA50A4E283D6 /* FTupleObjects.m in Sources */, - 330F5B38C9B5DD6ECDA59C10D0E233F6 /* FTupleOnDisconnect.m in Sources */, - CCC75B000A3E179DEA8088BA34DB743B /* FTuplePathValue.m in Sources */, - B13C59D3EC48DBA3E960F3030AB7DFF0 /* FTupleRemovedQueriesEvents.m in Sources */, - A11D454125A8A77C3C56C831647BFDB0 /* FTupleSetIdPath.m in Sources */, - E6B5EE50C0455FC011163FDB310BD3AB /* FTupleStringNode.m in Sources */, - E7157FF950C22E9D530BCE35DB1B7B9D /* FTupleTransaction.m in Sources */, - 4BC336156D55C7361145A64DE9701FD7 /* FTupleTSN.m in Sources */, - B57B41BDA5F9F5DB72C186D9865980A5 /* FTupleUserCallback.m in Sources */, - 4AAAD244C67F4C94FE3AE95DA3465C79 /* FUtilities.m in Sources */, - FBDC3E3A58C6FABFD180549A49CF313E /* FValidation.m in Sources */, - 5A123C1FB806917F37E0E8FA627106D6 /* FValueEventRegistration.m in Sources */, - E9E439558089E50E50FB264B2206CF34 /* FValueIndex.m in Sources */, - 72C5EDBA781D29BFAAB551413463132F /* FView.m in Sources */, - 435BC857BBAAEA6B30965087002B6745 /* FViewCache.m in Sources */, - 0168BD7A9B87A22117AA12A50030EB3D /* FViewProcessor.m in Sources */, - B56F29BF7F794835D2FA9484365D4944 /* FViewProcessorResult.m in Sources */, - 33BF60FDF58902839A3A48154F74B0F9 /* FWebSocketConnection.m in Sources */, - B4A284890905A75D4D379A29452218E0 /* FWriteRecord.m in Sources */, - 2D05BEC3A17777F63E42844B3E6DB177 /* FWriteTree.m in Sources */, - 255771799C536116D352662DBD37219D /* FWriteTreeRef.m in Sources */, - 539FE2DC564E37031364AF0690B4C079 /* NSData+SRB64Additions.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4C27C647CCDA6D975C4AB9F5D64C88DC /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5804E667302812932C3103450BEB651C /* Pods-openTok-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7AA1EC049F5419E78B4ECDFAA743F9A8 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 762285060EB8FC38B7345EEDABD9236E /* FIRAnalyticsConfiguration.m in Sources */, - B2351BA6AA93042A3CD8553B32EB1410 /* FIRApp.m in Sources */, - C963AB40523BA26634F4C7F8EBB21E54 /* FIRAppAssociationRegistration.m in Sources */, - E27395E133228033F2BC45F49F521CD9 /* FIRBundleUtil.m in Sources */, - CBCA7426005DB9BB0ADAE6326E4CC0E1 /* FIRComponent.m in Sources */, - E19AC8F914674DC90C18FCADD666D857 /* FIRComponentContainer.m in Sources */, - E9267477B2E0A130107F04B268914775 /* FIRComponentType.m in Sources */, - 009E1F59EB2DBBF4377431DDB9CD83A7 /* FIRConfiguration.m in Sources */, - 6FD783676DA1F46810033F9098475B13 /* FIRCoreDiagnosticsConnector.m in Sources */, - EF47B845839E293A5AF11EF2F7946CC8 /* FIRDependency.m in Sources */, - 04DBB989E22ABC0651DD0179BE01D09E /* FIRDiagnosticsData.m in Sources */, - 176B79C5A31B153FF3A4F9A352AB511E /* FirebaseCore-dummy.m in Sources */, - 20200F69376A4F5F3386FE54FE59981E /* FIRErrors.m in Sources */, - 008002B25F0D710359ADB0C08A334A18 /* FIRHeartbeatInfo.m in Sources */, - 9408D969BC396404237E37745DFCD3E5 /* FIRLogger.m in Sources */, - B456E026E105D2D5852F52B8CA410B93 /* FIROptions.m in Sources */, - 157A2B351086764FFD54E97345BD365A /* FIRVersion.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8716DD37801753F317D0EB9CDD236476 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5CFC8A5B24D8CD47ECEA3B285A8AC115 /* FIRCoreDiagnostics.m in Sources */, - E3C6D1B6BBDD0166C8F655ED945C880C /* firebasecore.nanopb.c in Sources */, - A970A589B1BDCD6E26AF291394CA3E31 /* FirebaseCoreDiagnostics-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8A081F2D7C3CAF7EE9E1C54276FFA425 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5A2D74B12012630A42D1F5CA8F266256 /* GoogleUtilities-dummy.m in Sources */, - DE93F4E12CDA7FC6357259A718B1C5A4 /* GULAppEnvironmentUtil.m in Sources */, - BFDC80CCBDA9AEDCCBD11601E5970505 /* GULHeartbeatDateStorage.m in Sources */, - A89682156BD2FAEFC4ED75AC7E658794 /* GULKeychainStorage.m in Sources */, - 3609887638799B8EB91F6878BFC6B2AE /* GULKeychainUtils.m in Sources */, - AFEE9EE6550E8A52A7E0B41ECE994382 /* GULLogger.m in Sources */, - AFA7F572F0E36F26B233C861C89DECAB /* GULSecureCoding.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8F82E161C16BB4526E938FBAB9CCF63A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 523E397640772F00E129DD7B4E8918AD /* arena.cc in Sources */, - 4BE8B05147FE479302EC65DDEC54BE5D /* block.cc in Sources */, - D068F02A0E7724FE1BB37E66983C3E90 /* block_builder.cc in Sources */, - 5338A1C7B78187BA6DF4AADDDE1FB981 /* bloom.cc in Sources */, - 76E1D620DF668560C0A508B931C892EC /* builder.cc in Sources */, - 032EDAAF8A82DD3C3052D4AC1FF89F4F /* c.cc in Sources */, - 48A23BA03EC46B17EB084D5A92FB3FFC /* cache.cc in Sources */, - F5B003C652AC2DE5B5FAF1CD8026F51F /* coding.cc in Sources */, - 791FCE68614E82B3AFCFEE1FCF5299FC /* comparator.cc in Sources */, - 3AE38AF6BD283284EA42129711536CD5 /* crc32c.cc in Sources */, - D1F20049C9573F35B5B8925149A6D382 /* db_impl.cc in Sources */, - 19C8A556EB39CA08B9EBCBFA9A862B01 /* db_iter.cc in Sources */, - 4354AFBA3C791268B39195AC0B0D94D2 /* dbformat.cc in Sources */, - 075DFD222C5E387A9669D58843D4DD45 /* dumpfile.cc in Sources */, - 4EF04BFB62E95B08C56E236F9C55E823 /* env.cc in Sources */, - CBA82B32238E09AEFD8939EAEA855646 /* env_posix.cc in Sources */, - 811E1C387E694AB74A8DCA4E1DFAD2E4 /* filename.cc in Sources */, - ED1750A66B141E046BD9686F5840A055 /* filter_block.cc in Sources */, - A9D7DC9B772159819C6F4D31259CD6A4 /* filter_policy.cc in Sources */, - 91E2E976670D660A9D998B7953EF5A50 /* format.cc in Sources */, - A5465698DF7B22C392B7D31DE534DEC5 /* hash.cc in Sources */, - 89E0E29686637417A7ECCF7B84A4AF19 /* histogram.cc in Sources */, - DE955B63B64F324BD5B137F172790A3F /* iterator.cc in Sources */, - 4B5F583964C44A1604D92DD71FB7EAAE /* leveldb-library-dummy.m in Sources */, - 11D1D0D58F6BDEB12789B7A1CE45DE29 /* log_reader.cc in Sources */, - 54C6A866FF0CAC9E419AEDD9B99923BB /* log_writer.cc in Sources */, - F68771A6212458CF307A3A236AA3CC2E /* logging.cc in Sources */, - 89C8D847271BDB015EE2F37C5EA5D8BC /* memtable.cc in Sources */, - 756A2EE872A8DDCA0E52D315A589AB4C /* merger.cc in Sources */, - 2B8ED470C6276CFE176CAEE26C780E27 /* options.cc in Sources */, - ED55C0E5FE9C2F5E7782F82C6671DA37 /* repair.cc in Sources */, - 5794EA2905855CDAE67515C65C7E5CE6 /* status.cc in Sources */, - E6715A42C554FAEF8EB27F36E877CA20 /* table.cc in Sources */, - 090678D7034ECF4A517F028B5AC595E2 /* table_builder.cc in Sources */, - 8DEB564DAACF581047405823582A7235 /* table_cache.cc in Sources */, - A183BD1108871F9318965F176B82698F /* testharness.cc in Sources */, - C8FC39092B2B902E7104CE205085EFDC /* two_level_iterator.cc in Sources */, - 53EC757569AC06A3E0A0270942925E7C /* version_edit.cc in Sources */, - 4C1A7F465A551AB24272477D3398AFAF /* version_set.cc in Sources */, - 213AE7061F97042A1277F1B4C4F13AFE /* write_batch.cc in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ADBEF7104660ED701544401F0AEFCA4F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ED781FD0390EF8635A826B3B14C440CC /* GDTCORAssert.m in Sources */, - DFAD176ADA312BEA0529E7B838FDBCFB /* GDTCORClock.m in Sources */, - 6884F18249527354885EA942C51A3350 /* GDTCORConsoleLogger.m in Sources */, - A7F784E4E56862F8FE6FF4F9027969BF /* GDTCORDataFuture.m in Sources */, - 71FA45ADE713CFA936FE6975075FC7F1 /* GDTCOREvent.m in Sources */, - 35113767172F29D52B69763FC8288A9F /* GDTCORFlatFileStorage.m in Sources */, - 245737FEABCF3FAD360B55F2DAD9337E /* GDTCORLifecycle.m in Sources */, - F2334D62F8ADA1D46807BB5F10F7F71C /* GDTCORPlatform.m in Sources */, - 68693C071B9836EC770A8CF091F4BC6A /* GDTCORReachability.m in Sources */, - EE2CFDF3946068BE4CA5824235CC15B6 /* GDTCORRegistrar.m in Sources */, - 8DD28787BCC2A2B7B311929312A962E2 /* GDTCORTransformer.m in Sources */, - 8FBC6101EE07730E9730A300A356F0E6 /* GDTCORTransport.m in Sources */, - A47E0D6D145338CB1E31C34A05FC4D22 /* GDTCORUploadCoordinator.m in Sources */, - CEE535DF3E8CA25232B7387253975836 /* GDTCORUploadPackage.m in Sources */, - DC00B8BAC2B87B7A3367D24EA0DB1B6C /* GoogleDataTransport-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D29FFB04B766D1D421440604C5623964 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - EC4C01441144260658084EF24BB4FE3D /* nanopb-dummy.m in Sources */, - 796A48ABBD99A855EF892338989223B6 /* pb_common.c in Sources */, - A5CFAA6948B4DBD6A65CA62F8C86DD05 /* pb_decode.c in Sources */, - 7AF1E3D44D555CF1560B25ABBB18DAD5 /* pb_encode.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DC748FCA9230EDCDDFCFB391312AF625 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - A04610B5385CA6177BC5656B0250303A /* FBLPromise+All.m in Sources */, - 99F16CB0C7366E30E911E0CE59932E2E /* FBLPromise+Always.m in Sources */, - 6258B140C90F66751CD6E1A18689EED3 /* FBLPromise+Any.m in Sources */, - 399D01EF9153FCFCB1B0B04EDBE568DE /* FBLPromise+Async.m in Sources */, - 1DBA3AEF493427D6625C09548CD0BA84 /* FBLPromise+Await.m in Sources */, - A0E974D12B01BDCBABDA5E13FAB7F60A /* FBLPromise+Catch.m in Sources */, - 2B9F0CD1745FD1F0EDC3E1B3AC4195C9 /* FBLPromise+Delay.m in Sources */, - A5828FCD71C9F92CEB40745B44E56D50 /* FBLPromise+Do.m in Sources */, - 2A6B53071B8F2316ACF6F7959F410736 /* FBLPromise+Race.m in Sources */, - 8308039D5AC50C9185DBE60C069B6ECA /* FBLPromise+Recover.m in Sources */, - 2E34AE998F7E523869224DC2B93E7B79 /* FBLPromise+Reduce.m in Sources */, - 851B8F4CD6FF25BA0510DF4B6A4F9FA5 /* FBLPromise+Retry.m in Sources */, - 6E58371477A4FE48963F06710FD6ACAC /* FBLPromise+Testing.m in Sources */, - 884CCF71D150619CD60C43D938699F8F /* FBLPromise+Then.m in Sources */, - 88C001E6B3B75F369C266C2C116A7DBE /* FBLPromise+Timeout.m in Sources */, - D94829308831E45ECE321B5BA370D635 /* FBLPromise+Validate.m in Sources */, - 9EC1EC9364B5CDFB31A12E9D5764FC6D /* FBLPromise+Wrap.m in Sources */, - DFDC2EED29D814BDB23DD0A4F7CEAE91 /* FBLPromise.m in Sources */, - A140D4912634751D944F96961A729678 /* FBLPromiseError.m in Sources */, - ED565D95563F4B8C38042F390537F8BD /* PromisesObjC-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 00FFA57F9CC490792E3DCAE3019E4960 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseCoreDiagnosticsInterop; - target = 5EB4B0B6DA6D5C0C3365733BEAA1C485 /* FirebaseCoreDiagnosticsInterop */; - targetProxy = 52EF848D791FD6DDA402C00E55148A89 /* PBXContainerItemProxy */; - }; - 05C75EA42F5967E620D78FEFEC522BA1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Firebase; - target = 072CEA044D2EF26F03496D5996BBF59F /* Firebase */; - targetProxy = FE00ED7FF4D83C4A11CDB1C602DD4DB9 /* PBXContainerItemProxy */; - }; - 08AF07E3A18727585148418198202BC4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleDataTransportCCTSupport; - target = F4F25FCAC51B51FD5F986EB939BF1F87 /* GoogleDataTransportCCTSupport */; - targetProxy = ADA3739072A1821D42EB71A7617E24FD /* PBXContainerItemProxy */; - }; - 1A76BA8905879F4B6A03DF488E3F6DBC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseCore; - target = 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */; - targetProxy = 57A4993B3210E1A73A547FE58FDFC4CA /* PBXContainerItemProxy */; - }; - 1C5D35E2072BC65722A5FBF9DFED4330 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseAuthInterop; - target = 8EC0F2618965C875A96BFDBEE5D9734C /* FirebaseAuthInterop */; - targetProxy = 47EA61FDD7BE25B0A48F212E5DE80D99 /* PBXContainerItemProxy */; - }; - 2265E310D5A7434D379EBC42CF13AC11 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = PromisesObjC; - target = 2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */; - targetProxy = 59C4EFE1F72233CA5B8C02CAC2E6BEA5 /* PBXContainerItemProxy */; - }; - 26FC2161961F82AD944794A5997EB784 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseCoreDiagnostics; - target = 620E05868772C10B4920DC7E324F2C87 /* FirebaseCoreDiagnostics */; - targetProxy = 7F91E721DFEDFBB5E30593902EB52CE4 /* PBXContainerItemProxy */; - }; - 29226BC32636F37D85BDAD06C455F391 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "leveldb-library"; - target = 9307B7A119490930CF70393AB529AAC1 /* leveldb-library */; - targetProxy = C61D3141DC2127BA7701380C913ECBAC /* PBXContainerItemProxy */; - }; - 3691D6761F1E170863ABF8C504320FB5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseCoreDiagnosticsInterop; - target = 5EB4B0B6DA6D5C0C3365733BEAA1C485 /* FirebaseCoreDiagnosticsInterop */; - targetProxy = 16E1CC5892022AC6D93441FE0947BE52 /* PBXContainerItemProxy */; - }; - 3EFC9F7575385B0BF97D99224E8F70F4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseCore; - target = 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */; - targetProxy = FD085A011A569371BA35C6F802B3758F /* PBXContainerItemProxy */; - }; - 43DE77A89C899E34324DCEF88910219F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleDataTransportCCTSupport; - target = F4F25FCAC51B51FD5F986EB939BF1F87 /* GoogleDataTransportCCTSupport */; - targetProxy = 3526AE8FAA4DD630EC08B2BF0649B0D3 /* PBXContainerItemProxy */; - }; - 46AEFC4310A18B1B432B0E21430D3CEB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleUtilities; - target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */; - targetProxy = 7C4ADE3DDF4CD2F8B1EB81B93C8ABE5F /* PBXContainerItemProxy */; - }; - 47BEAA6CB899E33E648464BE3CCF8998 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleDataTransport; - target = 5C0371EE948D0357B8EE0E34ABB44BF0 /* GoogleDataTransport */; - targetProxy = 3D48395263091A504DA16225B783026E /* PBXContainerItemProxy */; - }; - 5E85804415BEC75E80DCD84AC2B3734A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleDataTransport; - target = 5C0371EE948D0357B8EE0E34ABB44BF0 /* GoogleDataTransport */; - targetProxy = A95D6AA02759E76DD3232368EC9FA7F1 /* PBXContainerItemProxy */; - }; - 6E838F720E0A45A23453941FB7FAFCE6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = nanopb; - target = D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */; - targetProxy = EE2C7655BA40D7BB4854DF3E8E05AB46 /* PBXContainerItemProxy */; - }; - 7EC7F475FF034F08AA6359041957F5E1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "leveldb-library"; - target = 9307B7A119490930CF70393AB529AAC1 /* leveldb-library */; - targetProxy = B60388A49AD55B2CAE0D5EE55C2F0BAA /* PBXContainerItemProxy */; - }; - 80F51486E503FFA572D586D4646EBD73 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseDatabase; - target = 736AF68F6527ACF6B4A4C54728824A1C /* FirebaseDatabase */; - targetProxy = 17A83CD745ED9427888166B74CCA8AA6 /* PBXContainerItemProxy */; - }; - 844BAF623E2BCE1EABF79500E460BDD5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = nanopb; - target = D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */; - targetProxy = B85683E36FDD2784B99A2DC92732182A /* PBXContainerItemProxy */; - }; - A3C98ED32CF1CD1DC5D0821BD0DC0ABD /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseAuthInterop; - target = 8EC0F2618965C875A96BFDBEE5D9734C /* FirebaseAuthInterop */; - targetProxy = 8942FC65F5D10C793A3EF698556652F5 /* PBXContainerItemProxy */; - }; - B99B55B0C1626310699BE909D29A1772 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseCoreDiagnosticsInterop; - target = 5EB4B0B6DA6D5C0C3365733BEAA1C485 /* FirebaseCoreDiagnosticsInterop */; - targetProxy = 3D7F773867E49CB7532EFACCAC2F1714 /* PBXContainerItemProxy */; - }; - BE485465786C25F3EB4BD1736B954C7C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseDatabase; - target = 736AF68F6527ACF6B4A4C54728824A1C /* FirebaseDatabase */; - targetProxy = 0C3750C14BFEE6DCB91698B371188BD1 /* PBXContainerItemProxy */; - }; - C1955461A167D0D64799DE8DEDE093E7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseCoreDiagnostics; - target = 620E05868772C10B4920DC7E324F2C87 /* FirebaseCoreDiagnostics */; - targetProxy = 53B79F606CFFAA47F665B32E8F9C490A /* PBXContainerItemProxy */; - }; - C614A6DBEA2266B48117FD3CC0CA82A6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = PromisesObjC; - target = 2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */; - targetProxy = 7B60E879A1FD2B8A4E3F3B9B1CFC00B9 /* PBXContainerItemProxy */; - }; - C6978527C8AABEF32FE49D2C989DA8DC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleUtilities; - target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */; - targetProxy = B085E5DE0E10CF6717C5962F9C615468 /* PBXContainerItemProxy */; - }; - C8A870403BB3782CD599915F0F1B4DDA /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = nanopb; - target = D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */; - targetProxy = 783C76F76F51EC5DD0E2D622915C4850 /* PBXContainerItemProxy */; - }; - DBF84127F945C1C7D81DD8293C0605A2 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleUtilities; - target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */; - targetProxy = B8337BC1105FE08969FAB5579066DFEC /* PBXContainerItemProxy */; - }; - EE98EBE58BEA57ED772859CD1D7DB074 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseCore; - target = 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */; - targetProxy = 453F6F4B3941F2DDC491BA016BEFCC56 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 0A24C2FCB3AAD26B061B41F0D673CD62 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = FE464F7C6ACA43984F0CE6C4734378E8 /* FirebaseCoreDiagnostics.debug.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap"; - PRODUCT_MODULE_NAME = FirebaseCoreDiagnostics; - PRODUCT_NAME = FirebaseCoreDiagnostics; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 0A9C7033C43DA970703B1FC01A507D0B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 4517272EC7E584B42E4C304B2779D6B2 /* PromisesObjC.release.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/PromisesObjC/PromisesObjC-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/PromisesObjC/PromisesObjC.modulemap"; - PRODUCT_MODULE_NAME = FBLPromises; - PRODUCT_NAME = FBLPromises; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 0C540FBA9F8BDF37E2401F1205D14CD8 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 25F19CE11FB446E8B2C37D3F9C3B1BFC /* GoogleDataTransportCCTSupport.release.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap"; - PRODUCT_MODULE_NAME = GoogleDataTransportCCTSupport; - PRODUCT_NAME = GoogleDataTransportCCTSupport; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 173B32C16786AE9BD070158EA982FC86 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9BC93D2F01BC90BCC406F2269AFF64B1 /* FirebaseCoreDiagnosticsInterop.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 2256B83A484BC38D7B557EC97440626F /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 6D9B952974F6B3F89F6399C831D99CC2 /* FirebaseDatabase.debug.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseDatabase/FirebaseDatabase-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/FirebaseDatabase/FirebaseDatabase.modulemap"; - PRODUCT_MODULE_NAME = FirebaseDatabase; - PRODUCT_NAME = FirebaseDatabase; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 240C0E7E4C762BDC73CACA89D31FCD57 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9D85A9AAC775F25C1D9D72DCD09CE492 /* GoogleDataTransport.debug.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap"; - PRODUCT_MODULE_NAME = GoogleDataTransport; - PRODUCT_NAME = GoogleDataTransport; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 37E7FAA0F336A6E916D18548A9C73E55 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5F3DC736CC472D8C083FEE2D95582EF6 /* FirebaseCore.debug.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseCore/FirebaseCore-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/FirebaseCore/FirebaseCore.modulemap"; - PRODUCT_MODULE_NAME = FirebaseCore; - PRODUCT_NAME = FirebaseCore; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 473A0FE29D262CD7CB00C97691DEE08F /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 24C765C6EE99FAF5BDC49CFE9E15D8A5 /* Firebase.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 47C91D6762B8F154BD281AB745C8CE65 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3E54B1318AB1AA3CC7468878C8B0C39E /* GoogleDataTransportCCTSupport.debug.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap"; - PRODUCT_MODULE_NAME = GoogleDataTransportCCTSupport; - PRODUCT_NAME = GoogleDataTransportCCTSupport; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 4F2A98C4DF268BF6C25EB20564DBBD22 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D2C19F3B7A322A65FA2CC3F20A6DF678 /* leveldb-library.release.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/leveldb-library/leveldb-library-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/leveldb-library/leveldb-library-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/leveldb-library/leveldb-library.modulemap"; - PRODUCT_MODULE_NAME = leveldb; - PRODUCT_NAME = leveldb; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 5020C73200112D262BB51202AD477229 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5CE08AC03F18A07FFDE865B02C63441E /* nanopb.debug.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/nanopb/nanopb-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/nanopb/nanopb-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/nanopb/nanopb.modulemap"; - PRODUCT_MODULE_NAME = nanopb; - PRODUCT_NAME = nanopb; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 5790832C657231A09F1765DF32DA3791 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A0D2B9693657353DC78B1C8AA8E503F4 /* FirebaseCoreDiagnosticsInterop.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 57FD510461D6BCD2E0F1115C16736F74 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 59CB9FB4C1679210BE96723BFE245F15 /* FirebaseCoreDiagnostics.release.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap"; - PRODUCT_MODULE_NAME = FirebaseCoreDiagnostics; - PRODUCT_NAME = FirebaseCoreDiagnostics; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 63672522E1EF37970DCF7EC011233B79 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C26746AB2A5D53AF8402A1B015403633 /* GoogleUtilities.debug.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities.modulemap"; - PRODUCT_MODULE_NAME = GoogleUtilities; - PRODUCT_NAME = GoogleUtilities; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 649956FE5C838C56A4467F90609FE369 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 33ECE23F2ECD946250E06C49AD38D464 /* PromisesObjC.debug.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/PromisesObjC/PromisesObjC-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/PromisesObjC/PromisesObjC.modulemap"; - PRODUCT_MODULE_NAME = FBLPromises; - PRODUCT_NAME = FBLPromises; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 6C61D818ACD3C2C116FED6A9C67E91B4 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.4; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Debug; - }; - 7271519415E4CF37A2618B9A4C9DC607 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7E58E1A27F0803C11F2250F1DCEC0741 /* GoogleUtilities.release.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities.modulemap"; - PRODUCT_MODULE_NAME = GoogleUtilities; - PRODUCT_NAME = GoogleUtilities; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 77E6B2764CA69A438683AF3AC3455E7C /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 41FD95F75B109D21E5C0FF3B47B92CEA /* FirebaseAuthInterop.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 7DC5F11AFBEAE473E8D3C24A2D11338D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.4; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Release; - }; - 8A11838E987B59E771EC052874D9746D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D3C76A00399095A4DAA2020273DEE53B /* leveldb-library.debug.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/leveldb-library/leveldb-library-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/leveldb-library/leveldb-library-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/leveldb-library/leveldb-library.modulemap"; - PRODUCT_MODULE_NAME = leveldb; - PRODUCT_NAME = leveldb; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 93413C8724F4DCAE7611336765C99E22 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 0D46DA763E703DDDB7846A3B498EA469 /* Pods-openTok.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-openTok/Pods-openTok-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.4; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-openTok/Pods-openTok.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - AB5559AE509EAACE59D1C1AFADCE50F8 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D94F03D0CD3C49BEAAAACD23DB190B70 /* Firebase.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - C3FBDFFE773A88AF370EA14F7017E64A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 70C80FE5FEC8E37CDC7A3FECCC392C9C /* nanopb.release.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/nanopb/nanopb-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/nanopb/nanopb-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/nanopb/nanopb.modulemap"; - PRODUCT_MODULE_NAME = nanopb; - PRODUCT_NAME = nanopb; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - CA1097DBD4802F7F2C98AEBD865E30BB /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 587ECC487233834DCC0BDFB400FD82FE /* FirebaseDatabase.release.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseDatabase/FirebaseDatabase-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/FirebaseDatabase/FirebaseDatabase.modulemap"; - PRODUCT_MODULE_NAME = FirebaseDatabase; - PRODUCT_NAME = FirebaseDatabase; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - CD7758CAA50836BC433D2EB460867CA1 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3A78563412DD19D641BB6F1F170DA015 /* FirebaseCore.release.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseCore/FirebaseCore-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/FirebaseCore/FirebaseCore.modulemap"; - PRODUCT_MODULE_NAME = FirebaseCore; - PRODUCT_NAME = FirebaseCore; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - D4B1E620A462A0891D6736B9DF7167C3 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 6AFC8703934BB1696C9104DD93F8811C /* FirebaseAuthInterop.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - D9D31A44FF011A93F7C3BE7CBB97B625 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5FD0137BAD2B0EED669DF6AC601CAB94 /* Pods-openTok.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-openTok/Pods-openTok-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.4; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-openTok/Pods-openTok.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - DEAE083C9B7AC4501FED8E91710C90C3 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 89813D1225296221B8A1CD2141389CB2 /* GoogleDataTransport.release.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap"; - PRODUCT_MODULE_NAME = GoogleDataTransport; - PRODUCT_NAME = GoogleDataTransport; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 05B49849CA3C215D143DB2840104B4FA /* Build configuration list for PBXNativeTarget "GoogleDataTransport" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 240C0E7E4C762BDC73CACA89D31FCD57 /* Debug */, - DEAE083C9B7AC4501FED8E91710C90C3 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 16D35C68618DC0606DA4F1588993ACAC /* Build configuration list for PBXNativeTarget "Pods-openTok" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 93413C8724F4DCAE7611336765C99E22 /* Debug */, - D9D31A44FF011A93F7C3BE7CBB97B625 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 3435C2ED50CB457766D806A0A6BB12E6 /* Build configuration list for PBXNativeTarget "FirebaseCore" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 37E7FAA0F336A6E916D18548A9C73E55 /* Debug */, - CD7758CAA50836BC433D2EB460867CA1 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 6C61D818ACD3C2C116FED6A9C67E91B4 /* Debug */, - 7DC5F11AFBEAE473E8D3C24A2D11338D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 53DAF387F36CBF8A88540E369A919B2A /* Build configuration list for PBXAggregateTarget "FirebaseCoreDiagnosticsInterop" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 173B32C16786AE9BD070158EA982FC86 /* Debug */, - 5790832C657231A09F1765DF32DA3791 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 687F852DB15D7E0F2C84046A996FF2D6 /* Build configuration list for PBXNativeTarget "leveldb-library" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8A11838E987B59E771EC052874D9746D /* Debug */, - 4F2A98C4DF268BF6C25EB20564DBBD22 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 73D7039327B012B3B4982F70E1071971 /* Build configuration list for PBXNativeTarget "PromisesObjC" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 649956FE5C838C56A4467F90609FE369 /* Debug */, - 0A9C7033C43DA970703B1FC01A507D0B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 7D9B6248E3966009CBADAFB74A1F2C6A /* Build configuration list for PBXAggregateTarget "Firebase" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - AB5559AE509EAACE59D1C1AFADCE50F8 /* Debug */, - 473A0FE29D262CD7CB00C97691DEE08F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8F6C4E35B62D2E11DF31C69F295F71C9 /* Build configuration list for PBXNativeTarget "GoogleDataTransportCCTSupport" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 47C91D6762B8F154BD281AB745C8CE65 /* Debug */, - 0C540FBA9F8BDF37E2401F1205D14CD8 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 99106C33EE595D192242F546552E9F40 /* Build configuration list for PBXAggregateTarget "FirebaseAuthInterop" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D4B1E620A462A0891D6736B9DF7167C3 /* Debug */, - 77E6B2764CA69A438683AF3AC3455E7C /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - A6C1285A3A85AD57E7A34AC0F64F6E3D /* Build configuration list for PBXNativeTarget "GoogleUtilities" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 63672522E1EF37970DCF7EC011233B79 /* Debug */, - 7271519415E4CF37A2618B9A4C9DC607 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C6158C953A35D1170546EC7F8DA13EF9 /* Build configuration list for PBXNativeTarget "FirebaseCoreDiagnostics" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 0A24C2FCB3AAD26B061B41F0D673CD62 /* Debug */, - 57FD510461D6BCD2E0F1115C16736F74 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - CEF916B3F6E10D600D494DF7F04648A7 /* Build configuration list for PBXNativeTarget "nanopb" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5020C73200112D262BB51202AD477229 /* Debug */, - C3FBDFFE773A88AF370EA14F7017E64A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D907BE725A2E71CEBEB020517B9168DC /* Build configuration list for PBXNativeTarget "FirebaseDatabase" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 2256B83A484BC38D7B557EC97440626F /* Debug */, - CA1097DBD4802F7F2C98AEBD865E30BB /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; -} diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/Firebase.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/Firebase.xcscheme deleted file mode 100644 index ab9e834..0000000 --- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/Firebase.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "1100" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForAnalyzing = "YES" - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "072CEA044D2EF26F03496D5996BBF59F" - BuildableName = "Firebase" - BlueprintName = "Firebase" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <AdditionalOptions> - </AdditionalOptions> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - debugServiceExtension = "internal" - buildConfiguration = "Debug" - allowLocationSimulation = "YES"> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - debugDocumentVersioning = "YES" - buildConfiguration = "Release" - shouldUseLaunchSchemeArgsEnv = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseAuthInterop.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseAuthInterop.xcscheme deleted file mode 100644 index 7202e6b..0000000 --- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseAuthInterop.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "1100" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForAnalyzing = "YES" - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "8EC0F2618965C875A96BFDBEE5D9734C" - BuildableName = "FirebaseAuthInterop" - BlueprintName = "FirebaseAuthInterop" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <AdditionalOptions> - </AdditionalOptions> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - debugServiceExtension = "internal" - buildConfiguration = "Debug" - allowLocationSimulation = "YES"> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - debugDocumentVersioning = "YES" - buildConfiguration = "Release" - shouldUseLaunchSchemeArgsEnv = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCore.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCore.xcscheme deleted file mode 100644 index a4c140c..0000000 --- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCore.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "1100" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForAnalyzing = "YES" - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "4402AFF83DBDC4DD07E198685FDC2DF2" - BuildableName = "FirebaseCore.framework" - BlueprintName = "FirebaseCore" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <AdditionalOptions> - </AdditionalOptions> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - debugServiceExtension = "internal" - buildConfiguration = "Debug" - allowLocationSimulation = "YES"> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - debugDocumentVersioning = "YES" - buildConfiguration = "Release" - shouldUseLaunchSchemeArgsEnv = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCoreDiagnostics.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCoreDiagnostics.xcscheme deleted file mode 100644 index 21f827d..0000000 --- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCoreDiagnostics.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "1100" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForAnalyzing = "YES" - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "620E05868772C10B4920DC7E324F2C87" - BuildableName = "FirebaseCoreDiagnostics.framework" - BlueprintName = "FirebaseCoreDiagnostics" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <AdditionalOptions> - </AdditionalOptions> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - debugServiceExtension = "internal" - buildConfiguration = "Debug" - allowLocationSimulation = "YES"> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - debugDocumentVersioning = "YES" - buildConfiguration = "Release" - shouldUseLaunchSchemeArgsEnv = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCoreDiagnosticsInterop.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCoreDiagnosticsInterop.xcscheme deleted file mode 100644 index 7a77896..0000000 --- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseCoreDiagnosticsInterop.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "1100" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForAnalyzing = "YES" - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "5EB4B0B6DA6D5C0C3365733BEAA1C485" - BuildableName = "FirebaseCoreDiagnosticsInterop" - BlueprintName = "FirebaseCoreDiagnosticsInterop" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <AdditionalOptions> - </AdditionalOptions> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - debugServiceExtension = "internal" - buildConfiguration = "Debug" - allowLocationSimulation = "YES"> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - debugDocumentVersioning = "YES" - buildConfiguration = "Release" - shouldUseLaunchSchemeArgsEnv = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseDatabase.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseDatabase.xcscheme deleted file mode 100644 index 0756d3d..0000000 --- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/FirebaseDatabase.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "1100" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForAnalyzing = "YES" - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "736AF68F6527ACF6B4A4C54728824A1C" - BuildableName = "FirebaseDatabase.framework" - BlueprintName = "FirebaseDatabase" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <AdditionalOptions> - </AdditionalOptions> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - debugServiceExtension = "internal" - buildConfiguration = "Debug" - allowLocationSimulation = "YES"> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - debugDocumentVersioning = "YES" - buildConfiguration = "Release" - shouldUseLaunchSchemeArgsEnv = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleDataTransport.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleDataTransport.xcscheme deleted file mode 100644 index 6208c32..0000000 --- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleDataTransport.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "1100" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForAnalyzing = "YES" - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "5C0371EE948D0357B8EE0E34ABB44BF0" - BuildableName = "GoogleDataTransport.framework" - BlueprintName = "GoogleDataTransport" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <AdditionalOptions> - </AdditionalOptions> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - debugServiceExtension = "internal" - buildConfiguration = "Debug" - allowLocationSimulation = "YES"> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - debugDocumentVersioning = "YES" - buildConfiguration = "Release" - shouldUseLaunchSchemeArgsEnv = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleDataTransportCCTSupport.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleDataTransportCCTSupport.xcscheme deleted file mode 100644 index 968a5eb..0000000 --- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleDataTransportCCTSupport.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "1100" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForAnalyzing = "YES" - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "F4F25FCAC51B51FD5F986EB939BF1F87" - BuildableName = "GoogleDataTransportCCTSupport.framework" - BlueprintName = "GoogleDataTransportCCTSupport" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <AdditionalOptions> - </AdditionalOptions> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - debugServiceExtension = "internal" - buildConfiguration = "Debug" - allowLocationSimulation = "YES"> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - debugDocumentVersioning = "YES" - buildConfiguration = "Release" - shouldUseLaunchSchemeArgsEnv = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleUtilities.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleUtilities.xcscheme deleted file mode 100644 index 3915f21..0000000 --- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/GoogleUtilities.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "1100" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForAnalyzing = "YES" - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "8D7F5D5DD528D21A72DC87ADA5B12E2D" - BuildableName = "GoogleUtilities.framework" - BlueprintName = "GoogleUtilities" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <AdditionalOptions> - </AdditionalOptions> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - debugServiceExtension = "internal" - buildConfiguration = "Debug" - allowLocationSimulation = "YES"> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - debugDocumentVersioning = "YES" - buildConfiguration = "Release" - shouldUseLaunchSchemeArgsEnv = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/Pods-openTok.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/Pods-openTok.xcscheme deleted file mode 100644 index 683e3aa..0000000 --- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/Pods-openTok.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "1100" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "F4BE744C6379A956B2D5CC93D8F1EE2E" - BuildableName = "Pods_openTok.framework" - BlueprintName = "Pods-openTok" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - buildConfiguration = "Debug" - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES"> - <Testables> - </Testables> - </TestAction> - <LaunchAction - buildConfiguration = "Debug" - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - debugServiceExtension = "internal" - allowLocationSimulation = "YES"> - </LaunchAction> - <ProfileAction - buildConfiguration = "Release" - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - debugDocumentVersioning = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/PromisesObjC.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/PromisesObjC.xcscheme deleted file mode 100644 index d1487d6..0000000 --- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/PromisesObjC.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "1100" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "2BBF7206D7FAC92C82A042A99C4A98F8" - BuildableName = "FBLPromises.framework" - BlueprintName = "PromisesObjC" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - buildConfiguration = "Debug" - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES"> - <Testables> - </Testables> - </TestAction> - <LaunchAction - buildConfiguration = "Debug" - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - debugServiceExtension = "internal" - allowLocationSimulation = "YES"> - </LaunchAction> - <ProfileAction - buildConfiguration = "Release" - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - debugDocumentVersioning = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/leveldb-library.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/leveldb-library.xcscheme deleted file mode 100644 index b199804..0000000 --- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/leveldb-library.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "1100" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "9307B7A119490930CF70393AB529AAC1" - BuildableName = "leveldb.framework" - BlueprintName = "leveldb-library" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - buildConfiguration = "Debug" - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES"> - <Testables> - </Testables> - </TestAction> - <LaunchAction - buildConfiguration = "Debug" - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - debugServiceExtension = "internal" - allowLocationSimulation = "YES"> - </LaunchAction> - <ProfileAction - buildConfiguration = "Release" - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - debugDocumentVersioning = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/nanopb.xcscheme b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/nanopb.xcscheme deleted file mode 100644 index 2183889..0000000 --- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/nanopb.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - LastUpgradeVersion = "1100" - version = "1.3"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForAnalyzing = "YES" - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "D2B5E7DCCBBFB32341D857D01211A1A3" - BuildableName = "nanopb.framework" - BlueprintName = "nanopb" - ReferencedContainer = "container:Pods.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Debug"> - <AdditionalOptions> - </AdditionalOptions> - </TestAction> - <LaunchAction - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - debugServiceExtension = "internal" - buildConfiguration = "Debug" - allowLocationSimulation = "YES"> - <AdditionalOptions> - </AdditionalOptions> - </LaunchAction> - <ProfileAction - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - debugDocumentVersioning = "YES" - buildConfiguration = "Release" - shouldUseLaunchSchemeArgsEnv = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/xcschememanagement.plist b/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index c3d729a..0000000 --- a/assign5/openTok/Pods/Pods.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,102 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>SchemeUserState</key> - <dict> - <key>Firebase.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>0</integer> - </dict> - <key>FirebaseAuthInterop.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>1</integer> - </dict> - <key>FirebaseCore.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>2</integer> - </dict> - <key>FirebaseCoreDiagnostics.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>3</integer> - </dict> - <key>FirebaseCoreDiagnosticsInterop.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>4</integer> - </dict> - <key>FirebaseDatabase.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>5</integer> - </dict> - <key>GoogleDataTransport.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>6</integer> - </dict> - <key>GoogleDataTransportCCTSupport.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>7</integer> - </dict> - <key>GoogleUtilities.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>8</integer> - </dict> - <key>Pods-openTok.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>11</integer> - </dict> - <key>PromisesObjC.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>12</integer> - </dict> - <key>leveldb-library.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>9</integer> - </dict> - <key>nanopb.xcscheme</key> - <dict> - <key>isShown</key> - <false/> - <key>orderHint</key> - <integer>10</integer> - </dict> - </dict> - <key>SuppressBuildableAutocreation</key> - <dict/> -</dict> -</plist> diff --git a/assign5/openTok/Pods/PromisesObjC/LICENSE b/assign5/openTok/Pods/PromisesObjC/LICENSE deleted file mode 100644 index d645695..0000000 --- a/assign5/openTok/Pods/PromisesObjC/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/assign5/openTok/Pods/PromisesObjC/README.md b/assign5/openTok/Pods/PromisesObjC/README.md deleted file mode 100644 index 0eecbb1..0000000 --- a/assign5/openTok/Pods/PromisesObjC/README.md +++ /dev/null @@ -1,60 +0,0 @@ -[](LICENSE) -[](https://travis-ci.org/google/promises) -[](https://gitter.im/google/promises) - - - - - -# Promises - -Promises is a modern framework that provides a synchronization construct for -Objective-C and Swift to facilitate writing asynchronous code. - -* [Introduction](g3doc/index.md) - * [The problem with async - code](g3doc/index.md#the-problem-with-async-code) - * [Promises to the rescue](g3doc/index.md#promises-to-the-rescue) - * [What is a promise?](g3doc/index.md#what-is-a-promise) -* [Framework](g3doc/index.md#framework) - * [Features](g3doc/index.md#features) - * [Benchmark](g3doc/index.md#benchmark) -* [Getting started](g3doc/index.md#getting-started) - * [Add dependency](g3doc/index.md#add-dependency) - * [Import](g3doc/index.md#import) - * [Adopt](g3doc/index.md#adopt) -* [Basics](g3doc/index.md#basics) - * [Creating promises](g3doc/index.md#creating-promises) - * [Async](g3doc/index.md#async) - * [Do](g3doc/index.md#do) - * [Pending](g3doc/index.md#pending) - * [Resolved](g3doc/index.md#create-a-resolved-promise) - * [Observing fulfillment](g3doc/index.md#observing-fulfillment) - * [Then](g3doc/index.md#then) - * [Observing rejection](g3doc/index.md#observing-rejection) - * [Catch](g3doc/index.md#catch) -* [Extensions](g3doc/index.md#extensions) - * [All](g3doc/index.md#all) - * [Always](g3doc/index.md#always) - * [Any](g3doc/index.md#any) - * [Await](g3doc/index.md#await) - * [Delay](g3doc/index.md#delay) - * [Race](g3doc/index.md#race) - * [Recover](g3doc/index.md#recover) - * [Reduce](g3doc/index.md#reduce) - * [Retry](g3doc/index.md#retry) - * [Timeout](g3doc/index.md#timeout) - * [Validate](g3doc/index.md#validate) - * [Wrap](g3doc/index.md#wrap) -* [Advanced topics](g3doc/index.md#advanced-topics) - * [Default dispatch queue](g3doc/index.md#default-dispatch-queue) - * [Ownership and retain - cycles](g3doc/index.md#ownership-and-retain-cycles) - * [Testing](g3doc/index.md#testing) - * [Objective-C <-> Swift - interoperability](g3doc/index.md#objective-c---swift-interoperability) - * [Dot-syntax in Objective-C](g3doc/index.md#dot-syntax-in-objective-c) -* [Anti-patterns](g3doc/index.md#anti-patterns) - * [Broken chain](g3doc/index.md#broken-chain) - * [Nested promises](g3doc/index.md#nested-promises) diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+All.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+All.m deleted file mode 100644 index c21f30e..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+All.m +++ /dev/null @@ -1,86 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+All.h" - -#import "FBLPromise+Async.h" -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (AllAdditions) - -+ (FBLPromise<NSArray *> *)all:(NSArray *)promises { - return [self onQueue:self.defaultDispatchQueue all:promises]; -} - -+ (FBLPromise<NSArray *> *)onQueue:(dispatch_queue_t)queue all:(NSArray *)allPromises { - NSParameterAssert(queue); - NSParameterAssert(allPromises); - - if (allPromises.count == 0) { - return [[FBLPromise alloc] initWithResolution:@[]]; - } - NSMutableArray *promises = [allPromises mutableCopy]; - return [FBLPromise - onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { - for (NSUInteger i = 0; i < promises.count; ++i) { - id promise = promises[i]; - if ([promise isKindOfClass:self]) { - continue; - } else if ([promise isKindOfClass:[NSError class]]) { - reject(promise); - return; - } else { - [promises replaceObjectAtIndex:i - withObject:[[FBLPromise alloc] initWithResolution:promise]]; - } - } - for (FBLPromise *promise in promises) { - [promise observeOnQueue:queue - fulfill:^(id __unused _) { - // Wait until all are fulfilled. - for (FBLPromise *promise in promises) { - if (!promise.isFulfilled) { - return; - } - } - // If called multiple times, only the first one affects the result. - fulfill([promises valueForKey:NSStringFromSelector(@selector(value))]); - } - reject:^(NSError *error) { - reject(error); - }]; - } - }]; -} - -@end - -@implementation FBLPromise (DotSyntax_AllAdditions) - -+ (FBLPromise<NSArray *> * (^)(NSArray *))all { - return ^(NSArray<FBLPromise *> *promises) { - return [self all:promises]; - }; -} - -+ (FBLPromise<NSArray *> * (^)(dispatch_queue_t, NSArray *))allOn { - return ^(dispatch_queue_t queue, NSArray<FBLPromise *> *promises) { - return [self onQueue:queue all:promises]; - }; -} - -@end diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Always.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Always.m deleted file mode 100644 index 6927442..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Always.m +++ /dev/null @@ -1,58 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Always.h" - -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (AlwaysAdditions) - -- (FBLPromise *)always:(FBLPromiseAlwaysWorkBlock)work { - return [self onQueue:FBLPromise.defaultDispatchQueue always:work]; -} - -- (FBLPromise *)onQueue:(dispatch_queue_t)queue always:(FBLPromiseAlwaysWorkBlock)work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self chainOnQueue:queue - chainedFulfill:^id(id value) { - work(); - return value; - } - chainedReject:^id(NSError *error) { - work(); - return error; - }]; -} - -@end - -@implementation FBLPromise (DotSyntax_AlwaysAdditions) - -- (FBLPromise * (^)(FBLPromiseAlwaysWorkBlock))always { - return ^(FBLPromiseAlwaysWorkBlock work) { - return [self always:work]; - }; -} - -- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseAlwaysWorkBlock))alwaysOn { - return ^(dispatch_queue_t queue, FBLPromiseAlwaysWorkBlock work) { - return [self onQueue:queue always:work]; - }; -} - -@end diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Any.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Any.m deleted file mode 100644 index e101c98..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Any.m +++ /dev/null @@ -1,112 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Any.h" - -#import "FBLPromise+Async.h" -#import "FBLPromisePrivate.h" - -static NSArray *FBLPromiseCombineValuesAndErrors(NSArray<FBLPromise *> *promises) { - NSMutableArray *combinedValuesAndErrors = [[NSMutableArray alloc] init]; - for (FBLPromise *promise in promises) { - if (promise.isFulfilled) { - [combinedValuesAndErrors addObject:promise.value ?: [NSNull null]]; - continue; - } - if (promise.isRejected) { - [combinedValuesAndErrors addObject:promise.error]; - continue; - } - assert(!promise.isPending); - }; - return combinedValuesAndErrors; -} - -@implementation FBLPromise (AnyAdditions) - -+ (FBLPromise<NSArray *> *)any:(NSArray *)promises { - return [self onQueue:FBLPromise.defaultDispatchQueue any:promises]; -} - -+ (FBLPromise<NSArray *> *)onQueue:(dispatch_queue_t)queue any:(NSArray *)anyPromises { - NSParameterAssert(queue); - NSParameterAssert(anyPromises); - - if (anyPromises.count == 0) { - return [[FBLPromise alloc] initWithResolution:@[]]; - } - NSMutableArray *promises = [anyPromises mutableCopy]; - return [FBLPromise - onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { - for (NSUInteger i = 0; i < promises.count; ++i) { - id promise = promises[i]; - if ([promise isKindOfClass:self]) { - continue; - } else { - [promises replaceObjectAtIndex:i - withObject:[[FBLPromise alloc] initWithResolution:promise]]; - } - } - for (FBLPromise *promise in promises) { - [promise observeOnQueue:queue - fulfill:^(id __unused _) { - // Wait until all are resolved. - for (FBLPromise *promise in promises) { - if (promise.isPending) { - return; - } - } - // If called multiple times, only the first one affects the result. - fulfill(FBLPromiseCombineValuesAndErrors(promises)); - } - reject:^(NSError *error) { - BOOL atLeastOneIsFulfilled = NO; - for (FBLPromise *promise in promises) { - if (promise.isPending) { - return; - } - if (promise.isFulfilled) { - atLeastOneIsFulfilled = YES; - } - } - if (atLeastOneIsFulfilled) { - fulfill(FBLPromiseCombineValuesAndErrors(promises)); - } else { - reject(error); - } - }]; - } - }]; -} - -@end - -@implementation FBLPromise (DotSyntax_AnyAdditions) - -+ (FBLPromise<NSArray *> * (^)(NSArray *))any { - return ^(NSArray *promises) { - return [self any:promises]; - }; -} - -+ (FBLPromise<NSArray *> * (^)(dispatch_queue_t, NSArray *))anyOn { - return ^(dispatch_queue_t queue, NSArray *promises) { - return [self onQueue:queue any:promises]; - }; -} - -@end diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Async.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Async.m deleted file mode 100644 index 249158c..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Async.m +++ /dev/null @@ -1,70 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Async.h" - -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (AsyncAdditions) - -+ (instancetype)async:(FBLPromiseAsyncWorkBlock)work { - return [self onQueue:self.defaultDispatchQueue async:work]; -} - -+ (instancetype)onQueue:(dispatch_queue_t)queue async:(FBLPromiseAsyncWorkBlock)work { - NSParameterAssert(queue); - NSParameterAssert(work); - - FBLPromise *promise = [[FBLPromise alloc] initPending]; - dispatch_group_async(FBLPromise.dispatchGroup, queue, ^{ - work( - ^(id __nullable value) { - if ([value isKindOfClass:[FBLPromise class]]) { - [(FBLPromise *)value observeOnQueue:queue - fulfill:^(id __nullable value) { - [promise fulfill:value]; - } - reject:^(NSError *error) { - [promise reject:error]; - }]; - } else { - [promise fulfill:value]; - } - }, - ^(NSError *error) { - [promise reject:error]; - }); - }); - return promise; -} - -@end - -@implementation FBLPromise (DotSyntax_AsyncAdditions) - -+ (FBLPromise* (^)(FBLPromiseAsyncWorkBlock))async { - return ^(FBLPromiseAsyncWorkBlock work) { - return [self async:work]; - }; -} - -+ (FBLPromise* (^)(dispatch_queue_t, FBLPromiseAsyncWorkBlock))asyncOn { - return ^(dispatch_queue_t queue, FBLPromiseAsyncWorkBlock work) { - return [self onQueue:queue async:work]; - }; -} - -@end diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Await.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Await.m deleted file mode 100644 index ea3b87a..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Await.m +++ /dev/null @@ -1,48 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Await.h" - -#import "FBLPromisePrivate.h" - -id __nullable FBLPromiseAwait(FBLPromise *promise, NSError **outError) { - assert(promise); - - static dispatch_once_t onceToken; - static dispatch_queue_t queue; - dispatch_once(&onceToken, ^{ - queue = dispatch_queue_create("com.google.FBLPromises.Await", DISPATCH_QUEUE_CONCURRENT); - }); - dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); - id __block resolution; - NSError __block *blockError; - [promise chainOnQueue:queue - chainedFulfill:^id(id value) { - resolution = value; - dispatch_semaphore_signal(semaphore); - return value; - } - chainedReject:^id(NSError *error) { - blockError = error; - dispatch_semaphore_signal(semaphore); - return error; - }]; - dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); - if (outError) { - *outError = blockError; - } - return resolution; -} diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Catch.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Catch.m deleted file mode 100644 index 25e8ce6..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Catch.m +++ /dev/null @@ -1,55 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Catch.h" - -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (CatchAdditions) - -- (FBLPromise *)catch:(FBLPromiseCatchWorkBlock)reject { - return [self onQueue:FBLPromise.defaultDispatchQueue catch:reject]; -} - -- (FBLPromise *)onQueue:(dispatch_queue_t)queue catch:(FBLPromiseCatchWorkBlock)reject { - NSParameterAssert(queue); - NSParameterAssert(reject); - - return [self chainOnQueue:queue - chainedFulfill:nil - chainedReject:^id(NSError *error) { - reject(error); - return error; - }]; -} - -@end - -@implementation FBLPromise (DotSyntax_CatchAdditions) - -- (FBLPromise* (^)(FBLPromiseCatchWorkBlock))catch { - return ^(FBLPromiseCatchWorkBlock catch) { - return [self catch:catch]; - }; -} - -- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseCatchWorkBlock))catchOn { - return ^(dispatch_queue_t queue, FBLPromiseCatchWorkBlock catch) { - return [self onQueue:queue catch:catch]; - }; -} - -@end diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Delay.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Delay.m deleted file mode 100644 index ce94c33..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Delay.m +++ /dev/null @@ -1,59 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Delay.h" - -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (DelayAdditions) - -- (FBLPromise *)delay:(NSTimeInterval)interval { - return [self onQueue:FBLPromise.defaultDispatchQueue delay:interval]; -} - -- (FBLPromise *)onQueue:(dispatch_queue_t)queue delay:(NSTimeInterval)interval { - NSParameterAssert(queue); - - FBLPromise *promise = [[FBLPromise alloc] initPending]; - [self observeOnQueue:queue - fulfill:^(id __nullable value) { - dispatch_after(dispatch_time(0, (int64_t)(interval * NSEC_PER_SEC)), queue, ^{ - [promise fulfill:value]; - }); - } - reject:^(NSError *error) { - [promise reject:error]; - }]; - return promise; -} - -@end - -@implementation FBLPromise (DotSyntax_DelayAdditions) - -- (FBLPromise * (^)(NSTimeInterval))delay { - return ^(NSTimeInterval interval) { - return [self delay:interval]; - }; -} - -- (FBLPromise * (^)(dispatch_queue_t, NSTimeInterval))delayOn { - return ^(dispatch_queue_t queue, NSTimeInterval interval) { - return [self onQueue:queue delay:interval]; - }; -} - -@end diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Do.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Do.m deleted file mode 100644 index eb7e10d..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Do.m +++ /dev/null @@ -1,59 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Do.h" - -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (DoAdditions) - -+ (instancetype)do:(FBLPromiseDoWorkBlock)work { - return [self onQueue:self.defaultDispatchQueue do:work]; -} - -+ (instancetype)onQueue:(dispatch_queue_t)queue do:(FBLPromiseDoWorkBlock)work { - NSParameterAssert(queue); - NSParameterAssert(work); - - FBLPromise *promise = [[FBLPromise alloc] initPending]; - dispatch_group_async(FBLPromise.dispatchGroup, queue, ^{ - id value = work(); - if ([value isKindOfClass:[FBLPromise class]]) { - [(FBLPromise *)value observeOnQueue:queue - fulfill:^(id __nullable value) { - [promise fulfill:value]; - } - reject:^(NSError *error) { - [promise reject:error]; - }]; - } else { - [promise fulfill:value]; - } - }); - return promise; -} - -@end - -@implementation FBLPromise (DotSyntax_DoAdditions) - -+ (FBLPromise* (^)(dispatch_queue_t, FBLPromiseDoWorkBlock))doOn { - return ^(dispatch_queue_t queue, FBLPromiseDoWorkBlock work) { - return [self onQueue:queue do:work]; - }; -} - -@end diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Race.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Race.m deleted file mode 100644 index b5bd9f1..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Race.m +++ /dev/null @@ -1,65 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Race.h" - -#import "FBLPromise+Async.h" -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (RaceAdditions) - -+ (instancetype)race:(NSArray *)promises { - return [self onQueue:self.defaultDispatchQueue race:promises]; -} - -+ (instancetype)onQueue:(dispatch_queue_t)queue race:(NSArray *)racePromises { - NSParameterAssert(queue); - NSAssert(racePromises.count > 0, @"No promises to observe"); - - NSArray *promises = [racePromises copy]; - return [FBLPromise onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { - for (id promise in promises) { - if (![promise isKindOfClass:self]) { - fulfill(promise); - return; - } - } - // Subscribe all, but only the first one to resolve will change - // the resulting promise's state. - for (FBLPromise *promise in promises) { - [promise observeOnQueue:queue fulfill:fulfill reject:reject]; - } - }]; -} - -@end - -@implementation FBLPromise (DotSyntax_RaceAdditions) - -+ (FBLPromise * (^)(NSArray *))race { - return ^(NSArray *promises) { - return [self race:promises]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, NSArray *))raceOn { - return ^(dispatch_queue_t queue, NSArray *promises) { - return [self onQueue:queue race:promises]; - }; -} - -@end diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Recover.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Recover.m deleted file mode 100644 index 0c9326a..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Recover.m +++ /dev/null @@ -1,54 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Recover.h" - -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (RecoverAdditions) - -- (FBLPromise *)recover:(FBLPromiseRecoverWorkBlock)recovery { - return [self onQueue:FBLPromise.defaultDispatchQueue recover:recovery]; -} - -- (FBLPromise *)onQueue:(dispatch_queue_t)queue recover:(FBLPromiseRecoverWorkBlock)recovery { - NSParameterAssert(queue); - NSParameterAssert(recovery); - - return [self chainOnQueue:queue - chainedFulfill:nil - chainedReject:^id(NSError *error) { - return recovery(error); - }]; -} - -@end - -@implementation FBLPromise (DotSyntax_RecoverAdditions) - -- (FBLPromise * (^)(FBLPromiseRecoverWorkBlock))recover { - return ^(FBLPromiseRecoverWorkBlock recovery) { - return [self recover:recovery]; - }; -} - -- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRecoverWorkBlock))recoverOn { - return ^(dispatch_queue_t queue, FBLPromiseRecoverWorkBlock recovery) { - return [self onQueue:queue recover:recovery]; - }; -} - -@end diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Reduce.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Reduce.m deleted file mode 100644 index 1f3fc50..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Reduce.m +++ /dev/null @@ -1,61 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Reduce.h" - -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (ReduceAdditions) - -- (FBLPromise *)reduce:(NSArray *)items combine:(FBLPromiseReducerBlock)reducer { - return [self onQueue:FBLPromise.defaultDispatchQueue reduce:items combine:reducer]; -} - -- (FBLPromise *)onQueue:(dispatch_queue_t)queue - reduce:(NSArray *)items - combine:(FBLPromiseReducerBlock)reducer { - NSParameterAssert(queue); - NSParameterAssert(items); - NSParameterAssert(reducer); - - FBLPromise *promise = self; - for (id item in items) { - promise = [promise chainOnQueue:queue - chainedFulfill:^id(id value) { - return reducer(value, item); - } - chainedReject:nil]; - } - return promise; -} - -@end - -@implementation FBLPromise (DotSyntax_ReduceAdditions) - -- (FBLPromise * (^)(NSArray *, FBLPromiseReducerBlock))reduce { - return ^(NSArray *items, FBLPromiseReducerBlock reducer) { - return [self reduce:items combine:reducer]; - }; -} - -- (FBLPromise * (^)(dispatch_queue_t, NSArray *, FBLPromiseReducerBlock))reduceOn { - return ^(dispatch_queue_t queue, NSArray *items, FBLPromiseReducerBlock reducer) { - return [self onQueue:queue reduce:items combine:reducer]; - }; -} - -@end diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Retry.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Retry.m deleted file mode 100644 index 37c5576..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Retry.m +++ /dev/null @@ -1,128 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Retry.h" - -#import "FBLPromisePrivate.h" - -NSInteger const FBLPromiseRetryDefaultAttemptsCount = 1; -NSTimeInterval const FBLPromiseRetryDefaultDelayInterval = 1.0; - -static void FBLPromiseRetryAttempt(FBLPromise *promise, dispatch_queue_t queue, NSInteger count, - NSTimeInterval interval, FBLPromiseRetryPredicateBlock predicate, - FBLPromiseRetryWorkBlock work) { - __auto_type retrier = ^(id __nullable value) { - if ([value isKindOfClass:[NSError class]]) { - if (count <= 0 || (predicate && !predicate(count, value))) { - [promise reject:value]; - } else { - dispatch_after(dispatch_time(0, (int64_t)(interval * NSEC_PER_SEC)), queue, ^{ - FBLPromiseRetryAttempt(promise, queue, count - 1, interval, predicate, work); - }); - } - } else { - [promise fulfill:value]; - } - }; - id value = work(); - if ([value isKindOfClass:[FBLPromise class]]) { - [(FBLPromise *)value observeOnQueue:queue fulfill:retrier reject:retrier]; - } else { - retrier(value); - } -} - -@implementation FBLPromise (RetryAdditions) - -+ (FBLPromise *)retry:(FBLPromiseRetryWorkBlock)work { - return [self onQueue:FBLPromise.defaultDispatchQueue retry:work]; -} - -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue retry:(FBLPromiseRetryWorkBlock)work { - return [self onQueue:queue attempts:FBLPromiseRetryDefaultAttemptsCount retry:work]; -} - -+ (FBLPromise *)attempts:(NSInteger)count retry:(FBLPromiseRetryWorkBlock)work { - return [self onQueue:FBLPromise.defaultDispatchQueue attempts:count retry:work]; -} - -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue - attempts:(NSInteger)count - retry:(FBLPromiseRetryWorkBlock)work { - return [self onQueue:queue - attempts:count - delay:FBLPromiseRetryDefaultDelayInterval - condition:nil - retry:work]; -} - -+ (FBLPromise *)attempts:(NSInteger)count - delay:(NSTimeInterval)interval - condition:(nullable FBLPromiseRetryPredicateBlock)predicate - retry:(FBLPromiseRetryWorkBlock)work { - return [self onQueue:FBLPromise.defaultDispatchQueue - attempts:count - delay:interval - condition:predicate - retry:work]; -} - -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue - attempts:(NSInteger)count - delay:(NSTimeInterval)interval - condition:(nullable FBLPromiseRetryPredicateBlock)predicate - retry:(FBLPromiseRetryWorkBlock)work { - NSParameterAssert(queue); - NSParameterAssert(work); - - FBLPromise *promise = [[FBLPromise alloc] initPending]; - FBLPromiseRetryAttempt(promise, queue, count, interval, predicate, work); - return promise; -} - -@end - -@implementation FBLPromise (DotSyntax_RetryAdditions) - -+ (FBLPromise * (^)(FBLPromiseRetryWorkBlock))retry { - return ^id(FBLPromiseRetryWorkBlock work) { - return [self retry:work]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRetryWorkBlock))retryOn { - return ^id(dispatch_queue_t queue, FBLPromiseRetryWorkBlock work) { - return [self onQueue:queue retry:work]; - }; -} - -+ (FBLPromise * (^)(NSInteger, NSTimeInterval, FBLPromiseRetryPredicateBlock, - FBLPromiseRetryWorkBlock))retryAgain { - return ^id(NSInteger count, NSTimeInterval interval, FBLPromiseRetryPredicateBlock predicate, - FBLPromiseRetryWorkBlock work) { - return [self attempts:count delay:interval condition:predicate retry:work]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, NSInteger, NSTimeInterval, FBLPromiseRetryPredicateBlock, - FBLPromiseRetryWorkBlock))retryAgainOn { - return ^id(dispatch_queue_t queue, NSInteger count, NSTimeInterval interval, - FBLPromiseRetryPredicateBlock predicate, FBLPromiseRetryWorkBlock work) { - return [self onQueue:queue attempts:count delay:interval condition:predicate retry:work]; - }; -} - -@end diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Testing.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Testing.m deleted file mode 100644 index 27e8e6c..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Testing.m +++ /dev/null @@ -1,56 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Testing.h" - -BOOL FBLWaitForPromisesWithTimeout(NSTimeInterval timeout) { - BOOL isTimedOut = NO; - NSDate *timeoutDate = [NSDate dateWithTimeIntervalSinceNow:timeout]; - static NSTimeInterval const minimalTimeout = 0.01; - static int64_t const minimalTimeToWait = (int64_t)(minimalTimeout * NSEC_PER_SEC); - dispatch_time_t waitTime = dispatch_time(DISPATCH_TIME_NOW, minimalTimeToWait); - dispatch_group_t dispatchGroup = FBLPromise.dispatchGroup; - NSRunLoop *runLoop = NSRunLoop.currentRunLoop; - while (dispatch_group_wait(dispatchGroup, waitTime)) { - isTimedOut = timeoutDate.timeIntervalSinceNow < 0.0; - if (isTimedOut) { - break; - } - [runLoop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:minimalTimeout]]; - } - return !isTimedOut; -} - -@implementation FBLPromise (TestingAdditions) - -// These properties are implemented in the FBLPromise class itself. -@dynamic isPending; -@dynamic isFulfilled; -@dynamic isRejected; -@dynamic pendingObjects; -@dynamic value; -@dynamic error; - -+ (dispatch_group_t)dispatchGroup { - static dispatch_group_t gDispatchGroup; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - gDispatchGroup = dispatch_group_create(); - }); - return gDispatchGroup; -} - -@end diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Then.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Then.m deleted file mode 100644 index ab03bd1..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Then.m +++ /dev/null @@ -1,50 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Then.h" - -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (ThenAdditions) - -- (FBLPromise *)then:(FBLPromiseThenWorkBlock)work { - return [self onQueue:FBLPromise.defaultDispatchQueue then:work]; -} - -- (FBLPromise *)onQueue:(dispatch_queue_t)queue then:(FBLPromiseThenWorkBlock)work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self chainOnQueue:queue chainedFulfill:work chainedReject:nil]; -} - -@end - -@implementation FBLPromise (DotSyntax_ThenAdditions) - -- (FBLPromise* (^)(FBLPromiseThenWorkBlock))then { - return ^(FBLPromiseThenWorkBlock work) { - return [self then:work]; - }; -} - -- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseThenWorkBlock))thenOn { - return ^(dispatch_queue_t queue, FBLPromiseThenWorkBlock work) { - return [self onQueue:queue then:work]; - }; -} - -@end diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Timeout.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Timeout.m deleted file mode 100644 index a2252e6..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Timeout.m +++ /dev/null @@ -1,64 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Timeout.h" - -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (TimeoutAdditions) - -- (FBLPromise *)timeout:(NSTimeInterval)interval { - return [self onQueue:FBLPromise.defaultDispatchQueue timeout:interval]; -} - -- (FBLPromise *)onQueue:(dispatch_queue_t)queue timeout:(NSTimeInterval)interval { - NSParameterAssert(queue); - - FBLPromise *promise = [[FBLPromise alloc] initPending]; - [self observeOnQueue:queue - fulfill:^(id __nullable value) { - [promise fulfill:value]; - } - reject:^(NSError *error) { - [promise reject:error]; - }]; - typeof(self) __weak weakPromise = promise; - dispatch_after(dispatch_time(0, (int64_t)(interval * NSEC_PER_SEC)), queue, ^{ - NSError *timedOutError = [[NSError alloc] initWithDomain:FBLPromiseErrorDomain - code:FBLPromiseErrorCodeTimedOut - userInfo:nil]; - [weakPromise reject:timedOutError]; - }); - return promise; -} - -@end - -@implementation FBLPromise (DotSyntax_TimeoutAdditions) - -- (FBLPromise* (^)(NSTimeInterval))timeout { - return ^(NSTimeInterval interval) { - return [self timeout:interval]; - }; -} - -- (FBLPromise* (^)(dispatch_queue_t, NSTimeInterval))timeoutOn { - return ^(dispatch_queue_t queue, NSTimeInterval interval) { - return [self onQueue:queue timeout:interval]; - }; -} - -@end diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Validate.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Validate.m deleted file mode 100644 index 1e21e81..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Validate.m +++ /dev/null @@ -1,56 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Validate.h" - -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (ValidateAdditions) - -- (FBLPromise*)validate:(FBLPromiseValidateWorkBlock)predicate { - return [self onQueue:FBLPromise.defaultDispatchQueue validate:predicate]; -} - -- (FBLPromise*)onQueue:(dispatch_queue_t)queue validate:(FBLPromiseValidateWorkBlock)predicate { - NSParameterAssert(queue); - NSParameterAssert(predicate); - - FBLPromiseChainedFulfillBlock chainedFulfill = ^id(id value) { - return predicate(value) ? value : - [[NSError alloc] initWithDomain:FBLPromiseErrorDomain - code:FBLPromiseErrorCodeValidationFailure - userInfo:nil]; - }; - return [self chainOnQueue:queue chainedFulfill:chainedFulfill chainedReject:nil]; -} - -@end - -@implementation FBLPromise (DotSyntax_ValidateAdditions) - -- (FBLPromise* (^)(FBLPromiseValidateWorkBlock))validate { - return ^(FBLPromiseValidateWorkBlock predicate) { - return [self validate:predicate]; - }; -} - -- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseValidateWorkBlock))validateOn { - return ^(dispatch_queue_t queue, FBLPromiseValidateWorkBlock predicate) { - return [self onQueue:queue validate:predicate]; - }; -} - -@end diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Wrap.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Wrap.m deleted file mode 100644 index 3d3341e..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Wrap.m +++ /dev/null @@ -1,420 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Wrap.h" - -#import "FBLPromise+Async.h" - -@implementation FBLPromise (WrapAdditions) - -+ (instancetype)wrapCompletion:(void (^)(FBLPromiseCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrapCompletion:work]; -} - -+ (instancetype)onQueue:(dispatch_queue_t)queue - wrapCompletion:(void (^)(FBLPromiseCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock __unused _) { - work(^{ - fulfill(nil); - }); - }]; -} - -+ (instancetype)wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrapObjectCompletion:work]; -} - -+ (instancetype)onQueue:(dispatch_queue_t)queue - wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock __unused _) { - work(^(id __nullable value) { - fulfill(value); - }); - }]; -} - -+ (instancetype)wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrapErrorCompletion:work]; -} - -+ (instancetype)onQueue:(dispatch_queue_t)queue - wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { - work(^(NSError *__nullable error) { - if (error) { - reject(error); - } else { - fulfill(nil); - } - }); - }]; -} - -+ (instancetype)wrapObjectOrErrorCompletion:(void (^)(FBLPromiseObjectOrErrorCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrapObjectOrErrorCompletion:work]; -} - -+ (instancetype)onQueue:(dispatch_queue_t)queue - wrapObjectOrErrorCompletion:(void (^)(FBLPromiseObjectOrErrorCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { - work(^(id __nullable value, NSError *__nullable error) { - if (error) { - reject(error); - } else { - fulfill(value); - } - }); - }]; -} - -+ (instancetype)wrapErrorOrObjectCompletion:(void (^)(FBLPromiseErrorOrObjectCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrapErrorOrObjectCompletion:work]; -} - -+ (instancetype)onQueue:(dispatch_queue_t)queue - wrapErrorOrObjectCompletion:(void (^)(FBLPromiseErrorOrObjectCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { - work(^(NSError *__nullable error, id __nullable value) { - if (error) { - reject(error); - } else { - fulfill(value); - } - }); - }]; -} - -+ (FBLPromise<NSArray *> *)wrap2ObjectsOrErrorCompletion: - (void (^)(FBLPromise2ObjectsOrErrorCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrap2ObjectsOrErrorCompletion:work]; -} - -+ (FBLPromise<NSArray *> *)onQueue:(dispatch_queue_t)queue - wrap2ObjectsOrErrorCompletion:(void (^)(FBLPromise2ObjectsOrErrorCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { - work(^(id __nullable value1, id __nullable value2, NSError *__nullable error) { - if (error) { - reject(error); - } else { - fulfill(@[ value1, value2 ]); - } - }); - }]; -} - -+ (FBLPromise<NSNumber *> *)wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrapBoolCompletion:work]; -} - -+ (FBLPromise<NSNumber *> *)onQueue:(dispatch_queue_t)queue - wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock __unused _) { - work(^(BOOL value) { - fulfill(@(value)); - }); - }]; -} - -+ (FBLPromise<NSNumber *> *)wrapBoolOrErrorCompletion: - (void (^)(FBLPromiseBoolOrErrorCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrapBoolOrErrorCompletion:work]; -} - -+ (FBLPromise<NSNumber *> *)onQueue:(dispatch_queue_t)queue - wrapBoolOrErrorCompletion:(void (^)(FBLPromiseBoolOrErrorCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { - work(^(BOOL value, NSError *__nullable error) { - if (error) { - reject(error); - } else { - fulfill(@(value)); - } - }); - }]; -} - -+ (FBLPromise<NSNumber *> *)wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrapIntegerCompletion:work]; -} - -+ (FBLPromise<NSNumber *> *)onQueue:(dispatch_queue_t)queue - wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock __unused _) { - work(^(NSInteger value) { - fulfill(@(value)); - }); - }]; -} - -+ (FBLPromise<NSNumber *> *)wrapIntegerOrErrorCompletion: - (void (^)(FBLPromiseIntegerOrErrorCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrapIntegerOrErrorCompletion:work]; -} - -+ (FBLPromise<NSNumber *> *)onQueue:(dispatch_queue_t)queue - wrapIntegerOrErrorCompletion:(void (^)(FBLPromiseIntegerOrErrorCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { - work(^(NSInteger value, NSError *__nullable error) { - if (error) { - reject(error); - } else { - fulfill(@(value)); - } - }); - }]; -} - -+ (FBLPromise<NSNumber *> *)wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrapDoubleCompletion:work]; -} - -+ (FBLPromise<NSNumber *> *)onQueue:(dispatch_queue_t)queue - wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:(dispatch_queue_t)queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock __unused _) { - work(^(double value) { - fulfill(@(value)); - }); - }]; -} - -+ (FBLPromise<NSNumber *> *)wrapDoubleOrErrorCompletion: - (void (^)(FBLPromiseDoubleOrErrorCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrapDoubleOrErrorCompletion:work]; -} - -+ (FBLPromise<NSNumber *> *)onQueue:(dispatch_queue_t)queue - wrapDoubleOrErrorCompletion:(void (^)(FBLPromiseDoubleOrErrorCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { - work(^(double value, NSError *__nullable error) { - if (error) { - reject(error); - } else { - fulfill(@(value)); - } - }); - }]; -} - -@end - -@implementation FBLPromise (DotSyntax_WrapAdditions) - -+ (FBLPromise * (^)(void (^)(FBLPromiseCompletion)))wrapCompletion { - return ^(void (^work)(FBLPromiseCompletion)) { - return [self wrapCompletion:work]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, void (^)(FBLPromiseCompletion)))wrapCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromiseCompletion)) { - return [self onQueue:queue wrapCompletion:work]; - }; -} - -+ (FBLPromise * (^)(void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletion { - return ^(void (^work)(FBLPromiseObjectCompletion)) { - return [self wrapObjectCompletion:work]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromiseObjectCompletion)) { - return [self onQueue:queue wrapObjectCompletion:work]; - }; -} - -+ (FBLPromise * (^)(void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletion { - return ^(void (^work)(FBLPromiseErrorCompletion)) { - return [self wrapErrorCompletion:work]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromiseErrorCompletion)) { - return [self onQueue:queue wrapErrorCompletion:work]; - }; -} - -+ (FBLPromise * (^)(void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletion { - return ^(void (^work)(FBLPromiseObjectOrErrorCompletion)) { - return [self wrapObjectOrErrorCompletion:work]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, - void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromiseObjectOrErrorCompletion)) { - return [self onQueue:queue wrapObjectOrErrorCompletion:work]; - }; -} - -+ (FBLPromise * (^)(void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletion { - return ^(void (^work)(FBLPromiseErrorOrObjectCompletion)) { - return [self wrapErrorOrObjectCompletion:work]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, - void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromiseErrorOrObjectCompletion)) { - return [self onQueue:queue wrapErrorOrObjectCompletion:work]; - }; -} - -+ (FBLPromise<NSArray *> * (^)(void (^)(FBLPromise2ObjectsOrErrorCompletion))) - wrap2ObjectsOrErrorCompletion { - return ^(void (^work)(FBLPromise2ObjectsOrErrorCompletion)) { - return [self wrap2ObjectsOrErrorCompletion:work]; - }; -} - -+ (FBLPromise<NSArray *> * (^)(dispatch_queue_t, void (^)(FBLPromise2ObjectsOrErrorCompletion))) - wrap2ObjectsOrErrorCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromise2ObjectsOrErrorCompletion)) { - return [self onQueue:queue wrap2ObjectsOrErrorCompletion:work]; - }; -} - -+ (FBLPromise<NSNumber *> * (^)(void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletion { - return ^(void (^work)(FBLPromiseBoolCompletion)) { - return [self wrapBoolCompletion:work]; - }; -} - -+ (FBLPromise<NSNumber *> * (^)(dispatch_queue_t, - void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromiseBoolCompletion)) { - return [self onQueue:queue wrapBoolCompletion:work]; - }; -} - -+ (FBLPromise<NSNumber *> * (^)(void (^)(FBLPromiseBoolOrErrorCompletion))) - wrapBoolOrErrorCompletion { - return ^(void (^work)(FBLPromiseBoolOrErrorCompletion)) { - return [self wrapBoolOrErrorCompletion:work]; - }; -} - -+ (FBLPromise<NSNumber *> * (^)(dispatch_queue_t, void (^)(FBLPromiseBoolOrErrorCompletion))) - wrapBoolOrErrorCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromiseBoolOrErrorCompletion)) { - return [self onQueue:queue wrapBoolOrErrorCompletion:work]; - }; -} - -+ (FBLPromise<NSNumber *> * (^)(void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletion { - return ^(void (^work)(FBLPromiseIntegerCompletion)) { - return [self wrapIntegerCompletion:work]; - }; -} - -+ (FBLPromise<NSNumber *> * (^)(dispatch_queue_t, - void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromiseIntegerCompletion)) { - return [self onQueue:queue wrapIntegerCompletion:work]; - }; -} - -+ (FBLPromise<NSNumber *> * (^)(void (^)(FBLPromiseIntegerOrErrorCompletion))) - wrapIntegerOrErrorCompletion { - return ^(void (^work)(FBLPromiseIntegerOrErrorCompletion)) { - return [self wrapIntegerOrErrorCompletion:work]; - }; -} - -+ (FBLPromise<NSNumber *> * (^)(dispatch_queue_t, void (^)(FBLPromiseIntegerOrErrorCompletion))) - wrapIntegerOrErrorCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromiseIntegerOrErrorCompletion)) { - return [self onQueue:queue wrapIntegerOrErrorCompletion:work]; - }; -} - -+ (FBLPromise<NSNumber *> * (^)(void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletion { - return ^(void (^work)(FBLPromiseDoubleCompletion)) { - return [self wrapDoubleCompletion:work]; - }; -} - -+ (FBLPromise<NSNumber *> * (^)(dispatch_queue_t, - void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromiseDoubleCompletion)) { - return [self onQueue:queue wrapDoubleCompletion:work]; - }; -} - -+ (FBLPromise<NSNumber *> * (^)(void (^)(FBLPromiseDoubleOrErrorCompletion))) - wrapDoubleOrErrorCompletion { - return ^(void (^work)(FBLPromiseDoubleOrErrorCompletion)) { - return [self wrapDoubleOrErrorCompletion:work]; - }; -} - -+ (FBLPromise<NSNumber *> * (^)(dispatch_queue_t, void (^)(FBLPromiseDoubleOrErrorCompletion))) - wrapDoubleOrErrorCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromiseDoubleOrErrorCompletion)) { - return [self onQueue:queue wrapDoubleOrErrorCompletion:work]; - }; -} - -@end diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise.m deleted file mode 100644 index 0837b04..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise.m +++ /dev/null @@ -1,297 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromisePrivate.h" - -/** All states a promise can be in. */ -typedef NS_ENUM(NSInteger, FBLPromiseState) { - FBLPromiseStatePending = 0, - FBLPromiseStateFulfilled, - FBLPromiseStateRejected, -}; - -typedef void (^FBLPromiseObserver)(FBLPromiseState state, id __nullable resolution); - -static dispatch_queue_t gFBLPromiseDefaultDispatchQueue; - -@implementation FBLPromise { - /** Current state of the promise. */ - FBLPromiseState _state; - /** - Set of arbitrary objects to keep strongly while the promise is pending. - Becomes nil after the promise has been resolved. - */ - NSMutableSet *__nullable _pendingObjects; - /** - Value to fulfill the promise with. - Can be nil if the promise is still pending, was resolved with nil or after it has been rejected. - */ - id __nullable _value; - /** - Error to reject the promise with. - Can be nil if the promise is still pending or after it has been fulfilled. - */ - NSError *__nullable _error; - /** List of observers to notify when the promise gets resolved. */ - NSMutableArray<FBLPromiseObserver> *_observers; -} - -+ (void)initialize { - if (self == [FBLPromise class]) { - gFBLPromiseDefaultDispatchQueue = dispatch_get_main_queue(); - } -} - -+ (dispatch_queue_t)defaultDispatchQueue { - @synchronized(self) { - return gFBLPromiseDefaultDispatchQueue; - } -} - -+ (void)setDefaultDispatchQueue:(dispatch_queue_t)queue { - NSParameterAssert(queue); - - @synchronized(self) { - gFBLPromiseDefaultDispatchQueue = queue; - } -} - -+ (instancetype)pendingPromise { - return [[self alloc] initPending]; -} - -+ (instancetype)resolvedWith:(nullable id)resolution { - return [[self alloc] initWithResolution:resolution]; -} - -- (void)fulfill:(nullable id)value { - if ([value isKindOfClass:[NSError class]]) { - [self reject:(NSError *)value]; - } else { - @synchronized(self) { - if (_state == FBLPromiseStatePending) { - _state = FBLPromiseStateFulfilled; - _value = value; - _pendingObjects = nil; - for (FBLPromiseObserver observer in _observers) { - observer(_state, _value); - } - _observers = nil; - dispatch_group_leave(FBLPromise.dispatchGroup); - } - } - } -} - -- (void)reject:(NSError *)error { - NSAssert([error isKindOfClass:[NSError class]], @"Invalid error type."); - - if (![error isKindOfClass:[NSError class]]) { - // Give up on invalid error type in Release mode. - @throw error; // NOLINT - } - @synchronized(self) { - if (_state == FBLPromiseStatePending) { - _state = FBLPromiseStateRejected; - _error = error; - _pendingObjects = nil; - for (FBLPromiseObserver observer in _observers) { - observer(_state, _error); - } - _observers = nil; - dispatch_group_leave(FBLPromise.dispatchGroup); - } - } -} - -#pragma mark - NSObject - -- (NSString *)description { - if (self.isFulfilled) { - return [NSString stringWithFormat:@"<%@ %p> Fulfilled: %@", NSStringFromClass([self class]), - self, self.value]; - } - if (self.isRejected) { - return [NSString stringWithFormat:@"<%@ %p> Rejected: %@", NSStringFromClass([self class]), - self, self.error]; - } - return [NSString stringWithFormat:@"<%@ %p> Pending", NSStringFromClass([self class]), self]; -} - -#pragma mark - Private - -- (instancetype)initPending { - self = [super init]; - if (self) { - dispatch_group_enter(FBLPromise.dispatchGroup); - } - return self; -} - -- (instancetype)initWithResolution:(nullable id)resolution { - self = [super init]; - if (self) { - if ([resolution isKindOfClass:[NSError class]]) { - _state = FBLPromiseStateRejected; - _error = (NSError *)resolution; - } else { - _state = FBLPromiseStateFulfilled; - _value = resolution; - } - } - return self; -} - -- (void)dealloc { - if (_state == FBLPromiseStatePending) { - dispatch_group_leave(FBLPromise.dispatchGroup); - } -} - -- (BOOL)isPending { - @synchronized(self) { - return _state == FBLPromiseStatePending; - } -} - -- (BOOL)isFulfilled { - @synchronized(self) { - return _state == FBLPromiseStateFulfilled; - } -} - -- (BOOL)isRejected { - @synchronized(self) { - return _state == FBLPromiseStateRejected; - } -} - -- (nullable id)value { - @synchronized(self) { - return _value; - } -} - -- (NSError *__nullable)error { - @synchronized(self) { - return _error; - } -} - -- (NSMutableSet *__nullable)pendingObjects { - @synchronized(self) { - if (_state == FBLPromiseStatePending) { - if (!_pendingObjects) { - _pendingObjects = [[NSMutableSet alloc] init]; - } - } - return _pendingObjects; - } -} - -- (void)observeOnQueue:(dispatch_queue_t)queue - fulfill:(FBLPromiseOnFulfillBlock)onFulfill - reject:(FBLPromiseOnRejectBlock)onReject { - NSParameterAssert(queue); - NSParameterAssert(onFulfill); - NSParameterAssert(onReject); - - @synchronized(self) { - switch (_state) { - case FBLPromiseStatePending: { - if (!_observers) { - _observers = [[NSMutableArray alloc] init]; - } - [_observers addObject:^(FBLPromiseState state, id __nullable resolution) { - dispatch_group_async(FBLPromise.dispatchGroup, queue, ^{ - switch (state) { - case FBLPromiseStatePending: - break; - case FBLPromiseStateFulfilled: - onFulfill(resolution); - break; - case FBLPromiseStateRejected: - onReject(resolution); - break; - } - }); - }]; - break; - } - case FBLPromiseStateFulfilled: { - dispatch_group_async(FBLPromise.dispatchGroup, queue, ^{ - onFulfill(self->_value); - }); - break; - } - case FBLPromiseStateRejected: { - dispatch_group_async(FBLPromise.dispatchGroup, queue, ^{ - onReject(self->_error); - }); - break; - } - } - } -} - -- (FBLPromise *)chainOnQueue:(dispatch_queue_t)queue - chainedFulfill:(FBLPromiseChainedFulfillBlock)chainedFulfill - chainedReject:(FBLPromiseChainedRejectBlock)chainedReject { - NSParameterAssert(queue); - - FBLPromise *promise = [[FBLPromise alloc] initPending]; - __auto_type resolver = ^(id __nullable value) { - if ([value isKindOfClass:[FBLPromise class]]) { - [(FBLPromise *)value observeOnQueue:queue - fulfill:^(id __nullable value) { - [promise fulfill:value]; - } - reject:^(NSError *error) { - [promise reject:error]; - }]; - } else { - [promise fulfill:value]; - } - }; - [self observeOnQueue:queue - fulfill:^(id __nullable value) { - value = chainedFulfill ? chainedFulfill(value) : value; - resolver(value); - } - reject:^(NSError *error) { - id value = chainedReject ? chainedReject(error) : error; - resolver(value); - }]; - return promise; -} - -@end - -@implementation FBLPromise (DotSyntaxAdditions) - -+ (instancetype (^)(void))pending { - return ^(void) { - return [self pendingPromise]; - }; -} - -+ (instancetype (^)(id __nullable))resolved { - return ^(id resolution) { - return [self resolvedWith:resolution]; - }; -} - -@end diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromiseError.m b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromiseError.m deleted file mode 100644 index 1cc181a..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/FBLPromiseError.m +++ /dev/null @@ -1,19 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromiseError.h" - -NSErrorDomain const FBLPromiseErrorDomain = @"com.google.FBLPromises.Error"; diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+All.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+All.h deleted file mode 100644 index 9c0090e..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+All.h +++ /dev/null @@ -1,63 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise<Value>(AllAdditions) - -/** - Wait until all of the given promises are fulfilled. - If one of the given promises is rejected, then the returned promise is rejected with same error. - If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, - it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. - Promises resolved with `nil` become `NSNull` instances in the resulting array. - - @param promises Promises to wait for. - @return Promise of an array containing the values of input promises in the same order. - */ -+ (FBLPromise<NSArray *> *)all:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); - -/** - Wait until all of the given promises are fulfilled. - If one of the given promises is rejected, then the returned promise is rejected with same error. - If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, - it's implicitly considered a pre-fulfilled or pre-rejected FBLPromise correspondingly. - Promises resolved with `nil` become `NSNull` instances in the resulting array. - - @param queue A queue to dispatch on. - @param promises Promises to wait for. - @return Promise of an array containing the values of input promises in the same order. - */ -+ (FBLPromise<NSArray *> *)onQueue:(dispatch_queue_t)queue - all:(NSArray *)promises NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `all` operators. - Usage: FBLPromise.all(@[ ... ]) - */ -@interface FBLPromise<Value>(DotSyntax_AllAdditions) - -+ (FBLPromise<NSArray *> * (^)(NSArray *))all FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise<NSArray *> * (^)(dispatch_queue_t, NSArray *))allOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Always.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Always.h deleted file mode 100644 index 13000f5..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Always.h +++ /dev/null @@ -1,54 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise<Value>(AlwaysAdditions) - -typedef void (^FBLPromiseAlwaysWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block that always executes, no matter if the receiver is rejected or fulfilled. - @return A new pending promise to be resolved with same resolution as the receiver. - */ -- (FBLPromise *)always:(FBLPromiseAlwaysWorkBlock)work NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to dispatch on. - @param work A block that always executes, no matter if the receiver is rejected or fulfilled. - @return A new pending promise to be resolved with same resolution as the receiver. - */ -- (FBLPromise *)onQueue:(dispatch_queue_t)queue - always:(FBLPromiseAlwaysWorkBlock)work NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `always` operators. - Usage: promise.always(^{...}) - */ -@interface FBLPromise<Value>(DotSyntax_AlwaysAdditions) - -- (FBLPromise* (^)(FBLPromiseAlwaysWorkBlock))always FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); -- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseAlwaysWorkBlock))alwaysOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Any.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Any.h deleted file mode 100644 index 82875bf..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Any.h +++ /dev/null @@ -1,69 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise<Value>(AnyAdditions) - -/** - Waits until all of the given promises are either fulfilled or rejected. - If all promises are rejected, then the returned promise is rejected with same error - as the last one rejected. - If at least one of the promises is fulfilled, the resulting promise is fulfilled with an array of - values or `NSErrors`, matching the original order of fulfilled or rejected promises respectively. - If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, - it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. - Promises resolved with `nil` become `NSNull` instances in the resulting array. - - @param promises Promises to wait for. - @return Promise of array containing the values or `NSError`s of input promises in the same order. - */ -+ (FBLPromise<NSArray *> *)any:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); - -/** - Waits until all of the given promises are either fulfilled or rejected. - If all promises are rejected, then the returned promise is rejected with same error - as the last one rejected. - If at least one of the promises is fulfilled, the resulting promise is fulfilled with an array of - values or `NSError`s, matching the original order of fulfilled or rejected promises respectively. - If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, - it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. - Promises resolved with `nil` become `NSNull` instances in the resulting array. - - @param queue A queue to dispatch on. - @param promises Promises to wait for. - @return Promise of array containing the values or `NSError`s of input promises in the same order. - */ -+ (FBLPromise<NSArray *> *)onQueue:(dispatch_queue_t)queue - any:(NSArray *)promises NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `any` operators. - Usage: FBLPromise.any(@[ ... ]) - */ -@interface FBLPromise<Value>(DotSyntax_AnyAdditions) - -+ (FBLPromise<NSArray *> * (^)(NSArray *))any FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise<NSArray *> * (^)(dispatch_queue_t, NSArray *))anyOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Async.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Async.h deleted file mode 100644 index 0588a9e..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Async.h +++ /dev/null @@ -1,60 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise<Value>(AsyncAdditions) - -typedef void (^FBLPromiseFulfillBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseRejectBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseAsyncWorkBlock)(FBLPromiseFulfillBlock fulfill, - FBLPromiseRejectBlock reject) NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise and executes `work` block asynchronously. - - @param work A block to perform any operations needed to resolve the promise. - @return A new pending promise. - */ -+ (instancetype)async:(FBLPromiseAsyncWorkBlock)work NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise and executes `work` block asynchronously on the given queue. - - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @return A new pending promise. - */ -+ (instancetype)onQueue:(dispatch_queue_t)queue - async:(FBLPromiseAsyncWorkBlock)work NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `async` operators. - Usage: FBLPromise.async(^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { ... }) - */ -@interface FBLPromise<Value>(DotSyntax_AsyncAdditions) - -+ (FBLPromise* (^)(FBLPromiseAsyncWorkBlock))async FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(dispatch_queue_t, FBLPromiseAsyncWorkBlock))asyncOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Await.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Await.h deleted file mode 100644 index c97a1ba..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Await.h +++ /dev/null @@ -1,32 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Waits for promise resolution. The current thread blocks until the promise is resolved. - - @param promise Promise to wait for. - @param error Error the promise was rejected with, or `nil` if the promise was fulfilled. - @return Value the promise was fulfilled with. If the promise was rejected, the return value - is always `nil`, but the error out arg is not. - */ -FOUNDATION_EXTERN id __nullable FBLPromiseAwait(FBLPromise *promise, - NSError **error) NS_REFINED_FOR_SWIFT; - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Catch.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Catch.h deleted file mode 100644 index a9ff170..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Catch.h +++ /dev/null @@ -1,59 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise<Value>(CatchAdditions) - -typedef void (^FBLPromiseCatchWorkBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise which eventually gets resolved with same resolution as the receiver. - If receiver is rejected, then `reject` block is executed asynchronously. - - @param reject A block to handle the error that receiver was rejected with. - @return A new pending promise. - */ -- (FBLPromise *)catch:(FBLPromiseCatchWorkBlock)reject NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise which eventually gets resolved with same resolution as the receiver. - If receiver is rejected, then `reject` block is executed asynchronously on the given queue. - - @param queue A queue to invoke the `reject` block on. - @param reject A block to handle the error that receiver was rejected with. - @return A new pending promise. - */ -- (FBLPromise *)onQueue:(dispatch_queue_t)queue - catch:(FBLPromiseCatchWorkBlock)reject NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `catch` operators. - Usage: promise.catch(^(NSError *error) { ... }) - */ -@interface FBLPromise<Value>(DotSyntax_CatchAdditions) - -- (FBLPromise* (^)(FBLPromiseCatchWorkBlock))catch FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseCatchWorkBlock))catchOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Delay.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Delay.h deleted file mode 100644 index 557df48..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Delay.h +++ /dev/null @@ -1,59 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise<Value>(DelayAdditions) - -/** - Creates a new pending promise that fulfills with the same value as `self` after the `delay`, or - rejects with the same error immediately. - - @param interval Time to wait in seconds. - @return A new pending promise that fulfills at least `delay` seconds later than `self`, or rejects - with the same error immediately. - */ -- (FBLPromise *)delay:(NSTimeInterval)interval NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a new pending promise that fulfills with the same value as `self` after the `delay`, or - rejects with the same error immediately. - - @param queue A queue to dispatch on. - @param interval Time to wait in seconds. - @return A new pending promise that fulfills at least `delay` seconds later than `self`, or rejects - with the same error immediately. - */ -- (FBLPromise *)onQueue:(dispatch_queue_t)queue - delay:(NSTimeInterval)interval NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `delay` operators. - Usage: promise.delay(...) - */ -@interface FBLPromise<Value>(DotSyntax_DelayAdditions) - -- (FBLPromise * (^)(NSTimeInterval))delay FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -- (FBLPromise * (^)(dispatch_queue_t, NSTimeInterval))delayOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Do.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Do.h deleted file mode 100644 index 6838e0a..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Do.h +++ /dev/null @@ -1,55 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise<Value>(DoAdditions) - -typedef id __nullable (^FBLPromiseDoWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise and executes `work` block asynchronously. - - @param work A block that returns a value or an error used to resolve the promise. - @return A new pending promise. - */ -+ (instancetype)do:(FBLPromiseDoWorkBlock)work NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise and executes `work` block asynchronously on the given queue. - - @param queue A queue to invoke the `work` block on. - @param work A block that returns a value or an error used to resolve the promise. - @return A new pending promise. - */ -+ (instancetype)onQueue:(dispatch_queue_t)queue do:(FBLPromiseDoWorkBlock)work NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `do` operators. - Usage: FBLPromise.doOn(queue, ^(NSError *error) { ... }) - */ -@interface FBLPromise<Value>(DotSyntax_DoAdditions) - -+ (FBLPromise * (^)(dispatch_queue_t, FBLPromiseDoWorkBlock))doOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Race.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Race.h deleted file mode 100644 index 2f67258..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Race.h +++ /dev/null @@ -1,62 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise<Value>(RaceAdditions) - -/** - Wait until any of the given promises are fulfilled. - If one of the promises is rejected, then the returned promise is rejected with same error. - If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, - it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. - - @param promises Promises to wait for. - @return A new pending promise to be resolved with the same resolution as the first promise, among - the given ones, which was resolved. - */ -+ (instancetype)race:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); - -/** - Wait until any of the given promises are fulfilled. - If one of the promises is rejected, then the returned promise is rejected with same error. - If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, - it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. - - @param queue A queue to dispatch on. - @param promises Promises to wait for. - @return A new pending promise to be resolved with the same resolution as the first promise, among - the given ones, which was resolved. - */ -+ (instancetype)onQueue:(dispatch_queue_t)queue race:(NSArray *)promises NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `race` operators. - Usage: FBLPromise.race(@[ ... ]) - */ -@interface FBLPromise<Value>(DotSyntax_RaceAdditions) - -+ (FBLPromise * (^)(NSArray *))race FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise * (^)(dispatch_queue_t, NSArray *))raceOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Recover.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Recover.h deleted file mode 100644 index bb7df7e..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Recover.h +++ /dev/null @@ -1,60 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise<Value>(RecoverAdditions) - -typedef id __nullable (^FBLPromiseRecoverWorkBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); - -/** - Provides a new promise to recover in case the receiver gets rejected. - - @param recovery A block to handle the error that the receiver was rejected with. - @return A new pending promise to use instead of the rejected one that gets resolved with resolution - returned from `recovery` block. - */ -- (FBLPromise *)recover:(FBLPromiseRecoverWorkBlock)recovery NS_SWIFT_UNAVAILABLE(""); - -/** - Provides a new promise to recover in case the receiver gets rejected. - - @param queue A queue to dispatch on. - @param recovery A block to handle the error that the receiver was rejected with. - @return A new pending promise to use instead of the rejected one that gets resolved with resolution - returned from `recovery` block. - */ -- (FBLPromise *)onQueue:(dispatch_queue_t)queue - recover:(FBLPromiseRecoverWorkBlock)recovery NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `recover` operators. - Usage: promise.recover(^id(NSError *error) {...}) - */ -@interface FBLPromise<Value>(DotSyntax_RecoverAdditions) - -- (FBLPromise * (^)(FBLPromiseRecoverWorkBlock))recover FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); -- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRecoverWorkBlock))recoverOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Reduce.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Reduce.h deleted file mode 100644 index 5bb1eee..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Reduce.h +++ /dev/null @@ -1,71 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise<Value>(ReduceAdditions) - -typedef id __nullable (^FBLPromiseReducerBlock)(Value __nullable partial, id next) - NS_SWIFT_UNAVAILABLE(""); - -/** - Sequentially reduces a collection of values to a single promise using a given combining block - and the value `self` resolves with as initial value. - - @param items An array of values to process in order. - @param reducer A block to combine an accumulating value and an element of the sequence into - the new accumulating value or a promise resolved with it, to be used in the next - call of the `reducer` or returned to the caller. - @return A new pending promise returned from the last `reducer` invocation. - Or `self` if `items` is empty. - */ -- (FBLPromise *)reduce:(NSArray *)items - combine:(FBLPromiseReducerBlock)reducer NS_SWIFT_UNAVAILABLE(""); - -/** - Sequentially reduces a collection of values to a single promise using a given combining block - and the value `self` resolves with as initial value. - - @param queue A queue to dispatch on. - @param items An array of values to process in order. - @param reducer A block to combine an accumulating value and an element of the sequence into - the new accumulating value or a promise resolved with it, to be used in the next - call of the `reducer` or returned to the caller. - @return A new pending promise returned from the last `reducer` invocation. - Or `self` if `items` is empty. - */ -- (FBLPromise *)onQueue:(dispatch_queue_t)queue - reduce:(NSArray *)items - combine:(FBLPromiseReducerBlock)reducer NS_SWIFT_UNAVAILABLE(""); - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `reduce` operators. - Usage: promise.reduce(values, ^id(id partial, id next) { ... }) - */ -@interface FBLPromise<Value>(DotSyntax_ReduceAdditions) - -- (FBLPromise * (^)(NSArray *, FBLPromiseReducerBlock))reduce FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); -- (FBLPromise * (^)(dispatch_queue_t, NSArray *, FBLPromiseReducerBlock))reduceOn - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Retry.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Retry.h deleted file mode 100644 index 98ef558..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Retry.h +++ /dev/null @@ -1,165 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -/** The default number of retry attempts is 1. */ -FOUNDATION_EXTERN NSInteger const FBLPromiseRetryDefaultAttemptsCount NS_REFINED_FOR_SWIFT; - -/** The default delay interval before making a retry attempt is 1.0 second. */ -FOUNDATION_EXTERN NSTimeInterval const FBLPromiseRetryDefaultDelayInterval NS_REFINED_FOR_SWIFT; - -@interface FBLPromise<Value>(RetryAdditions) - -typedef id __nullable (^FBLPromiseRetryWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); -typedef BOOL (^FBLPromiseRetryPredicateBlock)(NSInteger, NSError *) NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise that fulfills with the same value as the promise returned from `work` - block, which executes asynchronously, or rejects with the same error after all retry attempts have - been exhausted. Defaults to `FBLPromiseRetryDefaultAttemptsCount` attempt(s) on rejection where the - `work` block is retried after a delay of `FBLPromiseRetryDefaultDelayInterval` second(s). - - @param work A block that executes asynchronously on the default queue and returns a value or an - error used to resolve the promise. - @return A new pending promise that fulfills with the same value as the promise returned from `work` - block, or rejects with the same error after all retry attempts have been exhausted. - */ -+ (FBLPromise *)retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise that fulfills with the same value as the promise returned from `work` - block, which executes asynchronously on the given `queue`, or rejects with the same error after all - retry attempts have been exhausted. Defaults to `FBLPromiseRetryDefaultAttemptsCount` attempt(s) on - rejection where the `work` block is retried on the given `queue` after a delay of - `FBLPromiseRetryDefaultDelayInterval` second(s). - - @param queue A queue to invoke the `work` block on. - @param work A block that executes asynchronously on the given `queue` and returns a value or an - error used to resolve the promise. - @return A new pending promise that fulfills with the same value as the promise returned from `work` - block, or rejects with the same error after all retry attempts have been exhausted. - */ -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue - retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise that fulfills with the same value as the promise returned from `work` - block, which executes asynchronously, or rejects with the same error after all retry attempts have - been exhausted. - - @param count Max number of retry attempts. The `work` block will be executed once if the specified - count is less than or equal to zero. - @param work A block that executes asynchronously on the default queue and returns a value or an - error used to resolve the promise. - @return A new pending promise that fulfills with the same value as the promise returned from `work` - block, or rejects with the same error after all retry attempts have been exhausted. - */ -+ (FBLPromise *)attempts:(NSInteger)count - retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise that fulfills with the same value as the promise returned from `work` - block, which executes asynchronously on the given `queue`, or rejects with the same error after all - retry attempts have been exhausted. - - @param queue A queue to invoke the `work` block on. - @param count Max number of retry attempts. The `work` block will be executed once if the specified - count is less than or equal to zero. - @param work A block that executes asynchronously on the given `queue` and returns a value or an - error used to resolve the promise. - @return A new pending promise that fulfills with the same value as the promise returned from `work` - block, or rejects with the same error after all retry attempts have been exhausted. - */ -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue - attempts:(NSInteger)count - retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise that fulfills with the same value as the promise returned from `work` - block, which executes asynchronously, or rejects with the same error after all retry attempts have - been exhausted. On rejection, the `work` block is retried after the given delay `interval` and will - continue to retry until the number of specified attempts have been exhausted or will bail early if - the given condition is not met. - - @param count Max number of retry attempts. The `work` block will be executed once if the specified - count is less than or equal to zero. - @param interval Time to wait before the next retry attempt. - @param predicate Condition to check before the next retry attempt. The predicate block provides the - the number of remaining retry attempts and the error that the promise was rejected - with. - @param work A block that executes asynchronously on the default queue and returns a value or an - error used to resolve the promise. - @return A new pending promise that fulfills with the same value as the promise returned from `work` - block, or rejects with the same error after all retry attempts have been exhausted or if - the given condition is not met. - */ -+ (FBLPromise *)attempts:(NSInteger)count - delay:(NSTimeInterval)interval - condition:(nullable FBLPromiseRetryPredicateBlock)predicate - retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise that fulfills with the same value as the promise returned from `work` - block, which executes asynchronously on the given `queue`, or rejects with the same error after all - retry attempts have been exhausted. On rejection, the `work` block is retried after the given - delay `interval` and will continue to retry until the number of specified attempts have been - exhausted or will bail early if the given condition is not met. - - @param queue A queue to invoke the `work` block on. - @param count Max number of retry attempts. The `work` block will be executed once if the specified - count is less than or equal to zero. - @param interval Time to wait before the next retry attempt. - @param predicate Condition to check before the next retry attempt. The predicate block provides the - the number of remaining retry attempts and the error that the promise was rejected - with. - @param work A block that executes asynchronously on the given `queue` and returns a value or an - error used to resolve the promise. - @return A new pending promise that fulfills with the same value as the promise returned from `work` - block, or rejects with the same error after all retry attempts have been exhausted or if - the given condition is not met. - */ -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue - attempts:(NSInteger)count - delay:(NSTimeInterval)interval - condition:(nullable FBLPromiseRetryPredicateBlock)predicate - retry:(FBLPromiseRetryWorkBlock)work NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise+Retry` operators. - Usage: FBLPromise.retry(^id { ... }) - */ -@interface FBLPromise<Value>(DotSyntax_RetryAdditions) - -+ (FBLPromise * (^)(FBLPromiseRetryWorkBlock))retry FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRetryWorkBlock))retryOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise * (^)(NSInteger, NSTimeInterval, FBLPromiseRetryPredicateBlock __nullable, - FBLPromiseRetryWorkBlock))retryAgain FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise * (^)(dispatch_queue_t, NSInteger, NSTimeInterval, - FBLPromiseRetryPredicateBlock __nullable, - FBLPromiseRetryWorkBlock))retryAgainOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Testing.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Testing.h deleted file mode 100644 index 07a65ec..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Testing.h +++ /dev/null @@ -1,63 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Waits for all scheduled promises blocks. - - @param timeout Maximum time to wait. - @return YES if all promises blocks have completed before the timeout and NO otherwise. - */ -FOUNDATION_EXTERN BOOL FBLWaitForPromisesWithTimeout(NSTimeInterval timeout) NS_REFINED_FOR_SWIFT; - -@interface FBLPromise<Value>(TestingAdditions) - -/** - Dispatch group for promises that is typically used to wait for all scheduled blocks. - */ -@property(class, nonatomic, readonly) dispatch_group_t dispatchGroup NS_REFINED_FOR_SWIFT; - -/** - Properties to get the current state of the promise. - */ -@property(nonatomic, readonly) BOOL isPending NS_REFINED_FOR_SWIFT; -@property(nonatomic, readonly) BOOL isFulfilled NS_REFINED_FOR_SWIFT; -@property(nonatomic, readonly) BOOL isRejected NS_REFINED_FOR_SWIFT; - -/** - Set of arbitrary objects to keep strongly while the promise is pending. - Becomes nil after the promise has been resolved. - */ -@property(nonatomic, readonly, nullable) NSMutableSet *pendingObjects NS_REFINED_FOR_SWIFT; - -/** - Value the promise was fulfilled with. - Can be nil if the promise is still pending, was resolved with nil or after it has been rejected. - */ -@property(nonatomic, readonly, nullable) Value value NS_REFINED_FOR_SWIFT; - -/** - Error the promise was rejected with. - Can be nil if the promise is still pending or after it has been fulfilled. - */ -@property(nonatomic, readonly, nullable) NSError *error NS_REFINED_FOR_SWIFT; - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Then.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Then.h deleted file mode 100644 index 32027e6..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Then.h +++ /dev/null @@ -1,63 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise<Value>(ThenAdditions) - -typedef id __nullable (^FBLPromiseThenWorkBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise which eventually gets resolved with resolution returned from `work` - block: either value, error or another promise. The `work` block is executed asynchronously only - when the receiver is fulfilled. If receiver is rejected, the returned promise is also rejected with - the same error. - - @param work A block to handle the value that receiver was fulfilled with. - @return A new pending promise to be resolved with resolution returned from the `work` block. - */ -- (FBLPromise *)then:(FBLPromiseThenWorkBlock)work NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise which eventually gets resolved with resolution returned from `work` - block: either value, error or another promise. The `work` block is executed asynchronously when the - receiver is fulfilled. If receiver is rejected, the returned promise is also rejected with the same - error. - - @param queue A queue to invoke the `work` block on. - @param work A block to handle the value that receiver was fulfilled with. - @return A new pending promise to be resolved with resolution returned from the `work` block. - */ -- (FBLPromise *)onQueue:(dispatch_queue_t)queue - then:(FBLPromiseThenWorkBlock)work NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `then` operators. - Usage: promise.then(^id(id value) { ... }) - */ -@interface FBLPromise<Value>(DotSyntax_ThenAdditions) - -- (FBLPromise* (^)(FBLPromiseThenWorkBlock))then FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseThenWorkBlock))thenOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Timeout.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Timeout.h deleted file mode 100644 index 184ba16..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Timeout.h +++ /dev/null @@ -1,57 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise<Value>(TimeoutAdditions) - -/** - Waits for a promise with the specified `timeout`. - - @param interval Time to wait in seconds. - @return A new pending promise that gets either resolved with same resolution as the receiver or - rejected with `FBLPromiseErrorCodeTimedOut` error code in `FBLPromiseErrorDomain`. - */ -- (FBLPromise *)timeout:(NSTimeInterval)interval NS_SWIFT_UNAVAILABLE(""); - -/** - Waits for a promise with the specified `timeout`. - - @param queue A queue to dispatch on. - @param interval Time to wait in seconds. - @return A new pending promise that gets either resolved with same resolution as the receiver or - rejected with `FBLPromiseErrorCodeTimedOut` error code in `FBLPromiseErrorDomain`. - */ -- (FBLPromise *)onQueue:(dispatch_queue_t)queue - timeout:(NSTimeInterval)interval NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `timeout` operators. - Usage: promise.timeout(...) - */ -@interface FBLPromise<Value>(DotSyntax_TimeoutAdditions) - -- (FBLPromise* (^)(NSTimeInterval))timeout FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -- (FBLPromise* (^)(dispatch_queue_t, NSTimeInterval))timeoutOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Validate.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Validate.h deleted file mode 100644 index 9dfa2f1..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Validate.h +++ /dev/null @@ -1,60 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise<Value>(ValidateAdditions) - -typedef BOOL (^FBLPromiseValidateWorkBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); - -/** - Validates a fulfilled value or rejects the value if it can not be validated. - - @param predicate An expression to validate. - @return A new pending promise that gets either resolved with same resolution as the receiver or - rejected with `FBLPromiseErrorCodeValidationFailure` error code in `FBLPromiseErrorDomain`. - */ -- (FBLPromise *)validate:(FBLPromiseValidateWorkBlock)predicate NS_SWIFT_UNAVAILABLE(""); - -/** - Validates a fulfilled value or rejects the value if it can not be validated. - - @param queue A queue to dispatch on. - @param predicate An expression to validate. - @return A new pending promise that gets either resolved with same resolution as the receiver or - rejected with `FBLPromiseErrorCodeValidationFailure` error code in `FBLPromiseErrorDomain`. - */ -- (FBLPromise *)onQueue:(dispatch_queue_t)queue - validate:(FBLPromiseValidateWorkBlock)predicate NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `validate` operators. - Usage: promise.validate(^BOOL(id value) { ... }) - */ -@interface FBLPromise<Value>(DotSyntax_ValidateAdditions) - -- (FBLPromise * (^)(FBLPromiseValidateWorkBlock))validate FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); -- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseValidateWorkBlock))validateOn - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Wrap.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Wrap.h deleted file mode 100644 index 664e1bb..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Wrap.h +++ /dev/null @@ -1,316 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Different types of completion handlers available to be wrapped with promise. - */ -typedef void (^FBLPromiseCompletion)(void) NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseObjectCompletion)(id __nullable) NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseErrorCompletion)(NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseObjectOrErrorCompletion)(id __nullable, NSError* __nullable) - NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseErrorOrObjectCompletion)(NSError* __nullable, id __nullable) - NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromise2ObjectsOrErrorCompletion)(id __nullable, id __nullable, - NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseBoolCompletion)(BOOL) NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseBoolOrErrorCompletion)(BOOL, NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseIntegerCompletion)(NSInteger) NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseIntegerOrErrorCompletion)(NSInteger, NSError* __nullable) - NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseDoubleCompletion)(double) NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseDoubleOrErrorCompletion)(double, NSError* __nullable) - NS_SWIFT_UNAVAILABLE(""); - -/** - Provides an easy way to convert methods that use common callback patterns into promises. - */ -@interface FBLPromise<Value>(WrapAdditions) - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with `nil` when completion handler is invoked. - */ -+ (instancetype)wrapCompletion:(void (^)(FBLPromiseCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with `nil` when completion handler is invoked. - */ -+ (instancetype)onQueue:(dispatch_queue_t)queue - wrapCompletion:(void (^)(FBLPromiseCompletion handler))work NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an object provided by completion handler. - */ -+ (instancetype)wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an object provided by completion handler. - */ -+ (instancetype)onQueue:(dispatch_queue_t)queue - wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an error provided by completion handler. - If error is `nil`, fulfills with `nil`, otherwise rejects with the error. - */ -+ (instancetype)wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an error provided by completion handler. - If error is `nil`, fulfills with `nil`, otherwise rejects with the error. - */ -+ (instancetype)onQueue:(dispatch_queue_t)queue - wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an object provided by completion handler if error is `nil`. - Otherwise, rejects with the error. - */ -+ (instancetype)wrapObjectOrErrorCompletion: - (void (^)(FBLPromiseObjectOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an object provided by completion handler if error is `nil`. - Otherwise, rejects with the error. - */ -+ (instancetype)onQueue:(dispatch_queue_t)queue - wrapObjectOrErrorCompletion:(void (^)(FBLPromiseObjectOrErrorCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an error or object provided by completion handler. If error - is not `nil`, rejects with the error. - */ -+ (instancetype)wrapErrorOrObjectCompletion: - (void (^)(FBLPromiseErrorOrObjectCompletion handler))work NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an error or object provided by completion handler. If error - is not `nil`, rejects with the error. - */ -+ (instancetype)onQueue:(dispatch_queue_t)queue - wrapErrorOrObjectCompletion:(void (^)(FBLPromiseErrorOrObjectCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an array of objects provided by completion handler in order - if error is `nil`. Otherwise, rejects with the error. - */ -+ (FBLPromise<NSArray*>*)wrap2ObjectsOrErrorCompletion: - (void (^)(FBLPromise2ObjectsOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an array of objects provided by completion handler in order - if error is `nil`. Otherwise, rejects with the error. - */ -+ (FBLPromise<NSArray*>*)onQueue:(dispatch_queue_t)queue - wrap2ObjectsOrErrorCompletion:(void (^)(FBLPromise2ObjectsOrErrorCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping YES/NO. - */ -+ (FBLPromise<NSNumber*>*)wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping YES/NO. - */ -+ (FBLPromise<NSNumber*>*)onQueue:(dispatch_queue_t)queue - wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping YES/NO when error is `nil`. - Otherwise rejects with the error. - */ -+ (FBLPromise<NSNumber*>*)wrapBoolOrErrorCompletion: - (void (^)(FBLPromiseBoolOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping YES/NO when error is `nil`. - Otherwise rejects with the error. - */ -+ (FBLPromise<NSNumber*>*)onQueue:(dispatch_queue_t)queue - wrapBoolOrErrorCompletion:(void (^)(FBLPromiseBoolOrErrorCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping an integer. - */ -+ (FBLPromise<NSNumber*>*)wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping an integer. - */ -+ (FBLPromise<NSNumber*>*)onQueue:(dispatch_queue_t)queue - wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping an integer when error is `nil`. - Otherwise rejects with the error. - */ -+ (FBLPromise<NSNumber*>*)wrapIntegerOrErrorCompletion: - (void (^)(FBLPromiseIntegerOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping an integer when error is `nil`. - Otherwise rejects with the error. - */ -+ (FBLPromise<NSNumber*>*)onQueue:(dispatch_queue_t)queue - wrapIntegerOrErrorCompletion:(void (^)(FBLPromiseIntegerOrErrorCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping a double. - */ -+ (FBLPromise<NSNumber*>*)wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping a double. - */ -+ (FBLPromise<NSNumber*>*)onQueue:(dispatch_queue_t)queue - wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping a double when error is `nil`. - Otherwise rejects with the error. - */ -+ (FBLPromise<NSNumber*>*)wrapDoubleOrErrorCompletion: - (void (^)(FBLPromiseDoubleOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping a double when error is `nil`. - Otherwise rejects with the error. - */ -+ (FBLPromise<NSNumber*>*)onQueue:(dispatch_queue_t)queue - wrapDoubleOrErrorCompletion:(void (^)(FBLPromiseDoubleOrErrorCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `wrap` operators. - Usage: FBLPromise.wrapCompletion(^(FBLPromiseCompletion handler) {...}) - */ -@interface FBLPromise<Value>(DotSyntax_WrapAdditions) - -+ (FBLPromise* (^)(void (^)(FBLPromiseCompletion)))wrapCompletion FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseCompletion)))wrapCompletionOn - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletion - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletionOn - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletion FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletionOn - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletion - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(dispatch_queue_t, - void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletionOn - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletion - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(dispatch_queue_t, - void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletionOn - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise<NSArray*>* (^)(void (^)(FBLPromise2ObjectsOrErrorCompletion))) - wrap2ObjectsOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise<NSArray*>* (^)(dispatch_queue_t, void (^)(FBLPromise2ObjectsOrErrorCompletion))) - wrap2ObjectsOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise<NSNumber*>* (^)(void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletion - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise<NSNumber*>* (^)(dispatch_queue_t, - void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletionOn - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise<NSNumber*>* (^)(void (^)(FBLPromiseBoolOrErrorCompletion)))wrapBoolOrErrorCompletion - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise<NSNumber*>* (^)(dispatch_queue_t, - void (^)(FBLPromiseBoolOrErrorCompletion)))wrapBoolOrErrorCompletionOn - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise<NSNumber*>* (^)(void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletion - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise<NSNumber*>* (^)(dispatch_queue_t, - void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletionOn - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise<NSNumber*>* (^)(void (^)(FBLPromiseIntegerOrErrorCompletion))) - wrapIntegerOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise<NSNumber*>* (^)(dispatch_queue_t, void (^)(FBLPromiseIntegerOrErrorCompletion))) - wrapIntegerOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise<NSNumber*>* (^)(void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletion - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise<NSNumber*>* (^)(dispatch_queue_t, - void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletionOn - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise<NSNumber*>* (^)(void (^)(FBLPromiseDoubleOrErrorCompletion))) - wrapDoubleOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise<NSNumber*>* (^)(dispatch_queue_t, void (^)(FBLPromiseDoubleOrErrorCompletion))) - wrapDoubleOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise.h deleted file mode 100644 index cec6336..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise.h +++ /dev/null @@ -1,82 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromiseError.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Promises synchronization construct in Objective-C. - */ -@interface FBLPromise<__covariant Value> : NSObject - -/** - Default dispatch queue used for `FBLPromise`, which is `main` if a queue is not specified. - */ -@property(class) dispatch_queue_t defaultDispatchQueue NS_REFINED_FOR_SWIFT; - -/** - Creates a pending promise. - */ -+ (instancetype)pendingPromise NS_REFINED_FOR_SWIFT; - -/** - Creates a resolved promise. - - @param resolution An object to resolve the promise with: either a value or an error. - @return A new resolved promise. - */ -+ (instancetype)resolvedWith:(nullable id)resolution NS_REFINED_FOR_SWIFT; - -/** - Synchronously fulfills the promise with a value. - - @param value An arbitrary value to fulfill the promise with, including `nil`. - */ -- (void)fulfill:(nullable Value)value NS_REFINED_FOR_SWIFT; - -/** - Synchronously rejects the promise with an error. - - @param error An error to reject the promise with. - */ -- (void)reject:(NSError *)error NS_REFINED_FOR_SWIFT; - -+ (instancetype)new NS_UNAVAILABLE; -- (instancetype)init NS_UNAVAILABLE; - -@end - -#ifdef FBL_PROMISES_DOT_SYNTAX_IS_DEPRECATED -#define FBL_PROMISES_DOT_SYNTAX __attribute__((deprecated)) -#else -#define FBL_PROMISES_DOT_SYNTAX -#endif - -@interface FBLPromise<Value>(DotSyntaxAdditions) - -/** - Convenience dot-syntax wrappers for FBLPromise. - Usage: FBLPromise.pending() - FBLPromise.resolved(value) - - */ -+ (instancetype (^)(void))pending FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (instancetype (^)(id __nullable))resolved FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromiseError.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromiseError.h deleted file mode 100644 index d37af53..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromiseError.h +++ /dev/null @@ -1,43 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import <Foundation/Foundation.h> - -NS_ASSUME_NONNULL_BEGIN - -FOUNDATION_EXTERN NSErrorDomain const FBLPromiseErrorDomain NS_REFINED_FOR_SWIFT; - -/** - Possible error codes in `FBLPromiseErrorDomain`. - */ -typedef NS_ENUM(NSInteger, FBLPromiseErrorCode) { - /** Promise failed to resolve in time. */ - FBLPromiseErrorCodeTimedOut = 1, - /** Validation predicate returned false. */ - FBLPromiseErrorCodeValidationFailure = 2, -} NS_REFINED_FOR_SWIFT; - -NS_INLINE BOOL FBLPromiseErrorIsTimedOut(NSError *error) NS_SWIFT_UNAVAILABLE("") { - return error.domain == FBLPromiseErrorDomain && - error.code == FBLPromiseErrorCodeTimedOut; -} - -NS_INLINE BOOL FBLPromiseErrorIsValidationFailure(NSError *error) NS_SWIFT_UNAVAILABLE("") { - return error.domain == FBLPromiseErrorDomain && - error.code == FBLPromiseErrorCodeValidationFailure; -} - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromisePrivate.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromisePrivate.h deleted file mode 100644 index 7a132f2..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromisePrivate.h +++ /dev/null @@ -1,66 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Testing.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Miscellaneous low-level private interfaces available to extend standard FBLPromise functionality. - */ -@interface FBLPromise<Value>() - -typedef void (^FBLPromiseOnFulfillBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseOnRejectBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); -typedef id __nullable (^__nullable FBLPromiseChainedFulfillBlock)(Value __nullable value) - NS_SWIFT_UNAVAILABLE(""); -typedef id __nullable (^__nullable FBLPromiseChainedRejectBlock)(NSError *error) - NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise. - */ -- (instancetype)initPending NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a resolved promise. - - @param resolution An object to resolve the promise with: either a value or an error. - @return A new resolved promise. - */ -- (instancetype)initWithResolution:(nullable id)resolution NS_SWIFT_UNAVAILABLE(""); - -/** - Invokes `fulfill` and `reject` blocks on `queue` when the receiver gets either fulfilled or - rejected respectively. - */ -- (void)observeOnQueue:(dispatch_queue_t)queue - fulfill:(FBLPromiseOnFulfillBlock)onFulfill - reject:(FBLPromiseOnRejectBlock)onReject NS_SWIFT_UNAVAILABLE(""); - -/** - Returns a new promise which gets resolved with the return value of `chainedFulfill` or - `chainedReject` blocks respectively. The blocks are invoked when the receiver gets either - fulfilled or rejected. If `nil` is passed to either block arg, the returned promise is resolved - with the same resolution as the receiver. - */ -- (FBLPromise *)chainOnQueue:(dispatch_queue_t)queue - chainedFulfill:(FBLPromiseChainedFulfillBlock)chainedFulfill - chainedReject:(FBLPromiseChainedRejectBlock)chainedReject NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromises.h b/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromises.h deleted file mode 100644 index 2d90bad..0000000 --- a/assign5/openTok/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromises.h +++ /dev/null @@ -1,32 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+All.h" -#import "FBLPromise+Always.h" -#import "FBLPromise+Any.h" -#import "FBLPromise+Async.h" -#import "FBLPromise+Await.h" -#import "FBLPromise+Catch.h" -#import "FBLPromise+Delay.h" -#import "FBLPromise+Do.h" -#import "FBLPromise+Race.h" -#import "FBLPromise+Recover.h" -#import "FBLPromise+Reduce.h" -#import "FBLPromise+Retry.h" -#import "FBLPromise+Then.h" -#import "FBLPromise+Timeout.h" -#import "FBLPromise+Validate.h" -#import "FBLPromise+Wrap.h" diff --git a/assign5/openTok/Pods/Target Support Files/Firebase/Firebase.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/Firebase/Firebase.debug.xcconfig deleted file mode 100644 index c4452f9..0000000 --- a/assign5/openTok/Pods/Target Support Files/Firebase/Firebase.debug.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Firebase -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Firebase" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Firebase -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/Firebase/Firebase.release.xcconfig b/assign5/openTok/Pods/Target Support Files/Firebase/Firebase.release.xcconfig deleted file mode 100644 index c4452f9..0000000 --- a/assign5/openTok/Pods/Target Support Files/Firebase/Firebase.release.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Firebase -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Firebase" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Firebase -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop.debug.xcconfig deleted file mode 100644 index 316604a..0000000 --- a/assign5/openTok/Pods/Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop.debug.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuthInterop -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FirebaseAuthInterop" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseAuthInterop -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop.release.xcconfig b/assign5/openTok/Pods/Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop.release.xcconfig deleted file mode 100644 index 316604a..0000000 --- a/assign5/openTok/Pods/Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop.release.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuthInterop -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FirebaseAuthInterop" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseAuthInterop -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-Info.plist b/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-Info.plist deleted file mode 100644 index 84a1892..0000000 --- a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>6.6.7</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-dummy.m b/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-dummy.m deleted file mode 100644 index 4f1eb27..0000000 --- a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_FirebaseCore : NSObject -@end -@implementation PodsDummy_FirebaseCore -@end diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-umbrella.h b/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-umbrella.h deleted file mode 100644 index 102aecb..0000000 --- a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore-umbrella.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "FIRApp.h" -#import "FIRConfiguration.h" -#import "FirebaseCore.h" -#import "FIRLoggerLevel.h" -#import "FIROptions.h" - -FOUNDATION_EXPORT double FirebaseCoreVersionNumber; -FOUNDATION_EXPORT const unsigned char FirebaseCoreVersionString[]; - diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.debug.xcconfig deleted file mode 100644 index a3c20de..0000000 --- a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.debug.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRCore_VERSION=6.6.7 Firebase_VERSION=6.23.0 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_TARGET_SRCROOT}" -OTHER_CFLAGS = $(inherited) -fno-autolink -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCore -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.modulemap b/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.modulemap deleted file mode 100644 index 4c38b87..0000000 --- a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FirebaseCore { - umbrella header "FirebaseCore-umbrella.h" - - export * - module * { export * } -} diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.release.xcconfig b/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.release.xcconfig deleted file mode 100644 index a3c20de..0000000 --- a/assign5/openTok/Pods/Target Support Files/FirebaseCore/FirebaseCore.release.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRCore_VERSION=6.6.7 Firebase_VERSION=6.23.0 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_TARGET_SRCROOT}" -OTHER_CFLAGS = $(inherited) -fno-autolink -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCore -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist b/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist deleted file mode 100644 index 2e6c90d..0000000 --- a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>1.2.4</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-dummy.m b/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-dummy.m deleted file mode 100644 index 224d263..0000000 --- a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_FirebaseCoreDiagnostics : NSObject -@end -@implementation PodsDummy_FirebaseCoreDiagnostics -@end diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-umbrella.h b/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-umbrella.h deleted file mode 100644 index d6c0706..0000000 --- a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-umbrella.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "firebasecore.nanopb.h" - -FOUNDATION_EXPORT double FirebaseCoreDiagnosticsVersionNumber; -FOUNDATION_EXPORT const unsigned char FirebaseCoreDiagnosticsVersionString[]; - diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.debug.xcconfig deleted file mode 100644 index aab1b33..0000000 --- a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.debug.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -GCC_TREAT_WARNINGS_AS_ERRORS = YES -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_TARGET_SRCROOT}/Firebase/CoreDiagnostics/" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCoreDiagnostics -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap b/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap deleted file mode 100644 index d9cad8b..0000000 --- a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FirebaseCoreDiagnostics { - umbrella header "FirebaseCoreDiagnostics-umbrella.h" - - export * - module * { export * } -} diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.release.xcconfig b/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.release.xcconfig deleted file mode 100644 index aab1b33..0000000 --- a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.release.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -GCC_TREAT_WARNINGS_AS_ERRORS = YES -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_TARGET_SRCROOT}/Firebase/CoreDiagnostics/" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCoreDiagnostics -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.debug.xcconfig deleted file mode 100644 index 66fd960..0000000 --- a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.debug.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnosticsInterop -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FirebaseCoreDiagnosticsInterop" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCoreDiagnosticsInterop -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.release.xcconfig b/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.release.xcconfig deleted file mode 100644 index 66fd960..0000000 --- a/assign5/openTok/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.release.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnosticsInterop -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FirebaseCoreDiagnosticsInterop" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCoreDiagnosticsInterop -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-Info.plist b/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-Info.plist deleted file mode 100644 index 45024a7..0000000 --- a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>6.2.0</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-dummy.m b/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-dummy.m deleted file mode 100644 index 40813e7..0000000 --- a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_FirebaseDatabase : NSObject -@end -@implementation PodsDummy_FirebaseDatabase -@end diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-umbrella.h b/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-umbrella.h deleted file mode 100644 index b9b40ff..0000000 --- a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase-umbrella.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "FIRDatabase.h" -#import "FIRDatabaseQuery.h" -#import "FIRDatabaseReference.h" -#import "FIRDataEventType.h" -#import "FIRDataSnapshot.h" -#import "FirebaseDatabase.h" -#import "FIRMutableData.h" -#import "FIRServerValue.h" -#import "FIRTransactionResult.h" - -FOUNDATION_EXPORT double FirebaseDatabaseVersionNumber; -FOUNDATION_EXPORT const unsigned char FirebaseDatabaseVersionString[]; - diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.debug.xcconfig deleted file mode 100644 index fc10939..0000000 --- a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.debug.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRDatabase_VERSION=6.2.0 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseDatabase -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.modulemap b/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.modulemap deleted file mode 100644 index 7424a95..0000000 --- a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FirebaseDatabase { - umbrella header "FirebaseDatabase-umbrella.h" - - export * - module * { export * } -} diff --git a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.release.xcconfig b/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.release.xcconfig deleted file mode 100644 index fc10939..0000000 --- a/assign5/openTok/Pods/Target Support Files/FirebaseDatabase/FirebaseDatabase.release.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRDatabase_VERSION=6.2.0 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseDatabase -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist b/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist deleted file mode 100644 index e92eb78..0000000 --- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>6.0.0</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-dummy.m b/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-dummy.m deleted file mode 100644 index 9a08ec3..0000000 --- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_GoogleDataTransport : NSObject -@end -@implementation PodsDummy_GoogleDataTransport -@end diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-umbrella.h b/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-umbrella.h deleted file mode 100644 index eb436e1..0000000 --- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-umbrella.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "GDTCORAssert.h" -#import "GDTCORClock.h" -#import "GDTCORConsoleLogger.h" -#import "GDTCOREvent.h" -#import "GDTCOREventDataObject.h" -#import "GDTCOREventTransformer.h" -#import "GDTCORLifecycle.h" -#import "GDTCORPlatform.h" -#import "GDTCORPrioritizer.h" -#import "GDTCORReachability.h" -#import "GDTCORRegistrar.h" -#import "GDTCORStorageProtocol.h" -#import "GDTCORTargets.h" -#import "GDTCORTransport.h" -#import "GDTCORUploader.h" -#import "GDTCORUploadPackage.h" -#import "GoogleDataTransport.h" - -FOUNDATION_EXPORT double GoogleDataTransportVersionNumber; -FOUNDATION_EXPORT const unsigned char GoogleDataTransportVersionString[]; - diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.debug.xcconfig deleted file mode 100644 index dc81c5b..0000000 --- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.debug.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GDTCOR_VERSION=6.0.0 -GCC_TREAT_WARNINGS_AS_ERRORS = YES -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/GoogleDataTransport/" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleDataTransport -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap b/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap deleted file mode 100644 index 8a67414..0000000 --- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module GoogleDataTransport { - umbrella header "GoogleDataTransport-umbrella.h" - - export * - module * { export * } -} diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.release.xcconfig b/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.release.xcconfig deleted file mode 100644 index dc81c5b..0000000 --- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.release.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GDTCOR_VERSION=6.0.0 -GCC_TREAT_WARNINGS_AS_ERRORS = YES -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/GoogleDataTransport/" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleDataTransport -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-Info.plist b/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-Info.plist deleted file mode 100644 index 4522675..0000000 --- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>3.0.0</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-dummy.m b/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-dummy.m deleted file mode 100644 index 3c7f556..0000000 --- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_GoogleDataTransportCCTSupport : NSObject -@end -@implementation PodsDummy_GoogleDataTransportCCTSupport -@end diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-umbrella.h b/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-umbrella.h deleted file mode 100644 index 7f5ac1c..0000000 --- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-umbrella.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "cct.nanopb.h" - -FOUNDATION_EXPORT double GoogleDataTransportCCTSupportVersionNumber; -FOUNDATION_EXPORT const unsigned char GoogleDataTransportCCTSupportVersionString[]; - diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.debug.xcconfig deleted file mode 100644 index d1a9d30..0000000 --- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.debug.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 GDTCCTSUPPORT_VERSION=3.0.0 -GCC_TREAT_WARNINGS_AS_ERRORS = YES -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/GoogleDataTransportCCTSupport/" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleDataTransportCCTSupport -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap b/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap deleted file mode 100644 index 7cec8f0..0000000 --- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module GoogleDataTransportCCTSupport { - umbrella header "GoogleDataTransportCCTSupport-umbrella.h" - - export * - module * { export * } -} diff --git a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.release.xcconfig b/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.release.xcconfig deleted file mode 100644 index d1a9d30..0000000 --- a/assign5/openTok/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.release.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 GDTCCTSUPPORT_VERSION=3.0.0 -GCC_TREAT_WARNINGS_AS_ERRORS = YES -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/GoogleDataTransportCCTSupport/" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleDataTransportCCTSupport -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist b/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist deleted file mode 100644 index 3fe24c0..0000000 --- a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>6.6.0</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-dummy.m b/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-dummy.m deleted file mode 100644 index 98ac4e9..0000000 --- a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_GoogleUtilities : NSObject -@end -@implementation PodsDummy_GoogleUtilities -@end diff --git a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch b/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-umbrella.h b/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-umbrella.h deleted file mode 100644 index 2b68b6a..0000000 --- a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-umbrella.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "GULLoggerLevel.h" - -FOUNDATION_EXPORT double GoogleUtilitiesVersionNumber; -FOUNDATION_EXPORT const unsigned char GoogleUtilitiesVersionString[]; - diff --git a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.debug.xcconfig deleted file mode 100644 index ac907df..0000000 --- a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.debug.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleUtilities -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.modulemap b/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.modulemap deleted file mode 100644 index 491dd0a..0000000 --- a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module GoogleUtilities { - umbrella header "GoogleUtilities-umbrella.h" - - export * - module * { export * } -} diff --git a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.release.xcconfig b/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.release.xcconfig deleted file mode 100644 index ac907df..0000000 --- a/assign5/openTok/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.release.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleUtilities -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-Info.plist b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-Info.plist deleted file mode 100644 index 2243fe6..0000000 --- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>1.0.0</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-acknowledgements.markdown b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-acknowledgements.markdown deleted file mode 100644 index d3827e9..0000000 --- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-acknowledgements.markdown +++ /dev/null @@ -1,2163 +0,0 @@ -# Acknowledgements -This application makes use of the following third party libraries: - -## Firebase - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -## FirebaseAuthInterop - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -## FirebaseCore - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -## FirebaseCoreDiagnostics - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -## FirebaseCoreDiagnosticsInterop - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -## FirebaseDatabase - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -## GoogleDataTransport - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -## GoogleDataTransportCCTSupport - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -## GoogleUtilities - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================================ - -The following copyright from Landon J. Fuller applies to the isAppEncrypted -function in Environment/third_party/GULAppEnvironmentUtil.m. - -Copyright (c) 2017 Landon J. Fuller <landon@landonf.org> -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Comment from -<a href="http://iphonedevwiki.net/index.php/Crack_prevention">iPhone Dev Wiki -Crack Prevention</a>: App Store binaries are signed by both their developer -and Apple. This encrypts the binary so that decryption keys are needed in order -to make the binary readable. When iOS executes the binary, the decryption keys -are used to decrypt the binary into a readable state where it is then loaded -into memory and executed. iOS can tell the encryption status of a binary via the -cryptid structure member of LC_ENCRYPTION_INFO MachO load command. If cryptid is -a non-zero value then the binary is encrypted. - -'Cracking' works by letting the kernel decrypt the binary then siphoning the -decrypted data into a new binary file, resigning, and repackaging. This will -only work on jailbroken devices as codesignature validation has been removed. -Resigning takes place because while the codesignature doesn't have to be valid -thanks to the jailbreak, it does have to be in place unless you have AppSync or -similar to disable codesignature checks. - -More information at <a href="http://landonf.org/2009/02/index.html">Landon -Fuller's blog</a> - - -## PromisesObjC - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -## leveldb-library - -Copyright (c) 2011 The LevelDB Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -## nanopb - -Copyright (c) 2011 Petteri Aimonen <jpa at nanopb.mail.kapsi.fi> - -This software is provided 'as-is', without any express or -implied warranty. In no event will the authors be held liable -for any damages arising from the use of this software. - -Permission is granted to anyone to use this software for any -purpose, including commercial applications, and to alter it and -redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you - must not claim that you wrote the original software. If you use - this software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and - must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. - -Generated by CocoaPods - https://cocoapods.org diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-acknowledgements.plist b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-acknowledgements.plist deleted file mode 100644 index 635e229..0000000 --- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-acknowledgements.plist +++ /dev/null @@ -1,2261 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>PreferenceSpecifiers</key> - <array> - <dict> - <key>FooterText</key> - <string>This application makes use of the following third party libraries:</string> - <key>Title</key> - <string>Acknowledgements</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string> - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -</string> - <key>License</key> - <string>Apache</string> - <key>Title</key> - <string>Firebase</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string> - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -</string> - <key>License</key> - <string>Apache</string> - <key>Title</key> - <string>FirebaseAuthInterop</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string> - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -</string> - <key>License</key> - <string>Apache</string> - <key>Title</key> - <string>FirebaseCore</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string> - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -</string> - <key>License</key> - <string>Apache</string> - <key>Title</key> - <string>FirebaseCoreDiagnostics</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string> - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -</string> - <key>License</key> - <string>Apache</string> - <key>Title</key> - <string>FirebaseCoreDiagnosticsInterop</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string> - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -</string> - <key>License</key> - <string>Apache</string> - <key>Title</key> - <string>FirebaseDatabase</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string> - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -</string> - <key>License</key> - <string>Apache</string> - <key>Title</key> - <string>GoogleDataTransport</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string> - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -</string> - <key>License</key> - <string>Apache</string> - <key>Title</key> - <string>GoogleDataTransportCCTSupport</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string> - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================================ - -The following copyright from Landon J. Fuller applies to the isAppEncrypted -function in Environment/third_party/GULAppEnvironmentUtil.m. - -Copyright (c) 2017 Landon J. Fuller <landon@landonf.org> -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Comment from -<a href="http://iphonedevwiki.net/index.php/Crack_prevention">iPhone Dev Wiki -Crack Prevention</a>: App Store binaries are signed by both their developer -and Apple. This encrypts the binary so that decryption keys are needed in order -to make the binary readable. When iOS executes the binary, the decryption keys -are used to decrypt the binary into a readable state where it is then loaded -into memory and executed. iOS can tell the encryption status of a binary via the -cryptid structure member of LC_ENCRYPTION_INFO MachO load command. If cryptid is -a non-zero value then the binary is encrypted. - -'Cracking' works by letting the kernel decrypt the binary then siphoning the -decrypted data into a new binary file, resigning, and repackaging. This will -only work on jailbroken devices as codesignature validation has been removed. -Resigning takes place because while the codesignature doesn't have to be valid -thanks to the jailbreak, it does have to be in place unless you have AppSync or -similar to disable codesignature checks. - -More information at <a href="http://landonf.org/2009/02/index.html">Landon -Fuller's blog</a> -</string> - <key>License</key> - <string>Apache</string> - <key>Title</key> - <string>GoogleUtilities</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string> - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -</string> - <key>License</key> - <string>Apache</string> - <key>Title</key> - <string>PromisesObjC</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>Copyright (c) 2011 The LevelDB Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -</string> - <key>License</key> - <string>New BSD</string> - <key>Title</key> - <string>leveldb-library</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>Copyright (c) 2011 Petteri Aimonen <jpa at nanopb.mail.kapsi.fi> - -This software is provided 'as-is', without any express or -implied warranty. In no event will the authors be held liable -for any damages arising from the use of this software. - -Permission is granted to anyone to use this software for any -purpose, including commercial applications, and to alter it and -redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you - must not claim that you wrote the original software. If you use - this software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and - must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. -</string> - <key>License</key> - <string>zlib</string> - <key>Title</key> - <string>nanopb</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>Generated by CocoaPods - https://cocoapods.org</string> - <key>Title</key> - <string></string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - </array> - <key>StringsTable</key> - <string>Acknowledgements</string> - <key>Title</key> - <string>Acknowledgements</string> -</dict> -</plist> diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-dummy.m b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-dummy.m deleted file mode 100644 index 51ab1e6..0000000 --- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_Pods_openTok : NSObject -@end -@implementation PodsDummy_Pods_openTok -@end diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Debug-input-files.xcfilelist b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Debug-input-files.xcfilelist deleted file mode 100644 index dcd3340..0000000 --- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Debug-input-files.xcfilelist +++ /dev/null @@ -1,5 +0,0 @@ -${PODS_ROOT}/Target Support Files/Pods-openTok/Pods-openTok-frameworks.sh -${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework -${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework -${BUILT_PRODUCTS_DIR}/leveldb-library/leveldb.framework -${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework \ No newline at end of file diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Debug-output-files.xcfilelist b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Debug-output-files.xcfilelist deleted file mode 100644 index 4dc74c3..0000000 --- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Debug-output-files.xcfilelist +++ /dev/null @@ -1,4 +0,0 @@ -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/leveldb.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework \ No newline at end of file diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Release-input-files.xcfilelist b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Release-input-files.xcfilelist deleted file mode 100644 index dcd3340..0000000 --- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Release-input-files.xcfilelist +++ /dev/null @@ -1,5 +0,0 @@ -${PODS_ROOT}/Target Support Files/Pods-openTok/Pods-openTok-frameworks.sh -${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework -${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework -${BUILT_PRODUCTS_DIR}/leveldb-library/leveldb.framework -${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework \ No newline at end of file diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Release-output-files.xcfilelist b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Release-output-files.xcfilelist deleted file mode 100644 index 4dc74c3..0000000 --- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks-Release-output-files.xcfilelist +++ /dev/null @@ -1,4 +0,0 @@ -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/leveldb.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework \ No newline at end of file diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks.sh b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks.sh deleted file mode 100755 index ef3a79f..0000000 --- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-frameworks.sh +++ /dev/null @@ -1,213 +0,0 @@ -#!/bin/sh -set -e -set -u -set -o pipefail - -function on_error { - echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" -} -trap 'on_error $LINENO' ERR - -if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then - # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy - # frameworks to, so exit 0 (signalling the script phase was successful). - exit 0 -fi - -echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" -mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - -COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" -SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" - -# Used as a return value for each invocation of `strip_invalid_archs` function. -STRIP_BINARY_RETVAL=0 - -# This protects against multiple targets copying the same framework dependency at the same time. The solution -# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html -RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") - -# Copies and strips a vendored framework -install_framework() -{ - if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then - local source="${BUILT_PRODUCTS_DIR}/$1" - elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then - local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" - elif [ -r "$1" ]; then - local source="$1" - fi - - local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - - if [ -L "${source}" ]; then - echo "Symlinked..." - source="$(readlink "${source}")" - fi - - # Use filter instead of exclude so missing patterns don't throw errors. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" - - local basename - basename="$(basename -s .framework "$1")" - binary="${destination}/${basename}.framework/${basename}" - - if ! [ -r "$binary" ]; then - binary="${destination}/${basename}" - elif [ -L "${binary}" ]; then - echo "Destination binary is symlinked..." - dirname="$(dirname "${binary}")" - binary="${dirname}/$(readlink "${binary}")" - fi - - # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then - strip_invalid_archs "$binary" - fi - - # Resign the code if required by the build settings to avoid unstable apps - code_sign_if_enabled "${destination}/$(basename "$1")" - - # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. - if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then - local swift_runtime_libs - swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) - for lib in $swift_runtime_libs; do - echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" - rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" - code_sign_if_enabled "${destination}/${lib}" - done - fi -} - -# Copies and strips a vendored dSYM -install_dsym() { - local source="$1" - warn_missing_arch=${2:-true} - if [ -r "$source" ]; then - # Copy the dSYM into the targets temp dir. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" - - local basename - basename="$(basename -s .dSYM "$source")" - binary_name="$(ls "$source/Contents/Resources/DWARF")" - binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" - - # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then - strip_invalid_archs "$binary" "$warn_missing_arch" - fi - - if [[ $STRIP_BINARY_RETVAL == 1 ]]; then - # Move the stripped file into its final destination. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" - else - # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. - touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" - fi - fi -} - -# Copies the bcsymbolmap files of a vendored framework -install_bcsymbolmap() { - local bcsymbolmap_path="$1" - local destination="${BUILT_PRODUCTS_DIR}" - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" -} - -# Signs a framework with the provided identity -code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then - # Use the current code_sign_identity - echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" - - if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - code_sign_cmd="$code_sign_cmd &" - fi - echo "$code_sign_cmd" - eval "$code_sign_cmd" - fi -} - -# Strip invalid architectures -strip_invalid_archs() { - binary="$1" - warn_missing_arch=${2:-true} - # Get architectures for current target binary - binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" - # Intersect them with the architectures we are building for - intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" - # If there are no archs supported by this binary then warn the user - if [[ -z "$intersected_archs" ]]; then - if [[ "$warn_missing_arch" == "true" ]]; then - echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." - fi - STRIP_BINARY_RETVAL=0 - return - fi - stripped="" - for arch in $binary_archs; do - if ! [[ "${ARCHS}" == *"$arch"* ]]; then - # Strip non-valid architectures in-place - lipo -remove "$arch" -output "$binary" "$binary" - stripped="$stripped $arch" - fi - done - if [[ "$stripped" ]]; then - echo "Stripped $binary of architectures:$stripped" - fi - STRIP_BINARY_RETVAL=1 -} - -install_artifact() { - artifact="$1" - base="$(basename "$artifact")" - case $base in - *.framework) - install_framework "$artifact" - ;; - *.dSYM) - # Suppress arch warnings since XCFrameworks will include many dSYM files - install_dsym "$artifact" "false" - ;; - *.bcsymbolmap) - install_bcsymbolmap "$artifact" - ;; - *) - echo "error: Unrecognized artifact "$artifact"" - ;; - esac -} - -copy_artifacts() { - file_list="$1" - while read artifact; do - install_artifact "$artifact" - done <$file_list -} - -ARTIFACT_LIST_FILE="${BUILT_PRODUCTS_DIR}/cocoapods-artifacts-${CONFIGURATION}.txt" -if [ -r "${ARTIFACT_LIST_FILE}" ]; then - copy_artifacts "${ARTIFACT_LIST_FILE}" -fi - -if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework" - install_framework "${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework" - install_framework "${BUILT_PRODUCTS_DIR}/leveldb-library/leveldb.framework" - install_framework "${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework" -fi -if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework" - install_framework "${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework" - install_framework "${BUILT_PRODUCTS_DIR}/leveldb-library/leveldb.framework" - install_framework "${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework" -fi -if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - wait -fi diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-umbrella.h b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-umbrella.h deleted file mode 100644 index 6c3cfa8..0000000 --- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double Pods_openTokVersionNumber; -FOUNDATION_EXPORT const unsigned char Pods_openTokVersionString[]; - diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.debug.xcconfig deleted file mode 100644 index a25fcb4..0000000 --- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.debug.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase/FirebaseDatabase.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library/leveldb.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAuthInterop" "${PODS_ROOT}/Headers/Public/FirebaseCoreDiagnosticsInterop" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources "${PODS_TARGET_SRCROOT}/Sources/FBLPromises/include" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"icucore" -l"z" -framework "CFNetwork" -framework "CoreTelephony" -framework "FBLPromises" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseDatabase" -framework "Foundation" -framework "GoogleDataTransport" -framework "GoogleDataTransportCCTSupport" -framework "GoogleUtilities" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "leveldb" -framework "nanopb" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_PODFILE_DIR_PATH = ${SRCROOT}/. -PODS_ROOT = ${SRCROOT}/Pods -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.modulemap b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.modulemap deleted file mode 100644 index 2dd690a..0000000 --- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Pods_openTok { - umbrella header "Pods-openTok-umbrella.h" - - export * - module * { export * } -} diff --git a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.release.xcconfig b/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.release.xcconfig deleted file mode 100644 index a25fcb4..0000000 --- a/assign5/openTok/Pods/Target Support Files/Pods-openTok/Pods-openTok.release.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase/FirebaseDatabase.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library/leveldb.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAuthInterop" "${PODS_ROOT}/Headers/Public/FirebaseCoreDiagnosticsInterop" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources "${PODS_TARGET_SRCROOT}/Sources/FBLPromises/include" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"icucore" -l"z" -framework "CFNetwork" -framework "CoreTelephony" -framework "FBLPromises" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseDatabase" -framework "Foundation" -framework "GoogleDataTransport" -framework "GoogleDataTransportCCTSupport" -framework "GoogleUtilities" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "leveldb" -framework "nanopb" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_PODFILE_DIR_PATH = ${SRCROOT}/. -PODS_ROOT = ${SRCROOT}/Pods -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-Info.plist b/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-Info.plist deleted file mode 100644 index f5f78f7..0000000 --- a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>1.2.8</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-dummy.m b/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-dummy.m deleted file mode 100644 index ab1f210..0000000 --- a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_PromisesObjC : NSObject -@end -@implementation PodsDummy_PromisesObjC -@end diff --git a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-umbrella.h b/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-umbrella.h deleted file mode 100644 index 5b014a8..0000000 --- a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC-umbrella.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "FBLPromise+All.h" -#import "FBLPromise+Always.h" -#import "FBLPromise+Any.h" -#import "FBLPromise+Async.h" -#import "FBLPromise+Await.h" -#import "FBLPromise+Catch.h" -#import "FBLPromise+Delay.h" -#import "FBLPromise+Do.h" -#import "FBLPromise+Race.h" -#import "FBLPromise+Recover.h" -#import "FBLPromise+Reduce.h" -#import "FBLPromise+Retry.h" -#import "FBLPromise+Testing.h" -#import "FBLPromise+Then.h" -#import "FBLPromise+Timeout.h" -#import "FBLPromise+Validate.h" -#import "FBLPromise+Wrap.h" -#import "FBLPromise.h" -#import "FBLPromiseError.h" -#import "FBLPromises.h" - -FOUNDATION_EXPORT double FBLPromisesVersionNumber; -FOUNDATION_EXPORT const unsigned char FBLPromisesVersionString[]; - diff --git a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.debug.xcconfig deleted file mode 100644 index dac127e..0000000 --- a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.debug.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/Sources/FBLPromises/include" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/PromisesObjC -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.modulemap b/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.modulemap deleted file mode 100644 index 7d485cd..0000000 --- a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FBLPromises { - umbrella header "PromisesObjC-umbrella.h" - - export * - module * { export * } -} diff --git a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.release.xcconfig b/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.release.xcconfig deleted file mode 100644 index dac127e..0000000 --- a/assign5/openTok/Pods/Target Support Files/PromisesObjC/PromisesObjC.release.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/Sources/FBLPromises/include" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/PromisesObjC -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-Info.plist b/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-Info.plist deleted file mode 100644 index da1bc00..0000000 --- a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>1.22.0</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-dummy.m b/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-dummy.m deleted file mode 100644 index dba1492..0000000 --- a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_leveldb_library : NSObject -@end -@implementation PodsDummy_leveldb_library -@end diff --git a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-prefix.pch b/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-umbrella.h b/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-umbrella.h deleted file mode 100644 index 6a45902..0000000 --- a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library-umbrella.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "c.h" -#import "cache.h" -#import "comparator.h" -#import "db.h" -#import "dumpfile.h" -#import "env.h" -#import "export.h" -#import "filter_policy.h" -#import "iterator.h" -#import "options.h" -#import "slice.h" -#import "status.h" -#import "table.h" -#import "table_builder.h" -#import "write_batch.h" - -FOUNDATION_EXPORT double leveldbVersionNumber; -FOUNDATION_EXPORT const unsigned char leveldbVersionString[]; - diff --git a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.debug.xcconfig deleted file mode 100644 index d1992a1..0000000 --- a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.debug.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LEVELDB_IS_BIG_ENDIAN=0 LEVELDB_PLATFORM_POSIX HAVE_FULLFSYNC=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/leveldb-library" "${PODS_ROOT}/leveldb-library/include" -OTHER_LDFLAGS = $(inherited) -l"c++" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/leveldb-library -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_HEADERMAP = No -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES -WARNING_CFLAGS = -Wno-shorten-64-to-32 -Wno-comma -Wno-unreachable-code -Wno-conditional-uninitialized -Wno-deprecated-declarations diff --git a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.modulemap b/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.modulemap deleted file mode 100644 index fd77435..0000000 --- a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module leveldb { - umbrella header "leveldb-library-umbrella.h" - - export * - module * { export * } -} diff --git a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.release.xcconfig b/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.release.xcconfig deleted file mode 100644 index d1992a1..0000000 --- a/assign5/openTok/Pods/Target Support Files/leveldb-library/leveldb-library.release.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LEVELDB_IS_BIG_ENDIAN=0 LEVELDB_PLATFORM_POSIX HAVE_FULLFSYNC=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/leveldb-library" "${PODS_ROOT}/leveldb-library/include" -OTHER_LDFLAGS = $(inherited) -l"c++" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/leveldb-library -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_HEADERMAP = No -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES -WARNING_CFLAGS = -Wno-shorten-64-to-32 -Wno-comma -Wno-unreachable-code -Wno-conditional-uninitialized -Wno-deprecated-declarations diff --git a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-Info.plist b/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-Info.plist deleted file mode 100644 index bcc2778..0000000 --- a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>0.3.9011</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-dummy.m b/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-dummy.m deleted file mode 100644 index b3fa595..0000000 --- a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_nanopb : NSObject -@end -@implementation PodsDummy_nanopb -@end diff --git a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-prefix.pch b/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-umbrella.h b/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-umbrella.h deleted file mode 100644 index 07e77b3..0000000 --- a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb-umbrella.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifdef __OBJC__ -#import <UIKit/UIKit.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "pb.h" -#import "pb_common.h" -#import "pb_decode.h" -#import "pb_encode.h" -#import "pb.h" -#import "pb_decode.h" -#import "pb_common.h" -#import "pb.h" -#import "pb_encode.h" -#import "pb_common.h" - -FOUNDATION_EXPORT double nanopbVersionNumber; -FOUNDATION_EXPORT const unsigned char nanopbVersionString[]; - diff --git a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb.debug.xcconfig b/assign5/openTok/Pods/Target Support Files/nanopb/nanopb.debug.xcconfig deleted file mode 100644 index 8e7193b..0000000 --- a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb.debug.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/nanopb -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/nanopb -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb.modulemap b/assign5/openTok/Pods/Target Support Files/nanopb/nanopb.modulemap deleted file mode 100644 index e8d4b53..0000000 --- a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module nanopb { - umbrella header "nanopb-umbrella.h" - - export * - module * { export * } -} diff --git a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb.release.xcconfig b/assign5/openTok/Pods/Target Support Files/nanopb/nanopb.release.xcconfig deleted file mode 100644 index 8e7193b..0000000 --- a/assign5/openTok/Pods/Target Support Files/nanopb/nanopb.release.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/nanopb -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/nanopb -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/assign5/openTok/Pods/leveldb-library/LICENSE b/assign5/openTok/Pods/leveldb-library/LICENSE deleted file mode 100644 index 8e80208..0000000 --- a/assign5/openTok/Pods/leveldb-library/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2011 The LevelDB Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/assign5/openTok/Pods/leveldb-library/README.md b/assign5/openTok/Pods/leveldb-library/README.md deleted file mode 100644 index 0b660ae..0000000 --- a/assign5/openTok/Pods/leveldb-library/README.md +++ /dev/null @@ -1,225 +0,0 @@ -**LevelDB is a fast key-value storage library written at Google that provides an ordered mapping from string keys to string values.** - -[](https://travis-ci.org/google/leveldb) -[](https://ci.appveyor.com/project/pwnall/leveldb) - -Authors: Sanjay Ghemawat (sanjay@google.com) and Jeff Dean (jeff@google.com) - -# Features - - * Keys and values are arbitrary byte arrays. - * Data is stored sorted by key. - * Callers can provide a custom comparison function to override the sort order. - * The basic operations are `Put(key,value)`, `Get(key)`, `Delete(key)`. - * Multiple changes can be made in one atomic batch. - * Users can create a transient snapshot to get a consistent view of data. - * Forward and backward iteration is supported over the data. - * Data is automatically compressed using the [Snappy compression library](http://google.github.io/snappy/). - * External activity (file system operations etc.) is relayed through a virtual interface so users can customize the operating system interactions. - -# Documentation - - [LevelDB library documentation](https://github.com/google/leveldb/blob/master/doc/index.md) is online and bundled with the source code. - -# Limitations - - * This is not a SQL database. It does not have a relational data model, it does not support SQL queries, and it has no support for indexes. - * Only a single process (possibly multi-threaded) can access a particular database at a time. - * There is no client-server support builtin to the library. An application that needs such support will have to wrap their own server around the library. - -# Building - -This project supports [CMake](https://cmake.org/) out of the box. - -### Build for POSIX - -Quick start: - -```bash -mkdir -p build && cd build -cmake -DCMAKE_BUILD_TYPE=Release .. && cmake --build . -``` - -### Building for Windows - -First generate the Visual Studio 2017 project/solution files: - -```cmd -mkdir build -cd build -cmake -G "Visual Studio 15" .. -``` -The default default will build for x86. For 64-bit run: - -```cmd -cmake -G "Visual Studio 15 Win64" .. -``` - -To compile the Windows solution from the command-line: - -```cmd -devenv /build Debug leveldb.sln -``` - -or open leveldb.sln in Visual Studio and build from within. - -Please see the CMake documentation and `CMakeLists.txt` for more advanced usage. - -# Contributing to the leveldb Project - -The leveldb project welcomes contributions. leveldb's primary goal is to be -a reliable and fast key/value store. Changes that are in line with the -features/limitations outlined above, and meet the requirements below, -will be considered. - -Contribution requirements: - -1. **Tested platforms only**. We _generally_ will only accept changes for - platforms that are compiled and tested. This means POSIX (for Linux and - macOS) or Windows. Very small changes will sometimes be accepted, but - consider that more of an exception than the rule. - -2. **Stable API**. We strive very hard to maintain a stable API. Changes that - require changes for projects using leveldb _might_ be rejected without - sufficient benefit to the project. - -3. **Tests**: All changes must be accompanied by a new (or changed) test, or - a sufficient explanation as to why a new (or changed) test is not required. - -4. **Consistent Style**: This project conforms to the - [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html). - To ensure your changes are properly formatted please run: - - ``` - clang-format -i --style=file <file> - ``` - -## Submitting a Pull Request - -Before any pull request will be accepted the author must first sign a -Contributor License Agreement (CLA) at https://cla.developers.google.com/. - -In order to keep the commit timeline linear -[squash](https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History#Squashing-Commits) -your changes down to a single commit and [rebase](https://git-scm.com/docs/git-rebase) -on google/leveldb/master. This keeps the commit timeline linear and more easily sync'ed -with the internal repository at Google. More information at GitHub's -[About Git rebase](https://help.github.com/articles/about-git-rebase/) page. - -# Performance - -Here is a performance report (with explanations) from the run of the -included db_bench program. The results are somewhat noisy, but should -be enough to get a ballpark performance estimate. - -## Setup - -We use a database with a million entries. Each entry has a 16 byte -key, and a 100 byte value. Values used by the benchmark compress to -about half their original size. - - LevelDB: version 1.1 - Date: Sun May 1 12:11:26 2011 - CPU: 4 x Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz - CPUCache: 4096 KB - Keys: 16 bytes each - Values: 100 bytes each (50 bytes after compression) - Entries: 1000000 - Raw Size: 110.6 MB (estimated) - File Size: 62.9 MB (estimated) - -## Write performance - -The "fill" benchmarks create a brand new database, in either -sequential, or random order. The "fillsync" benchmark flushes data -from the operating system to the disk after every operation; the other -write operations leave the data sitting in the operating system buffer -cache for a while. The "overwrite" benchmark does random writes that -update existing keys in the database. - - fillseq : 1.765 micros/op; 62.7 MB/s - fillsync : 268.409 micros/op; 0.4 MB/s (10000 ops) - fillrandom : 2.460 micros/op; 45.0 MB/s - overwrite : 2.380 micros/op; 46.5 MB/s - -Each "op" above corresponds to a write of a single key/value pair. -I.e., a random write benchmark goes at approximately 400,000 writes per second. - -Each "fillsync" operation costs much less (0.3 millisecond) -than a disk seek (typically 10 milliseconds). We suspect that this is -because the hard disk itself is buffering the update in its memory and -responding before the data has been written to the platter. This may -or may not be safe based on whether or not the hard disk has enough -power to save its memory in the event of a power failure. - -## Read performance - -We list the performance of reading sequentially in both the forward -and reverse direction, and also the performance of a random lookup. -Note that the database created by the benchmark is quite small. -Therefore the report characterizes the performance of leveldb when the -working set fits in memory. The cost of reading a piece of data that -is not present in the operating system buffer cache will be dominated -by the one or two disk seeks needed to fetch the data from disk. -Write performance will be mostly unaffected by whether or not the -working set fits in memory. - - readrandom : 16.677 micros/op; (approximately 60,000 reads per second) - readseq : 0.476 micros/op; 232.3 MB/s - readreverse : 0.724 micros/op; 152.9 MB/s - -LevelDB compacts its underlying storage data in the background to -improve read performance. The results listed above were done -immediately after a lot of random writes. The results after -compactions (which are usually triggered automatically) are better. - - readrandom : 11.602 micros/op; (approximately 85,000 reads per second) - readseq : 0.423 micros/op; 261.8 MB/s - readreverse : 0.663 micros/op; 166.9 MB/s - -Some of the high cost of reads comes from repeated decompression of blocks -read from disk. If we supply enough cache to the leveldb so it can hold the -uncompressed blocks in memory, the read performance improves again: - - readrandom : 9.775 micros/op; (approximately 100,000 reads per second before compaction) - readrandom : 5.215 micros/op; (approximately 190,000 reads per second after compaction) - -## Repository contents - -See [doc/index.md](doc/index.md) for more explanation. See -[doc/impl.md](doc/impl.md) for a brief overview of the implementation. - -The public interface is in include/*.h. Callers should not include or -rely on the details of any other header files in this package. Those -internal APIs may be changed without warning. - -Guide to header files: - -* **include/db.h**: Main interface to the DB: Start here - -* **include/options.h**: Control over the behavior of an entire database, -and also control over the behavior of individual reads and writes. - -* **include/comparator.h**: Abstraction for user-specified comparison function. -If you want just bytewise comparison of keys, you can use the default -comparator, but clients can write their own comparator implementations if they -want custom ordering (e.g. to handle different character encodings, etc.) - -* **include/iterator.h**: Interface for iterating over data. You can get -an iterator from a DB object. - -* **include/write_batch.h**: Interface for atomically applying multiple -updates to a database. - -* **include/slice.h**: A simple module for maintaining a pointer and a -length into some other byte array. - -* **include/status.h**: Status is returned from many of the public interfaces -and is used to report success and various kinds of errors. - -* **include/env.h**: -Abstraction of the OS environment. A posix implementation of this interface is -in util/env_posix.cc - -* **include/table.h, include/table_builder.h**: Lower-level modules that most -clients probably won't use directly diff --git a/assign5/openTok/Pods/leveldb-library/db/builder.cc b/assign5/openTok/Pods/leveldb-library/db/builder.cc deleted file mode 100644 index 9520ee4..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/builder.cc +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/builder.h" - -#include "db/dbformat.h" -#include "db/filename.h" -#include "db/table_cache.h" -#include "db/version_edit.h" -#include "leveldb/db.h" -#include "leveldb/env.h" -#include "leveldb/iterator.h" - -namespace leveldb { - -Status BuildTable(const std::string& dbname, Env* env, const Options& options, - TableCache* table_cache, Iterator* iter, FileMetaData* meta) { - Status s; - meta->file_size = 0; - iter->SeekToFirst(); - - std::string fname = TableFileName(dbname, meta->number); - if (iter->Valid()) { - WritableFile* file; - s = env->NewWritableFile(fname, &file); - if (!s.ok()) { - return s; - } - - TableBuilder* builder = new TableBuilder(options, file); - meta->smallest.DecodeFrom(iter->key()); - for (; iter->Valid(); iter->Next()) { - Slice key = iter->key(); - meta->largest.DecodeFrom(key); - builder->Add(key, iter->value()); - } - - // Finish and check for builder errors - s = builder->Finish(); - if (s.ok()) { - meta->file_size = builder->FileSize(); - assert(meta->file_size > 0); - } - delete builder; - - // Finish and check for file errors - if (s.ok()) { - s = file->Sync(); - } - if (s.ok()) { - s = file->Close(); - } - delete file; - file = nullptr; - - if (s.ok()) { - // Verify that the table is usable - Iterator* it = table_cache->NewIterator(ReadOptions(), meta->number, - meta->file_size); - s = it->status(); - delete it; - } - } - - // Check for input iterator errors - if (!iter->status().ok()) { - s = iter->status(); - } - - if (s.ok() && meta->file_size > 0) { - // Keep it - } else { - env->DeleteFile(fname); - } - return s; -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/db/builder.h b/assign5/openTok/Pods/leveldb-library/db/builder.h deleted file mode 100644 index 7bd0b80..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/builder.h +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_BUILDER_H_ -#define STORAGE_LEVELDB_DB_BUILDER_H_ - -#include "leveldb/status.h" - -namespace leveldb { - -struct Options; -struct FileMetaData; - -class Env; -class Iterator; -class TableCache; -class VersionEdit; - -// Build a Table file from the contents of *iter. The generated file -// will be named according to meta->number. On success, the rest of -// *meta will be filled with metadata about the generated table. -// If no data is present in *iter, meta->file_size will be set to -// zero, and no Table file will be produced. -Status BuildTable(const std::string& dbname, Env* env, const Options& options, - TableCache* table_cache, Iterator* iter, FileMetaData* meta); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_BUILDER_H_ diff --git a/assign5/openTok/Pods/leveldb-library/db/c.cc b/assign5/openTok/Pods/leveldb-library/db/c.cc deleted file mode 100644 index e0f3367..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/c.cc +++ /dev/null @@ -1,566 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/c.h" - -#include <stdlib.h> - -#include "leveldb/cache.h" -#include "leveldb/comparator.h" -#include "leveldb/db.h" -#include "leveldb/env.h" -#include "leveldb/filter_policy.h" -#include "leveldb/iterator.h" -#include "leveldb/options.h" -#include "leveldb/status.h" -#include "leveldb/write_batch.h" - -using leveldb::Cache; -using leveldb::Comparator; -using leveldb::CompressionType; -using leveldb::DB; -using leveldb::Env; -using leveldb::FileLock; -using leveldb::FilterPolicy; -using leveldb::Iterator; -using leveldb::kMajorVersion; -using leveldb::kMinorVersion; -using leveldb::Logger; -using leveldb::NewBloomFilterPolicy; -using leveldb::NewLRUCache; -using leveldb::Options; -using leveldb::RandomAccessFile; -using leveldb::Range; -using leveldb::ReadOptions; -using leveldb::SequentialFile; -using leveldb::Slice; -using leveldb::Snapshot; -using leveldb::Status; -using leveldb::WritableFile; -using leveldb::WriteBatch; -using leveldb::WriteOptions; - -extern "C" { - -struct leveldb_t { - DB* rep; -}; -struct leveldb_iterator_t { - Iterator* rep; -}; -struct leveldb_writebatch_t { - WriteBatch rep; -}; -struct leveldb_snapshot_t { - const Snapshot* rep; -}; -struct leveldb_readoptions_t { - ReadOptions rep; -}; -struct leveldb_writeoptions_t { - WriteOptions rep; -}; -struct leveldb_options_t { - Options rep; -}; -struct leveldb_cache_t { - Cache* rep; -}; -struct leveldb_seqfile_t { - SequentialFile* rep; -}; -struct leveldb_randomfile_t { - RandomAccessFile* rep; -}; -struct leveldb_writablefile_t { - WritableFile* rep; -}; -struct leveldb_logger_t { - Logger* rep; -}; -struct leveldb_filelock_t { - FileLock* rep; -}; - -struct leveldb_comparator_t : public Comparator { - virtual ~leveldb_comparator_t() { (*destructor_)(state_); } - - virtual int Compare(const Slice& a, const Slice& b) const { - return (*compare_)(state_, a.data(), a.size(), b.data(), b.size()); - } - - virtual const char* Name() const { return (*name_)(state_); } - - // No-ops since the C binding does not support key shortening methods. - virtual void FindShortestSeparator(std::string*, const Slice&) const {} - virtual void FindShortSuccessor(std::string* key) const {} - - void* state_; - void (*destructor_)(void*); - int (*compare_)(void*, const char* a, size_t alen, const char* b, - size_t blen); - const char* (*name_)(void*); -}; - -struct leveldb_filterpolicy_t : public FilterPolicy { - virtual ~leveldb_filterpolicy_t() { (*destructor_)(state_); } - - virtual const char* Name() const { return (*name_)(state_); } - - virtual void CreateFilter(const Slice* keys, int n, std::string* dst) const { - std::vector<const char*> key_pointers(n); - std::vector<size_t> key_sizes(n); - for (int i = 0; i < n; i++) { - key_pointers[i] = keys[i].data(); - key_sizes[i] = keys[i].size(); - } - size_t len; - char* filter = (*create_)(state_, &key_pointers[0], &key_sizes[0], n, &len); - dst->append(filter, len); - free(filter); - } - - virtual bool KeyMayMatch(const Slice& key, const Slice& filter) const { - return (*key_match_)(state_, key.data(), key.size(), filter.data(), - filter.size()); - } - - void* state_; - void (*destructor_)(void*); - const char* (*name_)(void*); - char* (*create_)(void*, const char* const* key_array, - const size_t* key_length_array, int num_keys, - size_t* filter_length); - unsigned char (*key_match_)(void*, const char* key, size_t length, - const char* filter, size_t filter_length); -}; - -struct leveldb_env_t { - Env* rep; - bool is_default; -}; - -static bool SaveError(char** errptr, const Status& s) { - assert(errptr != nullptr); - if (s.ok()) { - return false; - } else if (*errptr == nullptr) { - *errptr = strdup(s.ToString().c_str()); - } else { - // TODO(sanjay): Merge with existing error? - free(*errptr); - *errptr = strdup(s.ToString().c_str()); - } - return true; -} - -static char* CopyString(const std::string& str) { - char* result = reinterpret_cast<char*>(malloc(sizeof(char) * str.size())); - memcpy(result, str.data(), sizeof(char) * str.size()); - return result; -} - -leveldb_t* leveldb_open(const leveldb_options_t* options, const char* name, - char** errptr) { - DB* db; - if (SaveError(errptr, DB::Open(options->rep, std::string(name), &db))) { - return nullptr; - } - leveldb_t* result = new leveldb_t; - result->rep = db; - return result; -} - -void leveldb_close(leveldb_t* db) { - delete db->rep; - delete db; -} - -void leveldb_put(leveldb_t* db, const leveldb_writeoptions_t* options, - const char* key, size_t keylen, const char* val, size_t vallen, - char** errptr) { - SaveError(errptr, - db->rep->Put(options->rep, Slice(key, keylen), Slice(val, vallen))); -} - -void leveldb_delete(leveldb_t* db, const leveldb_writeoptions_t* options, - const char* key, size_t keylen, char** errptr) { - SaveError(errptr, db->rep->Delete(options->rep, Slice(key, keylen))); -} - -void leveldb_write(leveldb_t* db, const leveldb_writeoptions_t* options, - leveldb_writebatch_t* batch, char** errptr) { - SaveError(errptr, db->rep->Write(options->rep, &batch->rep)); -} - -char* leveldb_get(leveldb_t* db, const leveldb_readoptions_t* options, - const char* key, size_t keylen, size_t* vallen, - char** errptr) { - char* result = nullptr; - std::string tmp; - Status s = db->rep->Get(options->rep, Slice(key, keylen), &tmp); - if (s.ok()) { - *vallen = tmp.size(); - result = CopyString(tmp); - } else { - *vallen = 0; - if (!s.IsNotFound()) { - SaveError(errptr, s); - } - } - return result; -} - -leveldb_iterator_t* leveldb_create_iterator( - leveldb_t* db, const leveldb_readoptions_t* options) { - leveldb_iterator_t* result = new leveldb_iterator_t; - result->rep = db->rep->NewIterator(options->rep); - return result; -} - -const leveldb_snapshot_t* leveldb_create_snapshot(leveldb_t* db) { - leveldb_snapshot_t* result = new leveldb_snapshot_t; - result->rep = db->rep->GetSnapshot(); - return result; -} - -void leveldb_release_snapshot(leveldb_t* db, - const leveldb_snapshot_t* snapshot) { - db->rep->ReleaseSnapshot(snapshot->rep); - delete snapshot; -} - -char* leveldb_property_value(leveldb_t* db, const char* propname) { - std::string tmp; - if (db->rep->GetProperty(Slice(propname), &tmp)) { - // We use strdup() since we expect human readable output. - return strdup(tmp.c_str()); - } else { - return nullptr; - } -} - -void leveldb_approximate_sizes(leveldb_t* db, int num_ranges, - const char* const* range_start_key, - const size_t* range_start_key_len, - const char* const* range_limit_key, - const size_t* range_limit_key_len, - uint64_t* sizes) { - Range* ranges = new Range[num_ranges]; - for (int i = 0; i < num_ranges; i++) { - ranges[i].start = Slice(range_start_key[i], range_start_key_len[i]); - ranges[i].limit = Slice(range_limit_key[i], range_limit_key_len[i]); - } - db->rep->GetApproximateSizes(ranges, num_ranges, sizes); - delete[] ranges; -} - -void leveldb_compact_range(leveldb_t* db, const char* start_key, - size_t start_key_len, const char* limit_key, - size_t limit_key_len) { - Slice a, b; - db->rep->CompactRange( - // Pass null Slice if corresponding "const char*" is null - (start_key ? (a = Slice(start_key, start_key_len), &a) : nullptr), - (limit_key ? (b = Slice(limit_key, limit_key_len), &b) : nullptr)); -} - -void leveldb_destroy_db(const leveldb_options_t* options, const char* name, - char** errptr) { - SaveError(errptr, DestroyDB(name, options->rep)); -} - -void leveldb_repair_db(const leveldb_options_t* options, const char* name, - char** errptr) { - SaveError(errptr, RepairDB(name, options->rep)); -} - -void leveldb_iter_destroy(leveldb_iterator_t* iter) { - delete iter->rep; - delete iter; -} - -unsigned char leveldb_iter_valid(const leveldb_iterator_t* iter) { - return iter->rep->Valid(); -} - -void leveldb_iter_seek_to_first(leveldb_iterator_t* iter) { - iter->rep->SeekToFirst(); -} - -void leveldb_iter_seek_to_last(leveldb_iterator_t* iter) { - iter->rep->SeekToLast(); -} - -void leveldb_iter_seek(leveldb_iterator_t* iter, const char* k, size_t klen) { - iter->rep->Seek(Slice(k, klen)); -} - -void leveldb_iter_next(leveldb_iterator_t* iter) { iter->rep->Next(); } - -void leveldb_iter_prev(leveldb_iterator_t* iter) { iter->rep->Prev(); } - -const char* leveldb_iter_key(const leveldb_iterator_t* iter, size_t* klen) { - Slice s = iter->rep->key(); - *klen = s.size(); - return s.data(); -} - -const char* leveldb_iter_value(const leveldb_iterator_t* iter, size_t* vlen) { - Slice s = iter->rep->value(); - *vlen = s.size(); - return s.data(); -} - -void leveldb_iter_get_error(const leveldb_iterator_t* iter, char** errptr) { - SaveError(errptr, iter->rep->status()); -} - -leveldb_writebatch_t* leveldb_writebatch_create() { - return new leveldb_writebatch_t; -} - -void leveldb_writebatch_destroy(leveldb_writebatch_t* b) { delete b; } - -void leveldb_writebatch_clear(leveldb_writebatch_t* b) { b->rep.Clear(); } - -void leveldb_writebatch_put(leveldb_writebatch_t* b, const char* key, - size_t klen, const char* val, size_t vlen) { - b->rep.Put(Slice(key, klen), Slice(val, vlen)); -} - -void leveldb_writebatch_delete(leveldb_writebatch_t* b, const char* key, - size_t klen) { - b->rep.Delete(Slice(key, klen)); -} - -void leveldb_writebatch_iterate(const leveldb_writebatch_t* b, void* state, - void (*put)(void*, const char* k, size_t klen, - const char* v, size_t vlen), - void (*deleted)(void*, const char* k, - size_t klen)) { - class H : public WriteBatch::Handler { - public: - void* state_; - void (*put_)(void*, const char* k, size_t klen, const char* v, size_t vlen); - void (*deleted_)(void*, const char* k, size_t klen); - virtual void Put(const Slice& key, const Slice& value) { - (*put_)(state_, key.data(), key.size(), value.data(), value.size()); - } - virtual void Delete(const Slice& key) { - (*deleted_)(state_, key.data(), key.size()); - } - }; - H handler; - handler.state_ = state; - handler.put_ = put; - handler.deleted_ = deleted; - b->rep.Iterate(&handler); -} - -void leveldb_writebatch_append(leveldb_writebatch_t* destination, - const leveldb_writebatch_t* source) { - destination->rep.Append(source->rep); -} - -leveldb_options_t* leveldb_options_create() { return new leveldb_options_t; } - -void leveldb_options_destroy(leveldb_options_t* options) { delete options; } - -void leveldb_options_set_comparator(leveldb_options_t* opt, - leveldb_comparator_t* cmp) { - opt->rep.comparator = cmp; -} - -void leveldb_options_set_filter_policy(leveldb_options_t* opt, - leveldb_filterpolicy_t* policy) { - opt->rep.filter_policy = policy; -} - -void leveldb_options_set_create_if_missing(leveldb_options_t* opt, - unsigned char v) { - opt->rep.create_if_missing = v; -} - -void leveldb_options_set_error_if_exists(leveldb_options_t* opt, - unsigned char v) { - opt->rep.error_if_exists = v; -} - -void leveldb_options_set_paranoid_checks(leveldb_options_t* opt, - unsigned char v) { - opt->rep.paranoid_checks = v; -} - -void leveldb_options_set_env(leveldb_options_t* opt, leveldb_env_t* env) { - opt->rep.env = (env ? env->rep : nullptr); -} - -void leveldb_options_set_info_log(leveldb_options_t* opt, leveldb_logger_t* l) { - opt->rep.info_log = (l ? l->rep : nullptr); -} - -void leveldb_options_set_write_buffer_size(leveldb_options_t* opt, size_t s) { - opt->rep.write_buffer_size = s; -} - -void leveldb_options_set_max_open_files(leveldb_options_t* opt, int n) { - opt->rep.max_open_files = n; -} - -void leveldb_options_set_cache(leveldb_options_t* opt, leveldb_cache_t* c) { - opt->rep.block_cache = c->rep; -} - -void leveldb_options_set_block_size(leveldb_options_t* opt, size_t s) { - opt->rep.block_size = s; -} - -void leveldb_options_set_block_restart_interval(leveldb_options_t* opt, int n) { - opt->rep.block_restart_interval = n; -} - -void leveldb_options_set_max_file_size(leveldb_options_t* opt, size_t s) { - opt->rep.max_file_size = s; -} - -void leveldb_options_set_compression(leveldb_options_t* opt, int t) { - opt->rep.compression = static_cast<CompressionType>(t); -} - -leveldb_comparator_t* leveldb_comparator_create( - void* state, void (*destructor)(void*), - int (*compare)(void*, const char* a, size_t alen, const char* b, - size_t blen), - const char* (*name)(void*)) { - leveldb_comparator_t* result = new leveldb_comparator_t; - result->state_ = state; - result->destructor_ = destructor; - result->compare_ = compare; - result->name_ = name; - return result; -} - -void leveldb_comparator_destroy(leveldb_comparator_t* cmp) { delete cmp; } - -leveldb_filterpolicy_t* leveldb_filterpolicy_create( - void* state, void (*destructor)(void*), - char* (*create_filter)(void*, const char* const* key_array, - const size_t* key_length_array, int num_keys, - size_t* filter_length), - unsigned char (*key_may_match)(void*, const char* key, size_t length, - const char* filter, size_t filter_length), - const char* (*name)(void*)) { - leveldb_filterpolicy_t* result = new leveldb_filterpolicy_t; - result->state_ = state; - result->destructor_ = destructor; - result->create_ = create_filter; - result->key_match_ = key_may_match; - result->name_ = name; - return result; -} - -void leveldb_filterpolicy_destroy(leveldb_filterpolicy_t* filter) { - delete filter; -} - -leveldb_filterpolicy_t* leveldb_filterpolicy_create_bloom(int bits_per_key) { - // Make a leveldb_filterpolicy_t, but override all of its methods so - // they delegate to a NewBloomFilterPolicy() instead of user - // supplied C functions. - struct Wrapper : public leveldb_filterpolicy_t { - static void DoNothing(void*) {} - - ~Wrapper() { delete rep_; } - const char* Name() const { return rep_->Name(); } - void CreateFilter(const Slice* keys, int n, std::string* dst) const { - return rep_->CreateFilter(keys, n, dst); - } - bool KeyMayMatch(const Slice& key, const Slice& filter) const { - return rep_->KeyMayMatch(key, filter); - } - - const FilterPolicy* rep_; - }; - Wrapper* wrapper = new Wrapper; - wrapper->rep_ = NewBloomFilterPolicy(bits_per_key); - wrapper->state_ = nullptr; - wrapper->destructor_ = &Wrapper::DoNothing; - return wrapper; -} - -leveldb_readoptions_t* leveldb_readoptions_create() { - return new leveldb_readoptions_t; -} - -void leveldb_readoptions_destroy(leveldb_readoptions_t* opt) { delete opt; } - -void leveldb_readoptions_set_verify_checksums(leveldb_readoptions_t* opt, - unsigned char v) { - opt->rep.verify_checksums = v; -} - -void leveldb_readoptions_set_fill_cache(leveldb_readoptions_t* opt, - unsigned char v) { - opt->rep.fill_cache = v; -} - -void leveldb_readoptions_set_snapshot(leveldb_readoptions_t* opt, - const leveldb_snapshot_t* snap) { - opt->rep.snapshot = (snap ? snap->rep : nullptr); -} - -leveldb_writeoptions_t* leveldb_writeoptions_create() { - return new leveldb_writeoptions_t; -} - -void leveldb_writeoptions_destroy(leveldb_writeoptions_t* opt) { delete opt; } - -void leveldb_writeoptions_set_sync(leveldb_writeoptions_t* opt, - unsigned char v) { - opt->rep.sync = v; -} - -leveldb_cache_t* leveldb_cache_create_lru(size_t capacity) { - leveldb_cache_t* c = new leveldb_cache_t; - c->rep = NewLRUCache(capacity); - return c; -} - -void leveldb_cache_destroy(leveldb_cache_t* cache) { - delete cache->rep; - delete cache; -} - -leveldb_env_t* leveldb_create_default_env() { - leveldb_env_t* result = new leveldb_env_t; - result->rep = Env::Default(); - result->is_default = true; - return result; -} - -void leveldb_env_destroy(leveldb_env_t* env) { - if (!env->is_default) delete env->rep; - delete env; -} - -char* leveldb_env_get_test_directory(leveldb_env_t* env) { - std::string result; - if (!env->rep->GetTestDirectory(&result).ok()) { - return nullptr; - } - - char* buffer = static_cast<char*>(malloc(result.size() + 1)); - memcpy(buffer, result.data(), result.size()); - buffer[result.size()] = '\0'; - return buffer; -} - -void leveldb_free(void* ptr) { free(ptr); } - -int leveldb_major_version() { return kMajorVersion; } - -int leveldb_minor_version() { return kMinorVersion; } - -} // end extern "C" diff --git a/assign5/openTok/Pods/leveldb-library/db/db_impl.cc b/assign5/openTok/Pods/leveldb-library/db/db_impl.cc deleted file mode 100644 index 761ebf6..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/db_impl.cc +++ /dev/null @@ -1,1550 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/db_impl.h" - -#include <stdint.h> -#include <stdio.h> - -#include <algorithm> -#include <atomic> -#include <set> -#include <string> -#include <vector> - -#include "db/builder.h" -#include "db/db_iter.h" -#include "db/dbformat.h" -#include "db/filename.h" -#include "db/log_reader.h" -#include "db/log_writer.h" -#include "db/memtable.h" -#include "db/table_cache.h" -#include "db/version_set.h" -#include "db/write_batch_internal.h" -#include "leveldb/db.h" -#include "leveldb/env.h" -#include "leveldb/status.h" -#include "leveldb/table.h" -#include "leveldb/table_builder.h" -#include "port/port.h" -#include "table/block.h" -#include "table/merger.h" -#include "table/two_level_iterator.h" -#include "util/coding.h" -#include "util/logging.h" -#include "util/mutexlock.h" - -namespace leveldb { - -const int kNumNonTableCacheFiles = 10; - -// Information kept for every waiting writer -struct DBImpl::Writer { - explicit Writer(port::Mutex* mu) - : batch(nullptr), sync(false), done(false), cv(mu) {} - - Status status; - WriteBatch* batch; - bool sync; - bool done; - port::CondVar cv; -}; - -struct DBImpl::CompactionState { - // Files produced by compaction - struct Output { - uint64_t number; - uint64_t file_size; - InternalKey smallest, largest; - }; - - Output* current_output() { return &outputs[outputs.size() - 1]; } - - explicit CompactionState(Compaction* c) - : compaction(c), - smallest_snapshot(0), - outfile(nullptr), - builder(nullptr), - total_bytes(0) {} - - Compaction* const compaction; - - // Sequence numbers < smallest_snapshot are not significant since we - // will never have to service a snapshot below smallest_snapshot. - // Therefore if we have seen a sequence number S <= smallest_snapshot, - // we can drop all entries for the same key with sequence numbers < S. - SequenceNumber smallest_snapshot; - - std::vector<Output> outputs; - - // State kept for output being generated - WritableFile* outfile; - TableBuilder* builder; - - uint64_t total_bytes; -}; - -// Fix user-supplied options to be reasonable -template <class T, class V> -static void ClipToRange(T* ptr, V minvalue, V maxvalue) { - if (static_cast<V>(*ptr) > maxvalue) *ptr = maxvalue; - if (static_cast<V>(*ptr) < minvalue) *ptr = minvalue; -} -Options SanitizeOptions(const std::string& dbname, - const InternalKeyComparator* icmp, - const InternalFilterPolicy* ipolicy, - const Options& src) { - Options result = src; - result.comparator = icmp; - result.filter_policy = (src.filter_policy != nullptr) ? ipolicy : nullptr; - ClipToRange(&result.max_open_files, 64 + kNumNonTableCacheFiles, 50000); - ClipToRange(&result.write_buffer_size, 64 << 10, 1 << 30); - ClipToRange(&result.max_file_size, 1 << 20, 1 << 30); - ClipToRange(&result.block_size, 1 << 10, 4 << 20); - if (result.info_log == nullptr) { - // Open a log file in the same directory as the db - src.env->CreateDir(dbname); // In case it does not exist - src.env->RenameFile(InfoLogFileName(dbname), OldInfoLogFileName(dbname)); - Status s = src.env->NewLogger(InfoLogFileName(dbname), &result.info_log); - if (!s.ok()) { - // No place suitable for logging - result.info_log = nullptr; - } - } - if (result.block_cache == nullptr) { - result.block_cache = NewLRUCache(8 << 20); - } - return result; -} - -static int TableCacheSize(const Options& sanitized_options) { - // Reserve ten files or so for other uses and give the rest to TableCache. - return sanitized_options.max_open_files - kNumNonTableCacheFiles; -} - -DBImpl::DBImpl(const Options& raw_options, const std::string& dbname) - : env_(raw_options.env), - internal_comparator_(raw_options.comparator), - internal_filter_policy_(raw_options.filter_policy), - options_(SanitizeOptions(dbname, &internal_comparator_, - &internal_filter_policy_, raw_options)), - owns_info_log_(options_.info_log != raw_options.info_log), - owns_cache_(options_.block_cache != raw_options.block_cache), - dbname_(dbname), - table_cache_(new TableCache(dbname_, options_, TableCacheSize(options_))), - db_lock_(nullptr), - shutting_down_(false), - background_work_finished_signal_(&mutex_), - mem_(nullptr), - imm_(nullptr), - has_imm_(false), - logfile_(nullptr), - logfile_number_(0), - log_(nullptr), - seed_(0), - tmp_batch_(new WriteBatch), - background_compaction_scheduled_(false), - manual_compaction_(nullptr), - versions_(new VersionSet(dbname_, &options_, table_cache_, - &internal_comparator_)) {} - -DBImpl::~DBImpl() { - // Wait for background work to finish. - mutex_.Lock(); - shutting_down_.store(true, std::memory_order_release); - while (background_compaction_scheduled_) { - background_work_finished_signal_.Wait(); - } - mutex_.Unlock(); - - if (db_lock_ != nullptr) { - env_->UnlockFile(db_lock_); - } - - delete versions_; - if (mem_ != nullptr) mem_->Unref(); - if (imm_ != nullptr) imm_->Unref(); - delete tmp_batch_; - delete log_; - delete logfile_; - delete table_cache_; - - if (owns_info_log_) { - delete options_.info_log; - } - if (owns_cache_) { - delete options_.block_cache; - } -} - -Status DBImpl::NewDB() { - VersionEdit new_db; - new_db.SetComparatorName(user_comparator()->Name()); - new_db.SetLogNumber(0); - new_db.SetNextFile(2); - new_db.SetLastSequence(0); - - const std::string manifest = DescriptorFileName(dbname_, 1); - WritableFile* file; - Status s = env_->NewWritableFile(manifest, &file); - if (!s.ok()) { - return s; - } - { - log::Writer log(file); - std::string record; - new_db.EncodeTo(&record); - s = log.AddRecord(record); - if (s.ok()) { - s = file->Close(); - } - } - delete file; - if (s.ok()) { - // Make "CURRENT" file that points to the new manifest file. - s = SetCurrentFile(env_, dbname_, 1); - } else { - env_->DeleteFile(manifest); - } - return s; -} - -void DBImpl::MaybeIgnoreError(Status* s) const { - if (s->ok() || options_.paranoid_checks) { - // No change needed - } else { - Log(options_.info_log, "Ignoring error %s", s->ToString().c_str()); - *s = Status::OK(); - } -} - -void DBImpl::DeleteObsoleteFiles() { - mutex_.AssertHeld(); - - if (!bg_error_.ok()) { - // After a background error, we don't know whether a new version may - // or may not have been committed, so we cannot safely garbage collect. - return; - } - - // Make a set of all of the live files - std::set<uint64_t> live = pending_outputs_; - versions_->AddLiveFiles(&live); - - std::vector<std::string> filenames; - env_->GetChildren(dbname_, &filenames); // Ignoring errors on purpose - uint64_t number; - FileType type; - for (size_t i = 0; i < filenames.size(); i++) { - if (ParseFileName(filenames[i], &number, &type)) { - bool keep = true; - switch (type) { - case kLogFile: - keep = ((number >= versions_->LogNumber()) || - (number == versions_->PrevLogNumber())); - break; - case kDescriptorFile: - // Keep my manifest file, and any newer incarnations' - // (in case there is a race that allows other incarnations) - keep = (number >= versions_->ManifestFileNumber()); - break; - case kTableFile: - keep = (live.find(number) != live.end()); - break; - case kTempFile: - // Any temp files that are currently being written to must - // be recorded in pending_outputs_, which is inserted into "live" - keep = (live.find(number) != live.end()); - break; - case kCurrentFile: - case kDBLockFile: - case kInfoLogFile: - keep = true; - break; - } - - if (!keep) { - if (type == kTableFile) { - table_cache_->Evict(number); - } - Log(options_.info_log, "Delete type=%d #%lld\n", static_cast<int>(type), - static_cast<unsigned long long>(number)); - env_->DeleteFile(dbname_ + "/" + filenames[i]); - } - } - } -} - -Status DBImpl::Recover(VersionEdit* edit, bool* save_manifest) { - mutex_.AssertHeld(); - - // Ignore error from CreateDir since the creation of the DB is - // committed only when the descriptor is created, and this directory - // may already exist from a previous failed creation attempt. - env_->CreateDir(dbname_); - assert(db_lock_ == nullptr); - Status s = env_->LockFile(LockFileName(dbname_), &db_lock_); - if (!s.ok()) { - return s; - } - - if (!env_->FileExists(CurrentFileName(dbname_))) { - if (options_.create_if_missing) { - s = NewDB(); - if (!s.ok()) { - return s; - } - } else { - return Status::InvalidArgument( - dbname_, "does not exist (create_if_missing is false)"); - } - } else { - if (options_.error_if_exists) { - return Status::InvalidArgument(dbname_, - "exists (error_if_exists is true)"); - } - } - - s = versions_->Recover(save_manifest); - if (!s.ok()) { - return s; - } - SequenceNumber max_sequence(0); - - // Recover from all newer log files than the ones named in the - // descriptor (new log files may have been added by the previous - // incarnation without registering them in the descriptor). - // - // Note that PrevLogNumber() is no longer used, but we pay - // attention to it in case we are recovering a database - // produced by an older version of leveldb. - const uint64_t min_log = versions_->LogNumber(); - const uint64_t prev_log = versions_->PrevLogNumber(); - std::vector<std::string> filenames; - s = env_->GetChildren(dbname_, &filenames); - if (!s.ok()) { - return s; - } - std::set<uint64_t> expected; - versions_->AddLiveFiles(&expected); - uint64_t number; - FileType type; - std::vector<uint64_t> logs; - for (size_t i = 0; i < filenames.size(); i++) { - if (ParseFileName(filenames[i], &number, &type)) { - expected.erase(number); - if (type == kLogFile && ((number >= min_log) || (number == prev_log))) - logs.push_back(number); - } - } - if (!expected.empty()) { - char buf[50]; - snprintf(buf, sizeof(buf), "%d missing files; e.g.", - static_cast<int>(expected.size())); - return Status::Corruption(buf, TableFileName(dbname_, *(expected.begin()))); - } - - // Recover in the order in which the logs were generated - std::sort(logs.begin(), logs.end()); - for (size_t i = 0; i < logs.size(); i++) { - s = RecoverLogFile(logs[i], (i == logs.size() - 1), save_manifest, edit, - &max_sequence); - if (!s.ok()) { - return s; - } - - // The previous incarnation may not have written any MANIFEST - // records after allocating this log number. So we manually - // update the file number allocation counter in VersionSet. - versions_->MarkFileNumberUsed(logs[i]); - } - - if (versions_->LastSequence() < max_sequence) { - versions_->SetLastSequence(max_sequence); - } - - return Status::OK(); -} - -Status DBImpl::RecoverLogFile(uint64_t log_number, bool last_log, - bool* save_manifest, VersionEdit* edit, - SequenceNumber* max_sequence) { - struct LogReporter : public log::Reader::Reporter { - Env* env; - Logger* info_log; - const char* fname; - Status* status; // null if options_.paranoid_checks==false - virtual void Corruption(size_t bytes, const Status& s) { - Log(info_log, "%s%s: dropping %d bytes; %s", - (this->status == nullptr ? "(ignoring error) " : ""), fname, - static_cast<int>(bytes), s.ToString().c_str()); - if (this->status != nullptr && this->status->ok()) *this->status = s; - } - }; - - mutex_.AssertHeld(); - - // Open the log file - std::string fname = LogFileName(dbname_, log_number); - SequentialFile* file; - Status status = env_->NewSequentialFile(fname, &file); - if (!status.ok()) { - MaybeIgnoreError(&status); - return status; - } - - // Create the log reader. - LogReporter reporter; - reporter.env = env_; - reporter.info_log = options_.info_log; - reporter.fname = fname.c_str(); - reporter.status = (options_.paranoid_checks ? &status : nullptr); - // We intentionally make log::Reader do checksumming even if - // paranoid_checks==false so that corruptions cause entire commits - // to be skipped instead of propagating bad information (like overly - // large sequence numbers). - log::Reader reader(file, &reporter, true /*checksum*/, 0 /*initial_offset*/); - Log(options_.info_log, "Recovering log #%llu", - (unsigned long long)log_number); - - // Read all the records and add to a memtable - std::string scratch; - Slice record; - WriteBatch batch; - int compactions = 0; - MemTable* mem = nullptr; - while (reader.ReadRecord(&record, &scratch) && status.ok()) { - if (record.size() < 12) { - reporter.Corruption(record.size(), - Status::Corruption("log record too small")); - continue; - } - WriteBatchInternal::SetContents(&batch, record); - - if (mem == nullptr) { - mem = new MemTable(internal_comparator_); - mem->Ref(); - } - status = WriteBatchInternal::InsertInto(&batch, mem); - MaybeIgnoreError(&status); - if (!status.ok()) { - break; - } - const SequenceNumber last_seq = WriteBatchInternal::Sequence(&batch) + - WriteBatchInternal::Count(&batch) - 1; - if (last_seq > *max_sequence) { - *max_sequence = last_seq; - } - - if (mem->ApproximateMemoryUsage() > options_.write_buffer_size) { - compactions++; - *save_manifest = true; - status = WriteLevel0Table(mem, edit, nullptr); - mem->Unref(); - mem = nullptr; - if (!status.ok()) { - // Reflect errors immediately so that conditions like full - // file-systems cause the DB::Open() to fail. - break; - } - } - } - - delete file; - - // See if we should keep reusing the last log file. - if (status.ok() && options_.reuse_logs && last_log && compactions == 0) { - assert(logfile_ == nullptr); - assert(log_ == nullptr); - assert(mem_ == nullptr); - uint64_t lfile_size; - if (env_->GetFileSize(fname, &lfile_size).ok() && - env_->NewAppendableFile(fname, &logfile_).ok()) { - Log(options_.info_log, "Reusing old log %s \n", fname.c_str()); - log_ = new log::Writer(logfile_, lfile_size); - logfile_number_ = log_number; - if (mem != nullptr) { - mem_ = mem; - mem = nullptr; - } else { - // mem can be nullptr if lognum exists but was empty. - mem_ = new MemTable(internal_comparator_); - mem_->Ref(); - } - } - } - - if (mem != nullptr) { - // mem did not get reused; compact it. - if (status.ok()) { - *save_manifest = true; - status = WriteLevel0Table(mem, edit, nullptr); - } - mem->Unref(); - } - - return status; -} - -Status DBImpl::WriteLevel0Table(MemTable* mem, VersionEdit* edit, - Version* base) { - mutex_.AssertHeld(); - const uint64_t start_micros = env_->NowMicros(); - FileMetaData meta; - meta.number = versions_->NewFileNumber(); - pending_outputs_.insert(meta.number); - Iterator* iter = mem->NewIterator(); - Log(options_.info_log, "Level-0 table #%llu: started", - (unsigned long long)meta.number); - - Status s; - { - mutex_.Unlock(); - s = BuildTable(dbname_, env_, options_, table_cache_, iter, &meta); - mutex_.Lock(); - } - - Log(options_.info_log, "Level-0 table #%llu: %lld bytes %s", - (unsigned long long)meta.number, (unsigned long long)meta.file_size, - s.ToString().c_str()); - delete iter; - pending_outputs_.erase(meta.number); - - // Note that if file_size is zero, the file has been deleted and - // should not be added to the manifest. - int level = 0; - if (s.ok() && meta.file_size > 0) { - const Slice min_user_key = meta.smallest.user_key(); - const Slice max_user_key = meta.largest.user_key(); - if (base != nullptr) { - level = base->PickLevelForMemTableOutput(min_user_key, max_user_key); - } - edit->AddFile(level, meta.number, meta.file_size, meta.smallest, - meta.largest); - } - - CompactionStats stats; - stats.micros = env_->NowMicros() - start_micros; - stats.bytes_written = meta.file_size; - stats_[level].Add(stats); - return s; -} - -void DBImpl::CompactMemTable() { - mutex_.AssertHeld(); - assert(imm_ != nullptr); - - // Save the contents of the memtable as a new Table - VersionEdit edit; - Version* base = versions_->current(); - base->Ref(); - Status s = WriteLevel0Table(imm_, &edit, base); - base->Unref(); - - if (s.ok() && shutting_down_.load(std::memory_order_acquire)) { - s = Status::IOError("Deleting DB during memtable compaction"); - } - - // Replace immutable memtable with the generated Table - if (s.ok()) { - edit.SetPrevLogNumber(0); - edit.SetLogNumber(logfile_number_); // Earlier logs no longer needed - s = versions_->LogAndApply(&edit, &mutex_); - } - - if (s.ok()) { - // Commit to the new state - imm_->Unref(); - imm_ = nullptr; - has_imm_.store(false, std::memory_order_release); - DeleteObsoleteFiles(); - } else { - RecordBackgroundError(s); - } -} - -void DBImpl::CompactRange(const Slice* begin, const Slice* end) { - int max_level_with_files = 1; - { - MutexLock l(&mutex_); - Version* base = versions_->current(); - for (int level = 1; level < config::kNumLevels; level++) { - if (base->OverlapInLevel(level, begin, end)) { - max_level_with_files = level; - } - } - } - TEST_CompactMemTable(); // TODO(sanjay): Skip if memtable does not overlap - for (int level = 0; level < max_level_with_files; level++) { - TEST_CompactRange(level, begin, end); - } -} - -void DBImpl::TEST_CompactRange(int level, const Slice* begin, - const Slice* end) { - assert(level >= 0); - assert(level + 1 < config::kNumLevels); - - InternalKey begin_storage, end_storage; - - ManualCompaction manual; - manual.level = level; - manual.done = false; - if (begin == nullptr) { - manual.begin = nullptr; - } else { - begin_storage = InternalKey(*begin, kMaxSequenceNumber, kValueTypeForSeek); - manual.begin = &begin_storage; - } - if (end == nullptr) { - manual.end = nullptr; - } else { - end_storage = InternalKey(*end, 0, static_cast<ValueType>(0)); - manual.end = &end_storage; - } - - MutexLock l(&mutex_); - while (!manual.done && !shutting_down_.load(std::memory_order_acquire) && - bg_error_.ok()) { - if (manual_compaction_ == nullptr) { // Idle - manual_compaction_ = &manual; - MaybeScheduleCompaction(); - } else { // Running either my compaction or another compaction. - background_work_finished_signal_.Wait(); - } - } - if (manual_compaction_ == &manual) { - // Cancel my manual compaction since we aborted early for some reason. - manual_compaction_ = nullptr; - } -} - -Status DBImpl::TEST_CompactMemTable() { - // nullptr batch means just wait for earlier writes to be done - Status s = Write(WriteOptions(), nullptr); - if (s.ok()) { - // Wait until the compaction completes - MutexLock l(&mutex_); - while (imm_ != nullptr && bg_error_.ok()) { - background_work_finished_signal_.Wait(); - } - if (imm_ != nullptr) { - s = bg_error_; - } - } - return s; -} - -void DBImpl::RecordBackgroundError(const Status& s) { - mutex_.AssertHeld(); - if (bg_error_.ok()) { - bg_error_ = s; - background_work_finished_signal_.SignalAll(); - } -} - -void DBImpl::MaybeScheduleCompaction() { - mutex_.AssertHeld(); - if (background_compaction_scheduled_) { - // Already scheduled - } else if (shutting_down_.load(std::memory_order_acquire)) { - // DB is being deleted; no more background compactions - } else if (!bg_error_.ok()) { - // Already got an error; no more changes - } else if (imm_ == nullptr && manual_compaction_ == nullptr && - !versions_->NeedsCompaction()) { - // No work to be done - } else { - background_compaction_scheduled_ = true; - env_->Schedule(&DBImpl::BGWork, this); - } -} - -void DBImpl::BGWork(void* db) { - reinterpret_cast<DBImpl*>(db)->BackgroundCall(); -} - -void DBImpl::BackgroundCall() { - MutexLock l(&mutex_); - assert(background_compaction_scheduled_); - if (shutting_down_.load(std::memory_order_acquire)) { - // No more background work when shutting down. - } else if (!bg_error_.ok()) { - // No more background work after a background error. - } else { - BackgroundCompaction(); - } - - background_compaction_scheduled_ = false; - - // Previous compaction may have produced too many files in a level, - // so reschedule another compaction if needed. - MaybeScheduleCompaction(); - background_work_finished_signal_.SignalAll(); -} - -void DBImpl::BackgroundCompaction() { - mutex_.AssertHeld(); - - if (imm_ != nullptr) { - CompactMemTable(); - return; - } - - Compaction* c; - bool is_manual = (manual_compaction_ != nullptr); - InternalKey manual_end; - if (is_manual) { - ManualCompaction* m = manual_compaction_; - c = versions_->CompactRange(m->level, m->begin, m->end); - m->done = (c == nullptr); - if (c != nullptr) { - manual_end = c->input(0, c->num_input_files(0) - 1)->largest; - } - Log(options_.info_log, - "Manual compaction at level-%d from %s .. %s; will stop at %s\n", - m->level, (m->begin ? m->begin->DebugString().c_str() : "(begin)"), - (m->end ? m->end->DebugString().c_str() : "(end)"), - (m->done ? "(end)" : manual_end.DebugString().c_str())); - } else { - c = versions_->PickCompaction(); - } - - Status status; - if (c == nullptr) { - // Nothing to do - } else if (!is_manual && c->IsTrivialMove()) { - // Move file to next level - assert(c->num_input_files(0) == 1); - FileMetaData* f = c->input(0, 0); - c->edit()->DeleteFile(c->level(), f->number); - c->edit()->AddFile(c->level() + 1, f->number, f->file_size, f->smallest, - f->largest); - status = versions_->LogAndApply(c->edit(), &mutex_); - if (!status.ok()) { - RecordBackgroundError(status); - } - VersionSet::LevelSummaryStorage tmp; - Log(options_.info_log, "Moved #%lld to level-%d %lld bytes %s: %s\n", - static_cast<unsigned long long>(f->number), c->level() + 1, - static_cast<unsigned long long>(f->file_size), - status.ToString().c_str(), versions_->LevelSummary(&tmp)); - } else { - CompactionState* compact = new CompactionState(c); - status = DoCompactionWork(compact); - if (!status.ok()) { - RecordBackgroundError(status); - } - CleanupCompaction(compact); - c->ReleaseInputs(); - DeleteObsoleteFiles(); - } - delete c; - - if (status.ok()) { - // Done - } else if (shutting_down_.load(std::memory_order_acquire)) { - // Ignore compaction errors found during shutting down - } else { - Log(options_.info_log, "Compaction error: %s", status.ToString().c_str()); - } - - if (is_manual) { - ManualCompaction* m = manual_compaction_; - if (!status.ok()) { - m->done = true; - } - if (!m->done) { - // We only compacted part of the requested range. Update *m - // to the range that is left to be compacted. - m->tmp_storage = manual_end; - m->begin = &m->tmp_storage; - } - manual_compaction_ = nullptr; - } -} - -void DBImpl::CleanupCompaction(CompactionState* compact) { - mutex_.AssertHeld(); - if (compact->builder != nullptr) { - // May happen if we get a shutdown call in the middle of compaction - compact->builder->Abandon(); - delete compact->builder; - } else { - assert(compact->outfile == nullptr); - } - delete compact->outfile; - for (size_t i = 0; i < compact->outputs.size(); i++) { - const CompactionState::Output& out = compact->outputs[i]; - pending_outputs_.erase(out.number); - } - delete compact; -} - -Status DBImpl::OpenCompactionOutputFile(CompactionState* compact) { - assert(compact != nullptr); - assert(compact->builder == nullptr); - uint64_t file_number; - { - mutex_.Lock(); - file_number = versions_->NewFileNumber(); - pending_outputs_.insert(file_number); - CompactionState::Output out; - out.number = file_number; - out.smallest.Clear(); - out.largest.Clear(); - compact->outputs.push_back(out); - mutex_.Unlock(); - } - - // Make the output file - std::string fname = TableFileName(dbname_, file_number); - Status s = env_->NewWritableFile(fname, &compact->outfile); - if (s.ok()) { - compact->builder = new TableBuilder(options_, compact->outfile); - } - return s; -} - -Status DBImpl::FinishCompactionOutputFile(CompactionState* compact, - Iterator* input) { - assert(compact != nullptr); - assert(compact->outfile != nullptr); - assert(compact->builder != nullptr); - - const uint64_t output_number = compact->current_output()->number; - assert(output_number != 0); - - // Check for iterator errors - Status s = input->status(); - const uint64_t current_entries = compact->builder->NumEntries(); - if (s.ok()) { - s = compact->builder->Finish(); - } else { - compact->builder->Abandon(); - } - const uint64_t current_bytes = compact->builder->FileSize(); - compact->current_output()->file_size = current_bytes; - compact->total_bytes += current_bytes; - delete compact->builder; - compact->builder = nullptr; - - // Finish and check for file errors - if (s.ok()) { - s = compact->outfile->Sync(); - } - if (s.ok()) { - s = compact->outfile->Close(); - } - delete compact->outfile; - compact->outfile = nullptr; - - if (s.ok() && current_entries > 0) { - // Verify that the table is usable - Iterator* iter = - table_cache_->NewIterator(ReadOptions(), output_number, current_bytes); - s = iter->status(); - delete iter; - if (s.ok()) { - Log(options_.info_log, "Generated table #%llu@%d: %lld keys, %lld bytes", - (unsigned long long)output_number, compact->compaction->level(), - (unsigned long long)current_entries, - (unsigned long long)current_bytes); - } - } - return s; -} - -Status DBImpl::InstallCompactionResults(CompactionState* compact) { - mutex_.AssertHeld(); - Log(options_.info_log, "Compacted %d@%d + %d@%d files => %lld bytes", - compact->compaction->num_input_files(0), compact->compaction->level(), - compact->compaction->num_input_files(1), compact->compaction->level() + 1, - static_cast<long long>(compact->total_bytes)); - - // Add compaction outputs - compact->compaction->AddInputDeletions(compact->compaction->edit()); - const int level = compact->compaction->level(); - for (size_t i = 0; i < compact->outputs.size(); i++) { - const CompactionState::Output& out = compact->outputs[i]; - compact->compaction->edit()->AddFile(level + 1, out.number, out.file_size, - out.smallest, out.largest); - } - return versions_->LogAndApply(compact->compaction->edit(), &mutex_); -} - -Status DBImpl::DoCompactionWork(CompactionState* compact) { - const uint64_t start_micros = env_->NowMicros(); - int64_t imm_micros = 0; // Micros spent doing imm_ compactions - - Log(options_.info_log, "Compacting %d@%d + %d@%d files", - compact->compaction->num_input_files(0), compact->compaction->level(), - compact->compaction->num_input_files(1), - compact->compaction->level() + 1); - - assert(versions_->NumLevelFiles(compact->compaction->level()) > 0); - assert(compact->builder == nullptr); - assert(compact->outfile == nullptr); - if (snapshots_.empty()) { - compact->smallest_snapshot = versions_->LastSequence(); - } else { - compact->smallest_snapshot = snapshots_.oldest()->sequence_number(); - } - - // Release mutex while we're actually doing the compaction work - mutex_.Unlock(); - - Iterator* input = versions_->MakeInputIterator(compact->compaction); - input->SeekToFirst(); - Status status; - ParsedInternalKey ikey; - std::string current_user_key; - bool has_current_user_key = false; - SequenceNumber last_sequence_for_key = kMaxSequenceNumber; - for (; input->Valid() && !shutting_down_.load(std::memory_order_acquire);) { - // Prioritize immutable compaction work - if (has_imm_.load(std::memory_order_relaxed)) { - const uint64_t imm_start = env_->NowMicros(); - mutex_.Lock(); - if (imm_ != nullptr) { - CompactMemTable(); - // Wake up MakeRoomForWrite() if necessary. - background_work_finished_signal_.SignalAll(); - } - mutex_.Unlock(); - imm_micros += (env_->NowMicros() - imm_start); - } - - Slice key = input->key(); - if (compact->compaction->ShouldStopBefore(key) && - compact->builder != nullptr) { - status = FinishCompactionOutputFile(compact, input); - if (!status.ok()) { - break; - } - } - - // Handle key/value, add to state, etc. - bool drop = false; - if (!ParseInternalKey(key, &ikey)) { - // Do not hide error keys - current_user_key.clear(); - has_current_user_key = false; - last_sequence_for_key = kMaxSequenceNumber; - } else { - if (!has_current_user_key || - user_comparator()->Compare(ikey.user_key, Slice(current_user_key)) != - 0) { - // First occurrence of this user key - current_user_key.assign(ikey.user_key.data(), ikey.user_key.size()); - has_current_user_key = true; - last_sequence_for_key = kMaxSequenceNumber; - } - - if (last_sequence_for_key <= compact->smallest_snapshot) { - // Hidden by an newer entry for same user key - drop = true; // (A) - } else if (ikey.type == kTypeDeletion && - ikey.sequence <= compact->smallest_snapshot && - compact->compaction->IsBaseLevelForKey(ikey.user_key)) { - // For this user key: - // (1) there is no data in higher levels - // (2) data in lower levels will have larger sequence numbers - // (3) data in layers that are being compacted here and have - // smaller sequence numbers will be dropped in the next - // few iterations of this loop (by rule (A) above). - // Therefore this deletion marker is obsolete and can be dropped. - drop = true; - } - - last_sequence_for_key = ikey.sequence; - } -#if 0 - Log(options_.info_log, - " Compact: %s, seq %d, type: %d %d, drop: %d, is_base: %d, " - "%d smallest_snapshot: %d", - ikey.user_key.ToString().c_str(), - (int)ikey.sequence, ikey.type, kTypeValue, drop, - compact->compaction->IsBaseLevelForKey(ikey.user_key), - (int)last_sequence_for_key, (int)compact->smallest_snapshot); -#endif - - if (!drop) { - // Open output file if necessary - if (compact->builder == nullptr) { - status = OpenCompactionOutputFile(compact); - if (!status.ok()) { - break; - } - } - if (compact->builder->NumEntries() == 0) { - compact->current_output()->smallest.DecodeFrom(key); - } - compact->current_output()->largest.DecodeFrom(key); - compact->builder->Add(key, input->value()); - - // Close output file if it is big enough - if (compact->builder->FileSize() >= - compact->compaction->MaxOutputFileSize()) { - status = FinishCompactionOutputFile(compact, input); - if (!status.ok()) { - break; - } - } - } - - input->Next(); - } - - if (status.ok() && shutting_down_.load(std::memory_order_acquire)) { - status = Status::IOError("Deleting DB during compaction"); - } - if (status.ok() && compact->builder != nullptr) { - status = FinishCompactionOutputFile(compact, input); - } - if (status.ok()) { - status = input->status(); - } - delete input; - input = nullptr; - - CompactionStats stats; - stats.micros = env_->NowMicros() - start_micros - imm_micros; - for (int which = 0; which < 2; which++) { - for (int i = 0; i < compact->compaction->num_input_files(which); i++) { - stats.bytes_read += compact->compaction->input(which, i)->file_size; - } - } - for (size_t i = 0; i < compact->outputs.size(); i++) { - stats.bytes_written += compact->outputs[i].file_size; - } - - mutex_.Lock(); - stats_[compact->compaction->level() + 1].Add(stats); - - if (status.ok()) { - status = InstallCompactionResults(compact); - } - if (!status.ok()) { - RecordBackgroundError(status); - } - VersionSet::LevelSummaryStorage tmp; - Log(options_.info_log, "compacted to: %s", versions_->LevelSummary(&tmp)); - return status; -} - -namespace { - -struct IterState { - port::Mutex* const mu; - Version* const version GUARDED_BY(mu); - MemTable* const mem GUARDED_BY(mu); - MemTable* const imm GUARDED_BY(mu); - - IterState(port::Mutex* mutex, MemTable* mem, MemTable* imm, Version* version) - : mu(mutex), version(version), mem(mem), imm(imm) {} -}; - -static void CleanupIteratorState(void* arg1, void* arg2) { - IterState* state = reinterpret_cast<IterState*>(arg1); - state->mu->Lock(); - state->mem->Unref(); - if (state->imm != nullptr) state->imm->Unref(); - state->version->Unref(); - state->mu->Unlock(); - delete state; -} - -} // anonymous namespace - -Iterator* DBImpl::NewInternalIterator(const ReadOptions& options, - SequenceNumber* latest_snapshot, - uint32_t* seed) { - mutex_.Lock(); - *latest_snapshot = versions_->LastSequence(); - - // Collect together all needed child iterators - std::vector<Iterator*> list; - list.push_back(mem_->NewIterator()); - mem_->Ref(); - if (imm_ != nullptr) { - list.push_back(imm_->NewIterator()); - imm_->Ref(); - } - versions_->current()->AddIterators(options, &list); - Iterator* internal_iter = - NewMergingIterator(&internal_comparator_, &list[0], list.size()); - versions_->current()->Ref(); - - IterState* cleanup = new IterState(&mutex_, mem_, imm_, versions_->current()); - internal_iter->RegisterCleanup(CleanupIteratorState, cleanup, nullptr); - - *seed = ++seed_; - mutex_.Unlock(); - return internal_iter; -} - -Iterator* DBImpl::TEST_NewInternalIterator() { - SequenceNumber ignored; - uint32_t ignored_seed; - return NewInternalIterator(ReadOptions(), &ignored, &ignored_seed); -} - -int64_t DBImpl::TEST_MaxNextLevelOverlappingBytes() { - MutexLock l(&mutex_); - return versions_->MaxNextLevelOverlappingBytes(); -} - -Status DBImpl::Get(const ReadOptions& options, const Slice& key, - std::string* value) { - Status s; - MutexLock l(&mutex_); - SequenceNumber snapshot; - if (options.snapshot != nullptr) { - snapshot = - static_cast<const SnapshotImpl*>(options.snapshot)->sequence_number(); - } else { - snapshot = versions_->LastSequence(); - } - - MemTable* mem = mem_; - MemTable* imm = imm_; - Version* current = versions_->current(); - mem->Ref(); - if (imm != nullptr) imm->Ref(); - current->Ref(); - - bool have_stat_update = false; - Version::GetStats stats; - - // Unlock while reading from files and memtables - { - mutex_.Unlock(); - // First look in the memtable, then in the immutable memtable (if any). - LookupKey lkey(key, snapshot); - if (mem->Get(lkey, value, &s)) { - // Done - } else if (imm != nullptr && imm->Get(lkey, value, &s)) { - // Done - } else { - s = current->Get(options, lkey, value, &stats); - have_stat_update = true; - } - mutex_.Lock(); - } - - if (have_stat_update && current->UpdateStats(stats)) { - MaybeScheduleCompaction(); - } - mem->Unref(); - if (imm != nullptr) imm->Unref(); - current->Unref(); - return s; -} - -Iterator* DBImpl::NewIterator(const ReadOptions& options) { - SequenceNumber latest_snapshot; - uint32_t seed; - Iterator* iter = NewInternalIterator(options, &latest_snapshot, &seed); - return NewDBIterator(this, user_comparator(), iter, - (options.snapshot != nullptr - ? static_cast<const SnapshotImpl*>(options.snapshot) - ->sequence_number() - : latest_snapshot), - seed); -} - -void DBImpl::RecordReadSample(Slice key) { - MutexLock l(&mutex_); - if (versions_->current()->RecordReadSample(key)) { - MaybeScheduleCompaction(); - } -} - -const Snapshot* DBImpl::GetSnapshot() { - MutexLock l(&mutex_); - return snapshots_.New(versions_->LastSequence()); -} - -void DBImpl::ReleaseSnapshot(const Snapshot* snapshot) { - MutexLock l(&mutex_); - snapshots_.Delete(static_cast<const SnapshotImpl*>(snapshot)); -} - -// Convenience methods -Status DBImpl::Put(const WriteOptions& o, const Slice& key, const Slice& val) { - return DB::Put(o, key, val); -} - -Status DBImpl::Delete(const WriteOptions& options, const Slice& key) { - return DB::Delete(options, key); -} - -Status DBImpl::Write(const WriteOptions& options, WriteBatch* updates) { - Writer w(&mutex_); - w.batch = updates; - w.sync = options.sync; - w.done = false; - - MutexLock l(&mutex_); - writers_.push_back(&w); - while (!w.done && &w != writers_.front()) { - w.cv.Wait(); - } - if (w.done) { - return w.status; - } - - // May temporarily unlock and wait. - Status status = MakeRoomForWrite(updates == nullptr); - uint64_t last_sequence = versions_->LastSequence(); - Writer* last_writer = &w; - if (status.ok() && updates != nullptr) { // nullptr batch is for compactions - WriteBatch* updates = BuildBatchGroup(&last_writer); - WriteBatchInternal::SetSequence(updates, last_sequence + 1); - last_sequence += WriteBatchInternal::Count(updates); - - // Add to log and apply to memtable. We can release the lock - // during this phase since &w is currently responsible for logging - // and protects against concurrent loggers and concurrent writes - // into mem_. - { - mutex_.Unlock(); - status = log_->AddRecord(WriteBatchInternal::Contents(updates)); - bool sync_error = false; - if (status.ok() && options.sync) { - status = logfile_->Sync(); - if (!status.ok()) { - sync_error = true; - } - } - if (status.ok()) { - status = WriteBatchInternal::InsertInto(updates, mem_); - } - mutex_.Lock(); - if (sync_error) { - // The state of the log file is indeterminate: the log record we - // just added may or may not show up when the DB is re-opened. - // So we force the DB into a mode where all future writes fail. - RecordBackgroundError(status); - } - } - if (updates == tmp_batch_) tmp_batch_->Clear(); - - versions_->SetLastSequence(last_sequence); - } - - while (true) { - Writer* ready = writers_.front(); - writers_.pop_front(); - if (ready != &w) { - ready->status = status; - ready->done = true; - ready->cv.Signal(); - } - if (ready == last_writer) break; - } - - // Notify new head of write queue - if (!writers_.empty()) { - writers_.front()->cv.Signal(); - } - - return status; -} - -// REQUIRES: Writer list must be non-empty -// REQUIRES: First writer must have a non-null batch -WriteBatch* DBImpl::BuildBatchGroup(Writer** last_writer) { - mutex_.AssertHeld(); - assert(!writers_.empty()); - Writer* first = writers_.front(); - WriteBatch* result = first->batch; - assert(result != nullptr); - - size_t size = WriteBatchInternal::ByteSize(first->batch); - - // Allow the group to grow up to a maximum size, but if the - // original write is small, limit the growth so we do not slow - // down the small write too much. - size_t max_size = 1 << 20; - if (size <= (128 << 10)) { - max_size = size + (128 << 10); - } - - *last_writer = first; - std::deque<Writer*>::iterator iter = writers_.begin(); - ++iter; // Advance past "first" - for (; iter != writers_.end(); ++iter) { - Writer* w = *iter; - if (w->sync && !first->sync) { - // Do not include a sync write into a batch handled by a non-sync write. - break; - } - - if (w->batch != nullptr) { - size += WriteBatchInternal::ByteSize(w->batch); - if (size > max_size) { - // Do not make batch too big - break; - } - - // Append to *result - if (result == first->batch) { - // Switch to temporary batch instead of disturbing caller's batch - result = tmp_batch_; - assert(WriteBatchInternal::Count(result) == 0); - WriteBatchInternal::Append(result, first->batch); - } - WriteBatchInternal::Append(result, w->batch); - } - *last_writer = w; - } - return result; -} - -// REQUIRES: mutex_ is held -// REQUIRES: this thread is currently at the front of the writer queue -Status DBImpl::MakeRoomForWrite(bool force) { - mutex_.AssertHeld(); - assert(!writers_.empty()); - bool allow_delay = !force; - Status s; - while (true) { - if (!bg_error_.ok()) { - // Yield previous error - s = bg_error_; - break; - } else if (allow_delay && versions_->NumLevelFiles(0) >= - config::kL0_SlowdownWritesTrigger) { - // We are getting close to hitting a hard limit on the number of - // L0 files. Rather than delaying a single write by several - // seconds when we hit the hard limit, start delaying each - // individual write by 1ms to reduce latency variance. Also, - // this delay hands over some CPU to the compaction thread in - // case it is sharing the same core as the writer. - mutex_.Unlock(); - env_->SleepForMicroseconds(1000); - allow_delay = false; // Do not delay a single write more than once - mutex_.Lock(); - } else if (!force && - (mem_->ApproximateMemoryUsage() <= options_.write_buffer_size)) { - // There is room in current memtable - break; - } else if (imm_ != nullptr) { - // We have filled up the current memtable, but the previous - // one is still being compacted, so we wait. - Log(options_.info_log, "Current memtable full; waiting...\n"); - background_work_finished_signal_.Wait(); - } else if (versions_->NumLevelFiles(0) >= config::kL0_StopWritesTrigger) { - // There are too many level-0 files. - Log(options_.info_log, "Too many L0 files; waiting...\n"); - background_work_finished_signal_.Wait(); - } else { - // Attempt to switch to a new memtable and trigger compaction of old - assert(versions_->PrevLogNumber() == 0); - uint64_t new_log_number = versions_->NewFileNumber(); - WritableFile* lfile = nullptr; - s = env_->NewWritableFile(LogFileName(dbname_, new_log_number), &lfile); - if (!s.ok()) { - // Avoid chewing through file number space in a tight loop. - versions_->ReuseFileNumber(new_log_number); - break; - } - delete log_; - delete logfile_; - logfile_ = lfile; - logfile_number_ = new_log_number; - log_ = new log::Writer(lfile); - imm_ = mem_; - has_imm_.store(true, std::memory_order_release); - mem_ = new MemTable(internal_comparator_); - mem_->Ref(); - force = false; // Do not force another compaction if have room - MaybeScheduleCompaction(); - } - } - return s; -} - -bool DBImpl::GetProperty(const Slice& property, std::string* value) { - value->clear(); - - MutexLock l(&mutex_); - Slice in = property; - Slice prefix("leveldb."); - if (!in.starts_with(prefix)) return false; - in.remove_prefix(prefix.size()); - - if (in.starts_with("num-files-at-level")) { - in.remove_prefix(strlen("num-files-at-level")); - uint64_t level; - bool ok = ConsumeDecimalNumber(&in, &level) && in.empty(); - if (!ok || level >= config::kNumLevels) { - return false; - } else { - char buf[100]; - snprintf(buf, sizeof(buf), "%d", - versions_->NumLevelFiles(static_cast<int>(level))); - *value = buf; - return true; - } - } else if (in == "stats") { - char buf[200]; - snprintf(buf, sizeof(buf), - " Compactions\n" - "Level Files Size(MB) Time(sec) Read(MB) Write(MB)\n" - "--------------------------------------------------\n"); - value->append(buf); - for (int level = 0; level < config::kNumLevels; level++) { - int files = versions_->NumLevelFiles(level); - if (stats_[level].micros > 0 || files > 0) { - snprintf(buf, sizeof(buf), "%3d %8d %8.0f %9.0f %8.0f %9.0f\n", level, - files, versions_->NumLevelBytes(level) / 1048576.0, - stats_[level].micros / 1e6, - stats_[level].bytes_read / 1048576.0, - stats_[level].bytes_written / 1048576.0); - value->append(buf); - } - } - return true; - } else if (in == "sstables") { - *value = versions_->current()->DebugString(); - return true; - } else if (in == "approximate-memory-usage") { - size_t total_usage = options_.block_cache->TotalCharge(); - if (mem_) { - total_usage += mem_->ApproximateMemoryUsage(); - } - if (imm_) { - total_usage += imm_->ApproximateMemoryUsage(); - } - char buf[50]; - snprintf(buf, sizeof(buf), "%llu", - static_cast<unsigned long long>(total_usage)); - value->append(buf); - return true; - } - - return false; -} - -void DBImpl::GetApproximateSizes(const Range* range, int n, uint64_t* sizes) { - // TODO(opt): better implementation - Version* v; - { - MutexLock l(&mutex_); - versions_->current()->Ref(); - v = versions_->current(); - } - - for (int i = 0; i < n; i++) { - // Convert user_key into a corresponding internal key. - InternalKey k1(range[i].start, kMaxSequenceNumber, kValueTypeForSeek); - InternalKey k2(range[i].limit, kMaxSequenceNumber, kValueTypeForSeek); - uint64_t start = versions_->ApproximateOffsetOf(v, k1); - uint64_t limit = versions_->ApproximateOffsetOf(v, k2); - sizes[i] = (limit >= start ? limit - start : 0); - } - - { - MutexLock l(&mutex_); - v->Unref(); - } -} - -// Default implementations of convenience methods that subclasses of DB -// can call if they wish -Status DB::Put(const WriteOptions& opt, const Slice& key, const Slice& value) { - WriteBatch batch; - batch.Put(key, value); - return Write(opt, &batch); -} - -Status DB::Delete(const WriteOptions& opt, const Slice& key) { - WriteBatch batch; - batch.Delete(key); - return Write(opt, &batch); -} - -DB::~DB() {} - -Status DB::Open(const Options& options, const std::string& dbname, DB** dbptr) { - *dbptr = nullptr; - - DBImpl* impl = new DBImpl(options, dbname); - impl->mutex_.Lock(); - VersionEdit edit; - // Recover handles create_if_missing, error_if_exists - bool save_manifest = false; - Status s = impl->Recover(&edit, &save_manifest); - if (s.ok() && impl->mem_ == nullptr) { - // Create new log and a corresponding memtable. - uint64_t new_log_number = impl->versions_->NewFileNumber(); - WritableFile* lfile; - s = options.env->NewWritableFile(LogFileName(dbname, new_log_number), - &lfile); - if (s.ok()) { - edit.SetLogNumber(new_log_number); - impl->logfile_ = lfile; - impl->logfile_number_ = new_log_number; - impl->log_ = new log::Writer(lfile); - impl->mem_ = new MemTable(impl->internal_comparator_); - impl->mem_->Ref(); - } - } - if (s.ok() && save_manifest) { - edit.SetPrevLogNumber(0); // No older logs needed after recovery. - edit.SetLogNumber(impl->logfile_number_); - s = impl->versions_->LogAndApply(&edit, &impl->mutex_); - } - if (s.ok()) { - impl->DeleteObsoleteFiles(); - impl->MaybeScheduleCompaction(); - } - impl->mutex_.Unlock(); - if (s.ok()) { - assert(impl->mem_ != nullptr); - *dbptr = impl; - } else { - delete impl; - } - return s; -} - -Snapshot::~Snapshot() {} - -Status DestroyDB(const std::string& dbname, const Options& options) { - Env* env = options.env; - std::vector<std::string> filenames; - Status result = env->GetChildren(dbname, &filenames); - if (!result.ok()) { - // Ignore error in case directory does not exist - return Status::OK(); - } - - FileLock* lock; - const std::string lockname = LockFileName(dbname); - result = env->LockFile(lockname, &lock); - if (result.ok()) { - uint64_t number; - FileType type; - for (size_t i = 0; i < filenames.size(); i++) { - if (ParseFileName(filenames[i], &number, &type) && - type != kDBLockFile) { // Lock file will be deleted at end - Status del = env->DeleteFile(dbname + "/" + filenames[i]); - if (result.ok() && !del.ok()) { - result = del; - } - } - } - env->UnlockFile(lock); // Ignore error since state is already gone - env->DeleteFile(lockname); - env->DeleteDir(dbname); // Ignore error in case dir contains other files - } - return result; -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/db/db_impl.h b/assign5/openTok/Pods/leveldb-library/db/db_impl.h deleted file mode 100644 index ae87d6e..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/db_impl.h +++ /dev/null @@ -1,216 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_DB_IMPL_H_ -#define STORAGE_LEVELDB_DB_DB_IMPL_H_ - -#include <atomic> -#include <deque> -#include <set> -#include <string> - -#include "db/dbformat.h" -#include "db/log_writer.h" -#include "db/snapshot.h" -#include "leveldb/db.h" -#include "leveldb/env.h" -#include "port/port.h" -#include "port/thread_annotations.h" - -namespace leveldb { - -class MemTable; -class TableCache; -class Version; -class VersionEdit; -class VersionSet; - -class DBImpl : public DB { - public: - DBImpl(const Options& options, const std::string& dbname); - - DBImpl(const DBImpl&) = delete; - DBImpl& operator=(const DBImpl&) = delete; - - virtual ~DBImpl(); - - // Implementations of the DB interface - virtual Status Put(const WriteOptions&, const Slice& key, const Slice& value); - virtual Status Delete(const WriteOptions&, const Slice& key); - virtual Status Write(const WriteOptions& options, WriteBatch* updates); - virtual Status Get(const ReadOptions& options, const Slice& key, - std::string* value); - virtual Iterator* NewIterator(const ReadOptions&); - virtual const Snapshot* GetSnapshot(); - virtual void ReleaseSnapshot(const Snapshot* snapshot); - virtual bool GetProperty(const Slice& property, std::string* value); - virtual void GetApproximateSizes(const Range* range, int n, uint64_t* sizes); - virtual void CompactRange(const Slice* begin, const Slice* end); - - // Extra methods (for testing) that are not in the public DB interface - - // Compact any files in the named level that overlap [*begin,*end] - void TEST_CompactRange(int level, const Slice* begin, const Slice* end); - - // Force current memtable contents to be compacted. - Status TEST_CompactMemTable(); - - // Return an internal iterator over the current state of the database. - // The keys of this iterator are internal keys (see format.h). - // The returned iterator should be deleted when no longer needed. - Iterator* TEST_NewInternalIterator(); - - // Return the maximum overlapping data (in bytes) at next level for any - // file at a level >= 1. - int64_t TEST_MaxNextLevelOverlappingBytes(); - - // Record a sample of bytes read at the specified internal key. - // Samples are taken approximately once every config::kReadBytesPeriod - // bytes. - void RecordReadSample(Slice key); - - private: - friend class DB; - struct CompactionState; - struct Writer; - - // Information for a manual compaction - struct ManualCompaction { - int level; - bool done; - const InternalKey* begin; // null means beginning of key range - const InternalKey* end; // null means end of key range - InternalKey tmp_storage; // Used to keep track of compaction progress - }; - - // Per level compaction stats. stats_[level] stores the stats for - // compactions that produced data for the specified "level". - struct CompactionStats { - CompactionStats() : micros(0), bytes_read(0), bytes_written(0) {} - - void Add(const CompactionStats& c) { - this->micros += c.micros; - this->bytes_read += c.bytes_read; - this->bytes_written += c.bytes_written; - } - - int64_t micros; - int64_t bytes_read; - int64_t bytes_written; - }; - - Iterator* NewInternalIterator(const ReadOptions&, - SequenceNumber* latest_snapshot, - uint32_t* seed); - - Status NewDB(); - - // Recover the descriptor from persistent storage. May do a significant - // amount of work to recover recently logged updates. Any changes to - // be made to the descriptor are added to *edit. - Status Recover(VersionEdit* edit, bool* save_manifest) - EXCLUSIVE_LOCKS_REQUIRED(mutex_); - - void MaybeIgnoreError(Status* s) const; - - // Delete any unneeded files and stale in-memory entries. - void DeleteObsoleteFiles() EXCLUSIVE_LOCKS_REQUIRED(mutex_); - - // Compact the in-memory write buffer to disk. Switches to a new - // log-file/memtable and writes a new descriptor iff successful. - // Errors are recorded in bg_error_. - void CompactMemTable() EXCLUSIVE_LOCKS_REQUIRED(mutex_); - - Status RecoverLogFile(uint64_t log_number, bool last_log, bool* save_manifest, - VersionEdit* edit, SequenceNumber* max_sequence) - EXCLUSIVE_LOCKS_REQUIRED(mutex_); - - Status WriteLevel0Table(MemTable* mem, VersionEdit* edit, Version* base) - EXCLUSIVE_LOCKS_REQUIRED(mutex_); - - Status MakeRoomForWrite(bool force /* compact even if there is room? */) - EXCLUSIVE_LOCKS_REQUIRED(mutex_); - WriteBatch* BuildBatchGroup(Writer** last_writer) - EXCLUSIVE_LOCKS_REQUIRED(mutex_); - - void RecordBackgroundError(const Status& s); - - void MaybeScheduleCompaction() EXCLUSIVE_LOCKS_REQUIRED(mutex_); - static void BGWork(void* db); - void BackgroundCall(); - void BackgroundCompaction() EXCLUSIVE_LOCKS_REQUIRED(mutex_); - void CleanupCompaction(CompactionState* compact) - EXCLUSIVE_LOCKS_REQUIRED(mutex_); - Status DoCompactionWork(CompactionState* compact) - EXCLUSIVE_LOCKS_REQUIRED(mutex_); - - Status OpenCompactionOutputFile(CompactionState* compact); - Status FinishCompactionOutputFile(CompactionState* compact, Iterator* input); - Status InstallCompactionResults(CompactionState* compact) - EXCLUSIVE_LOCKS_REQUIRED(mutex_); - - const Comparator* user_comparator() const { - return internal_comparator_.user_comparator(); - } - - // Constant after construction - Env* const env_; - const InternalKeyComparator internal_comparator_; - const InternalFilterPolicy internal_filter_policy_; - const Options options_; // options_.comparator == &internal_comparator_ - const bool owns_info_log_; - const bool owns_cache_; - const std::string dbname_; - - // table_cache_ provides its own synchronization - TableCache* const table_cache_; - - // Lock over the persistent DB state. Non-null iff successfully acquired. - FileLock* db_lock_; - - // State below is protected by mutex_ - port::Mutex mutex_; - std::atomic<bool> shutting_down_; - port::CondVar background_work_finished_signal_ GUARDED_BY(mutex_); - MemTable* mem_; - MemTable* imm_ GUARDED_BY(mutex_); // Memtable being compacted - std::atomic<bool> has_imm_; // So bg thread can detect non-null imm_ - WritableFile* logfile_; - uint64_t logfile_number_ GUARDED_BY(mutex_); - log::Writer* log_; - uint32_t seed_ GUARDED_BY(mutex_); // For sampling. - - // Queue of writers. - std::deque<Writer*> writers_ GUARDED_BY(mutex_); - WriteBatch* tmp_batch_ GUARDED_BY(mutex_); - - SnapshotList snapshots_ GUARDED_BY(mutex_); - - // Set of table files to protect from deletion because they are - // part of ongoing compactions. - std::set<uint64_t> pending_outputs_ GUARDED_BY(mutex_); - - // Has a background compaction been scheduled or is running? - bool background_compaction_scheduled_ GUARDED_BY(mutex_); - - ManualCompaction* manual_compaction_ GUARDED_BY(mutex_); - - VersionSet* const versions_; - - // Have we encountered a background error in paranoid mode? - Status bg_error_ GUARDED_BY(mutex_); - - CompactionStats stats_[config::kNumLevels] GUARDED_BY(mutex_); -}; - -// Sanitize db options. The caller should delete result.info_log if -// it is not equal to src.info_log. -Options SanitizeOptions(const std::string& db, - const InternalKeyComparator* icmp, - const InternalFilterPolicy* ipolicy, - const Options& src); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_DB_IMPL_H_ diff --git a/assign5/openTok/Pods/leveldb-library/db/db_iter.cc b/assign5/openTok/Pods/leveldb-library/db/db_iter.cc deleted file mode 100644 index 8ff288e..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/db_iter.cc +++ /dev/null @@ -1,309 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/db_iter.h" - -#include "db/db_impl.h" -#include "db/dbformat.h" -#include "db/filename.h" -#include "leveldb/env.h" -#include "leveldb/iterator.h" -#include "port/port.h" -#include "util/logging.h" -#include "util/mutexlock.h" -#include "util/random.h" - -namespace leveldb { - -#if 0 -static void DumpInternalIter(Iterator* iter) { - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - ParsedInternalKey k; - if (!ParseInternalKey(iter->key(), &k)) { - fprintf(stderr, "Corrupt '%s'\n", EscapeString(iter->key()).c_str()); - } else { - fprintf(stderr, "@ '%s'\n", k.DebugString().c_str()); - } - } -} -#endif - -namespace { - -// Memtables and sstables that make the DB representation contain -// (userkey,seq,type) => uservalue entries. DBIter -// combines multiple entries for the same userkey found in the DB -// representation into a single entry while accounting for sequence -// numbers, deletion markers, overwrites, etc. -class DBIter : public Iterator { - public: - // Which direction is the iterator currently moving? - // (1) When moving forward, the internal iterator is positioned at - // the exact entry that yields this->key(), this->value() - // (2) When moving backwards, the internal iterator is positioned - // just before all entries whose user key == this->key(). - enum Direction { kForward, kReverse }; - - DBIter(DBImpl* db, const Comparator* cmp, Iterator* iter, SequenceNumber s, - uint32_t seed) - : db_(db), - user_comparator_(cmp), - iter_(iter), - sequence_(s), - direction_(kForward), - valid_(false), - rnd_(seed), - bytes_until_read_sampling_(RandomCompactionPeriod()) {} - - DBIter(const DBIter&) = delete; - DBIter& operator=(const DBIter&) = delete; - - virtual ~DBIter() { delete iter_; } - virtual bool Valid() const { return valid_; } - virtual Slice key() const { - assert(valid_); - return (direction_ == kForward) ? ExtractUserKey(iter_->key()) : saved_key_; - } - virtual Slice value() const { - assert(valid_); - return (direction_ == kForward) ? iter_->value() : saved_value_; - } - virtual Status status() const { - if (status_.ok()) { - return iter_->status(); - } else { - return status_; - } - } - - virtual void Next(); - virtual void Prev(); - virtual void Seek(const Slice& target); - virtual void SeekToFirst(); - virtual void SeekToLast(); - - private: - void FindNextUserEntry(bool skipping, std::string* skip); - void FindPrevUserEntry(); - bool ParseKey(ParsedInternalKey* key); - - inline void SaveKey(const Slice& k, std::string* dst) { - dst->assign(k.data(), k.size()); - } - - inline void ClearSavedValue() { - if (saved_value_.capacity() > 1048576) { - std::string empty; - swap(empty, saved_value_); - } else { - saved_value_.clear(); - } - } - - // Picks the number of bytes that can be read until a compaction is scheduled. - size_t RandomCompactionPeriod() { - return rnd_.Uniform(2 * config::kReadBytesPeriod); - } - - DBImpl* db_; - const Comparator* const user_comparator_; - Iterator* const iter_; - SequenceNumber const sequence_; - Status status_; - std::string saved_key_; // == current key when direction_==kReverse - std::string saved_value_; // == current raw value when direction_==kReverse - Direction direction_; - bool valid_; - Random rnd_; - size_t bytes_until_read_sampling_; -}; - -inline bool DBIter::ParseKey(ParsedInternalKey* ikey) { - Slice k = iter_->key(); - - size_t bytes_read = k.size() + iter_->value().size(); - while (bytes_until_read_sampling_ < bytes_read) { - bytes_until_read_sampling_ += RandomCompactionPeriod(); - db_->RecordReadSample(k); - } - assert(bytes_until_read_sampling_ >= bytes_read); - bytes_until_read_sampling_ -= bytes_read; - - if (!ParseInternalKey(k, ikey)) { - status_ = Status::Corruption("corrupted internal key in DBIter"); - return false; - } else { - return true; - } -} - -void DBIter::Next() { - assert(valid_); - - if (direction_ == kReverse) { // Switch directions? - direction_ = kForward; - // iter_ is pointing just before the entries for this->key(), - // so advance into the range of entries for this->key() and then - // use the normal skipping code below. - if (!iter_->Valid()) { - iter_->SeekToFirst(); - } else { - iter_->Next(); - } - if (!iter_->Valid()) { - valid_ = false; - saved_key_.clear(); - return; - } - // saved_key_ already contains the key to skip past. - } else { - // Store in saved_key_ the current key so we skip it below. - SaveKey(ExtractUserKey(iter_->key()), &saved_key_); - } - - FindNextUserEntry(true, &saved_key_); -} - -void DBIter::FindNextUserEntry(bool skipping, std::string* skip) { - // Loop until we hit an acceptable entry to yield - assert(iter_->Valid()); - assert(direction_ == kForward); - do { - ParsedInternalKey ikey; - if (ParseKey(&ikey) && ikey.sequence <= sequence_) { - switch (ikey.type) { - case kTypeDeletion: - // Arrange to skip all upcoming entries for this key since - // they are hidden by this deletion. - SaveKey(ikey.user_key, skip); - skipping = true; - break; - case kTypeValue: - if (skipping && - user_comparator_->Compare(ikey.user_key, *skip) <= 0) { - // Entry hidden - } else { - valid_ = true; - saved_key_.clear(); - return; - } - break; - } - } - iter_->Next(); - } while (iter_->Valid()); - saved_key_.clear(); - valid_ = false; -} - -void DBIter::Prev() { - assert(valid_); - - if (direction_ == kForward) { // Switch directions? - // iter_ is pointing at the current entry. Scan backwards until - // the key changes so we can use the normal reverse scanning code. - assert(iter_->Valid()); // Otherwise valid_ would have been false - SaveKey(ExtractUserKey(iter_->key()), &saved_key_); - while (true) { - iter_->Prev(); - if (!iter_->Valid()) { - valid_ = false; - saved_key_.clear(); - ClearSavedValue(); - return; - } - if (user_comparator_->Compare(ExtractUserKey(iter_->key()), saved_key_) < - 0) { - break; - } - } - direction_ = kReverse; - } - - FindPrevUserEntry(); -} - -void DBIter::FindPrevUserEntry() { - assert(direction_ == kReverse); - - ValueType value_type = kTypeDeletion; - if (iter_->Valid()) { - do { - ParsedInternalKey ikey; - if (ParseKey(&ikey) && ikey.sequence <= sequence_) { - if ((value_type != kTypeDeletion) && - user_comparator_->Compare(ikey.user_key, saved_key_) < 0) { - // We encountered a non-deleted value in entries for previous keys, - break; - } - value_type = ikey.type; - if (value_type == kTypeDeletion) { - saved_key_.clear(); - ClearSavedValue(); - } else { - Slice raw_value = iter_->value(); - if (saved_value_.capacity() > raw_value.size() + 1048576) { - std::string empty; - swap(empty, saved_value_); - } - SaveKey(ExtractUserKey(iter_->key()), &saved_key_); - saved_value_.assign(raw_value.data(), raw_value.size()); - } - } - iter_->Prev(); - } while (iter_->Valid()); - } - - if (value_type == kTypeDeletion) { - // End - valid_ = false; - saved_key_.clear(); - ClearSavedValue(); - direction_ = kForward; - } else { - valid_ = true; - } -} - -void DBIter::Seek(const Slice& target) { - direction_ = kForward; - ClearSavedValue(); - saved_key_.clear(); - AppendInternalKey(&saved_key_, - ParsedInternalKey(target, sequence_, kValueTypeForSeek)); - iter_->Seek(saved_key_); - if (iter_->Valid()) { - FindNextUserEntry(false, &saved_key_ /* temporary storage */); - } else { - valid_ = false; - } -} - -void DBIter::SeekToFirst() { - direction_ = kForward; - ClearSavedValue(); - iter_->SeekToFirst(); - if (iter_->Valid()) { - FindNextUserEntry(false, &saved_key_ /* temporary storage */); - } else { - valid_ = false; - } -} - -void DBIter::SeekToLast() { - direction_ = kReverse; - ClearSavedValue(); - iter_->SeekToLast(); - FindPrevUserEntry(); -} - -} // anonymous namespace - -Iterator* NewDBIterator(DBImpl* db, const Comparator* user_key_comparator, - Iterator* internal_iter, SequenceNumber sequence, - uint32_t seed) { - return new DBIter(db, user_key_comparator, internal_iter, sequence, seed); -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/db/db_iter.h b/assign5/openTok/Pods/leveldb-library/db/db_iter.h deleted file mode 100644 index fd93e91..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/db_iter.h +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_DB_ITER_H_ -#define STORAGE_LEVELDB_DB_DB_ITER_H_ - -#include <stdint.h> - -#include "db/dbformat.h" -#include "leveldb/db.h" - -namespace leveldb { - -class DBImpl; - -// Return a new iterator that converts internal keys (yielded by -// "*internal_iter") that were live at the specified "sequence" number -// into appropriate user keys. -Iterator* NewDBIterator(DBImpl* db, const Comparator* user_key_comparator, - Iterator* internal_iter, SequenceNumber sequence, - uint32_t seed); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_DB_ITER_H_ diff --git a/assign5/openTok/Pods/leveldb-library/db/dbformat.cc b/assign5/openTok/Pods/leveldb-library/db/dbformat.cc deleted file mode 100644 index 69e8dc6..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/dbformat.cc +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/dbformat.h" - -#include <stdio.h> - -#include "port/port.h" -#include "util/coding.h" - -namespace leveldb { - -static uint64_t PackSequenceAndType(uint64_t seq, ValueType t) { - assert(seq <= kMaxSequenceNumber); - assert(t <= kValueTypeForSeek); - return (seq << 8) | t; -} - -void AppendInternalKey(std::string* result, const ParsedInternalKey& key) { - result->append(key.user_key.data(), key.user_key.size()); - PutFixed64(result, PackSequenceAndType(key.sequence, key.type)); -} - -std::string ParsedInternalKey::DebugString() const { - char buf[50]; - snprintf(buf, sizeof(buf), "' @ %llu : %d", (unsigned long long)sequence, - int(type)); - std::string result = "'"; - result += EscapeString(user_key.ToString()); - result += buf; - return result; -} - -std::string InternalKey::DebugString() const { - std::string result; - ParsedInternalKey parsed; - if (ParseInternalKey(rep_, &parsed)) { - result = parsed.DebugString(); - } else { - result = "(bad)"; - result.append(EscapeString(rep_)); - } - return result; -} - -const char* InternalKeyComparator::Name() const { - return "leveldb.InternalKeyComparator"; -} - -int InternalKeyComparator::Compare(const Slice& akey, const Slice& bkey) const { - // Order by: - // increasing user key (according to user-supplied comparator) - // decreasing sequence number - // decreasing type (though sequence# should be enough to disambiguate) - int r = user_comparator_->Compare(ExtractUserKey(akey), ExtractUserKey(bkey)); - if (r == 0) { - const uint64_t anum = DecodeFixed64(akey.data() + akey.size() - 8); - const uint64_t bnum = DecodeFixed64(bkey.data() + bkey.size() - 8); - if (anum > bnum) { - r = -1; - } else if (anum < bnum) { - r = +1; - } - } - return r; -} - -void InternalKeyComparator::FindShortestSeparator(std::string* start, - const Slice& limit) const { - // Attempt to shorten the user portion of the key - Slice user_start = ExtractUserKey(*start); - Slice user_limit = ExtractUserKey(limit); - std::string tmp(user_start.data(), user_start.size()); - user_comparator_->FindShortestSeparator(&tmp, user_limit); - if (tmp.size() < user_start.size() && - user_comparator_->Compare(user_start, tmp) < 0) { - // User key has become shorter physically, but larger logically. - // Tack on the earliest possible number to the shortened user key. - PutFixed64(&tmp, - PackSequenceAndType(kMaxSequenceNumber, kValueTypeForSeek)); - assert(this->Compare(*start, tmp) < 0); - assert(this->Compare(tmp, limit) < 0); - start->swap(tmp); - } -} - -void InternalKeyComparator::FindShortSuccessor(std::string* key) const { - Slice user_key = ExtractUserKey(*key); - std::string tmp(user_key.data(), user_key.size()); - user_comparator_->FindShortSuccessor(&tmp); - if (tmp.size() < user_key.size() && - user_comparator_->Compare(user_key, tmp) < 0) { - // User key has become shorter physically, but larger logically. - // Tack on the earliest possible number to the shortened user key. - PutFixed64(&tmp, - PackSequenceAndType(kMaxSequenceNumber, kValueTypeForSeek)); - assert(this->Compare(*key, tmp) < 0); - key->swap(tmp); - } -} - -const char* InternalFilterPolicy::Name() const { return user_policy_->Name(); } - -void InternalFilterPolicy::CreateFilter(const Slice* keys, int n, - std::string* dst) const { - // We rely on the fact that the code in table.cc does not mind us - // adjusting keys[]. - Slice* mkey = const_cast<Slice*>(keys); - for (int i = 0; i < n; i++) { - mkey[i] = ExtractUserKey(keys[i]); - // TODO(sanjay): Suppress dups? - } - user_policy_->CreateFilter(keys, n, dst); -} - -bool InternalFilterPolicy::KeyMayMatch(const Slice& key, const Slice& f) const { - return user_policy_->KeyMayMatch(ExtractUserKey(key), f); -} - -LookupKey::LookupKey(const Slice& user_key, SequenceNumber s) { - size_t usize = user_key.size(); - size_t needed = usize + 13; // A conservative estimate - char* dst; - if (needed <= sizeof(space_)) { - dst = space_; - } else { - dst = new char[needed]; - } - start_ = dst; - dst = EncodeVarint32(dst, usize + 8); - kstart_ = dst; - memcpy(dst, user_key.data(), usize); - dst += usize; - EncodeFixed64(dst, PackSequenceAndType(s, kValueTypeForSeek)); - dst += 8; - end_ = dst; -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/db/dbformat.h b/assign5/openTok/Pods/leveldb-library/db/dbformat.h deleted file mode 100644 index 013028a..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/dbformat.h +++ /dev/null @@ -1,218 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_DBFORMAT_H_ -#define STORAGE_LEVELDB_DB_DBFORMAT_H_ - -#include <stdio.h> - -#include "leveldb/comparator.h" -#include "leveldb/db.h" -#include "leveldb/filter_policy.h" -#include "leveldb/slice.h" -#include "leveldb/table_builder.h" -#include "util/coding.h" -#include "util/logging.h" - -namespace leveldb { - -// Grouping of constants. We may want to make some of these -// parameters set via options. -namespace config { -static const int kNumLevels = 7; - -// Level-0 compaction is started when we hit this many files. -static const int kL0_CompactionTrigger = 4; - -// Soft limit on number of level-0 files. We slow down writes at this point. -static const int kL0_SlowdownWritesTrigger = 8; - -// Maximum number of level-0 files. We stop writes at this point. -static const int kL0_StopWritesTrigger = 12; - -// Maximum level to which a new compacted memtable is pushed if it -// does not create overlap. We try to push to level 2 to avoid the -// relatively expensive level 0=>1 compactions and to avoid some -// expensive manifest file operations. We do not push all the way to -// the largest level since that can generate a lot of wasted disk -// space if the same key space is being repeatedly overwritten. -static const int kMaxMemCompactLevel = 2; - -// Approximate gap in bytes between samples of data read during iteration. -static const int kReadBytesPeriod = 1048576; - -} // namespace config - -class InternalKey; - -// Value types encoded as the last component of internal keys. -// DO NOT CHANGE THESE ENUM VALUES: they are embedded in the on-disk -// data structures. -enum ValueType { kTypeDeletion = 0x0, kTypeValue = 0x1 }; -// kValueTypeForSeek defines the ValueType that should be passed when -// constructing a ParsedInternalKey object for seeking to a particular -// sequence number (since we sort sequence numbers in decreasing order -// and the value type is embedded as the low 8 bits in the sequence -// number in internal keys, we need to use the highest-numbered -// ValueType, not the lowest). -static const ValueType kValueTypeForSeek = kTypeValue; - -typedef uint64_t SequenceNumber; - -// We leave eight bits empty at the bottom so a type and sequence# -// can be packed together into 64-bits. -static const SequenceNumber kMaxSequenceNumber = ((0x1ull << 56) - 1); - -struct ParsedInternalKey { - Slice user_key; - SequenceNumber sequence; - ValueType type; - - ParsedInternalKey() {} // Intentionally left uninitialized (for speed) - ParsedInternalKey(const Slice& u, const SequenceNumber& seq, ValueType t) - : user_key(u), sequence(seq), type(t) {} - std::string DebugString() const; -}; - -// Return the length of the encoding of "key". -inline size_t InternalKeyEncodingLength(const ParsedInternalKey& key) { - return key.user_key.size() + 8; -} - -// Append the serialization of "key" to *result. -void AppendInternalKey(std::string* result, const ParsedInternalKey& key); - -// Attempt to parse an internal key from "internal_key". On success, -// stores the parsed data in "*result", and returns true. -// -// On error, returns false, leaves "*result" in an undefined state. -bool ParseInternalKey(const Slice& internal_key, ParsedInternalKey* result); - -// Returns the user key portion of an internal key. -inline Slice ExtractUserKey(const Slice& internal_key) { - assert(internal_key.size() >= 8); - return Slice(internal_key.data(), internal_key.size() - 8); -} - -// A comparator for internal keys that uses a specified comparator for -// the user key portion and breaks ties by decreasing sequence number. -class InternalKeyComparator : public Comparator { - private: - const Comparator* user_comparator_; - - public: - explicit InternalKeyComparator(const Comparator* c) : user_comparator_(c) {} - virtual const char* Name() const; - virtual int Compare(const Slice& a, const Slice& b) const; - virtual void FindShortestSeparator(std::string* start, - const Slice& limit) const; - virtual void FindShortSuccessor(std::string* key) const; - - const Comparator* user_comparator() const { return user_comparator_; } - - int Compare(const InternalKey& a, const InternalKey& b) const; -}; - -// Filter policy wrapper that converts from internal keys to user keys -class InternalFilterPolicy : public FilterPolicy { - private: - const FilterPolicy* const user_policy_; - - public: - explicit InternalFilterPolicy(const FilterPolicy* p) : user_policy_(p) {} - virtual const char* Name() const; - virtual void CreateFilter(const Slice* keys, int n, std::string* dst) const; - virtual bool KeyMayMatch(const Slice& key, const Slice& filter) const; -}; - -// Modules in this directory should keep internal keys wrapped inside -// the following class instead of plain strings so that we do not -// incorrectly use string comparisons instead of an InternalKeyComparator. -class InternalKey { - private: - std::string rep_; - - public: - InternalKey() {} // Leave rep_ as empty to indicate it is invalid - InternalKey(const Slice& user_key, SequenceNumber s, ValueType t) { - AppendInternalKey(&rep_, ParsedInternalKey(user_key, s, t)); - } - - void DecodeFrom(const Slice& s) { rep_.assign(s.data(), s.size()); } - Slice Encode() const { - assert(!rep_.empty()); - return rep_; - } - - Slice user_key() const { return ExtractUserKey(rep_); } - - void SetFrom(const ParsedInternalKey& p) { - rep_.clear(); - AppendInternalKey(&rep_, p); - } - - void Clear() { rep_.clear(); } - - std::string DebugString() const; -}; - -inline int InternalKeyComparator::Compare(const InternalKey& a, - const InternalKey& b) const { - return Compare(a.Encode(), b.Encode()); -} - -inline bool ParseInternalKey(const Slice& internal_key, - ParsedInternalKey* result) { - const size_t n = internal_key.size(); - if (n < 8) return false; - uint64_t num = DecodeFixed64(internal_key.data() + n - 8); - unsigned char c = num & 0xff; - result->sequence = num >> 8; - result->type = static_cast<ValueType>(c); - result->user_key = Slice(internal_key.data(), n - 8); - return (c <= static_cast<unsigned char>(kTypeValue)); -} - -// A helper class useful for DBImpl::Get() -class LookupKey { - public: - // Initialize *this for looking up user_key at a snapshot with - // the specified sequence number. - LookupKey(const Slice& user_key, SequenceNumber sequence); - - LookupKey(const LookupKey&) = delete; - LookupKey& operator=(const LookupKey&) = delete; - - ~LookupKey(); - - // Return a key suitable for lookup in a MemTable. - Slice memtable_key() const { return Slice(start_, end_ - start_); } - - // Return an internal key (suitable for passing to an internal iterator) - Slice internal_key() const { return Slice(kstart_, end_ - kstart_); } - - // Return the user key - Slice user_key() const { return Slice(kstart_, end_ - kstart_ - 8); } - - private: - // We construct a char array of the form: - // klength varint32 <-- start_ - // userkey char[klength] <-- kstart_ - // tag uint64 - // <-- end_ - // The array is a suitable MemTable key. - // The suffix starting with "userkey" can be used as an InternalKey. - const char* start_; - const char* kstart_; - const char* end_; - char space_[200]; // Avoid allocation for short keys -}; - -inline LookupKey::~LookupKey() { - if (start_ != space_) delete[] start_; -} - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_DBFORMAT_H_ diff --git a/assign5/openTok/Pods/leveldb-library/db/dumpfile.cc b/assign5/openTok/Pods/leveldb-library/db/dumpfile.cc deleted file mode 100644 index 9d22d58..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/dumpfile.cc +++ /dev/null @@ -1,232 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/dumpfile.h" - -#include <stdio.h> - -#include "db/dbformat.h" -#include "db/filename.h" -#include "db/log_reader.h" -#include "db/version_edit.h" -#include "db/write_batch_internal.h" -#include "leveldb/env.h" -#include "leveldb/iterator.h" -#include "leveldb/options.h" -#include "leveldb/status.h" -#include "leveldb/table.h" -#include "leveldb/write_batch.h" -#include "util/logging.h" - -namespace leveldb { - -namespace { - -bool GuessType(const std::string& fname, FileType* type) { - size_t pos = fname.rfind('/'); - std::string basename; - if (pos == std::string::npos) { - basename = fname; - } else { - basename = std::string(fname.data() + pos + 1, fname.size() - pos - 1); - } - uint64_t ignored; - return ParseFileName(basename, &ignored, type); -} - -// Notified when log reader encounters corruption. -class CorruptionReporter : public log::Reader::Reporter { - public: - virtual void Corruption(size_t bytes, const Status& status) { - std::string r = "corruption: "; - AppendNumberTo(&r, bytes); - r += " bytes; "; - r += status.ToString(); - r.push_back('\n'); - dst_->Append(r); - } - - WritableFile* dst_; -}; - -// Print contents of a log file. (*func)() is called on every record. -Status PrintLogContents(Env* env, const std::string& fname, - void (*func)(uint64_t, Slice, WritableFile*), - WritableFile* dst) { - SequentialFile* file; - Status s = env->NewSequentialFile(fname, &file); - if (!s.ok()) { - return s; - } - CorruptionReporter reporter; - reporter.dst_ = dst; - log::Reader reader(file, &reporter, true, 0); - Slice record; - std::string scratch; - while (reader.ReadRecord(&record, &scratch)) { - (*func)(reader.LastRecordOffset(), record, dst); - } - delete file; - return Status::OK(); -} - -// Called on every item found in a WriteBatch. -class WriteBatchItemPrinter : public WriteBatch::Handler { - public: - virtual void Put(const Slice& key, const Slice& value) { - std::string r = " put '"; - AppendEscapedStringTo(&r, key); - r += "' '"; - AppendEscapedStringTo(&r, value); - r += "'\n"; - dst_->Append(r); - } - virtual void Delete(const Slice& key) { - std::string r = " del '"; - AppendEscapedStringTo(&r, key); - r += "'\n"; - dst_->Append(r); - } - - WritableFile* dst_; -}; - -// Called on every log record (each one of which is a WriteBatch) -// found in a kLogFile. -static void WriteBatchPrinter(uint64_t pos, Slice record, WritableFile* dst) { - std::string r = "--- offset "; - AppendNumberTo(&r, pos); - r += "; "; - if (record.size() < 12) { - r += "log record length "; - AppendNumberTo(&r, record.size()); - r += " is too small\n"; - dst->Append(r); - return; - } - WriteBatch batch; - WriteBatchInternal::SetContents(&batch, record); - r += "sequence "; - AppendNumberTo(&r, WriteBatchInternal::Sequence(&batch)); - r.push_back('\n'); - dst->Append(r); - WriteBatchItemPrinter batch_item_printer; - batch_item_printer.dst_ = dst; - Status s = batch.Iterate(&batch_item_printer); - if (!s.ok()) { - dst->Append(" error: " + s.ToString() + "\n"); - } -} - -Status DumpLog(Env* env, const std::string& fname, WritableFile* dst) { - return PrintLogContents(env, fname, WriteBatchPrinter, dst); -} - -// Called on every log record (each one of which is a WriteBatch) -// found in a kDescriptorFile. -static void VersionEditPrinter(uint64_t pos, Slice record, WritableFile* dst) { - std::string r = "--- offset "; - AppendNumberTo(&r, pos); - r += "; "; - VersionEdit edit; - Status s = edit.DecodeFrom(record); - if (!s.ok()) { - r += s.ToString(); - r.push_back('\n'); - } else { - r += edit.DebugString(); - } - dst->Append(r); -} - -Status DumpDescriptor(Env* env, const std::string& fname, WritableFile* dst) { - return PrintLogContents(env, fname, VersionEditPrinter, dst); -} - -Status DumpTable(Env* env, const std::string& fname, WritableFile* dst) { - uint64_t file_size; - RandomAccessFile* file = nullptr; - Table* table = nullptr; - Status s = env->GetFileSize(fname, &file_size); - if (s.ok()) { - s = env->NewRandomAccessFile(fname, &file); - } - if (s.ok()) { - // We use the default comparator, which may or may not match the - // comparator used in this database. However this should not cause - // problems since we only use Table operations that do not require - // any comparisons. In particular, we do not call Seek or Prev. - s = Table::Open(Options(), file, file_size, &table); - } - if (!s.ok()) { - delete table; - delete file; - return s; - } - - ReadOptions ro; - ro.fill_cache = false; - Iterator* iter = table->NewIterator(ro); - std::string r; - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - r.clear(); - ParsedInternalKey key; - if (!ParseInternalKey(iter->key(), &key)) { - r = "badkey '"; - AppendEscapedStringTo(&r, iter->key()); - r += "' => '"; - AppendEscapedStringTo(&r, iter->value()); - r += "'\n"; - dst->Append(r); - } else { - r = "'"; - AppendEscapedStringTo(&r, key.user_key); - r += "' @ "; - AppendNumberTo(&r, key.sequence); - r += " : "; - if (key.type == kTypeDeletion) { - r += "del"; - } else if (key.type == kTypeValue) { - r += "val"; - } else { - AppendNumberTo(&r, key.type); - } - r += " => '"; - AppendEscapedStringTo(&r, iter->value()); - r += "'\n"; - dst->Append(r); - } - } - s = iter->status(); - if (!s.ok()) { - dst->Append("iterator error: " + s.ToString() + "\n"); - } - - delete iter; - delete table; - delete file; - return Status::OK(); -} - -} // namespace - -Status DumpFile(Env* env, const std::string& fname, WritableFile* dst) { - FileType ftype; - if (!GuessType(fname, &ftype)) { - return Status::InvalidArgument(fname + ": unknown file type"); - } - switch (ftype) { - case kLogFile: - return DumpLog(env, fname, dst); - case kDescriptorFile: - return DumpDescriptor(env, fname, dst); - case kTableFile: - return DumpTable(env, fname, dst); - default: - break; - } - return Status::InvalidArgument(fname + ": not a dump-able file type"); -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/db/filename.cc b/assign5/openTok/Pods/leveldb-library/db/filename.cc deleted file mode 100644 index 85de45c..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/filename.cc +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/filename.h" - -#include <ctype.h> -#include <stdio.h> - -#include "db/dbformat.h" -#include "leveldb/env.h" -#include "util/logging.h" - -namespace leveldb { - -// A utility routine: write "data" to the named file and Sync() it. -Status WriteStringToFileSync(Env* env, const Slice& data, - const std::string& fname); - -static std::string MakeFileName(const std::string& dbname, uint64_t number, - const char* suffix) { - char buf[100]; - snprintf(buf, sizeof(buf), "/%06llu.%s", - static_cast<unsigned long long>(number), suffix); - return dbname + buf; -} - -std::string LogFileName(const std::string& dbname, uint64_t number) { - assert(number > 0); - return MakeFileName(dbname, number, "log"); -} - -std::string TableFileName(const std::string& dbname, uint64_t number) { - assert(number > 0); - return MakeFileName(dbname, number, "ldb"); -} - -std::string SSTTableFileName(const std::string& dbname, uint64_t number) { - assert(number > 0); - return MakeFileName(dbname, number, "sst"); -} - -std::string DescriptorFileName(const std::string& dbname, uint64_t number) { - assert(number > 0); - char buf[100]; - snprintf(buf, sizeof(buf), "/MANIFEST-%06llu", - static_cast<unsigned long long>(number)); - return dbname + buf; -} - -std::string CurrentFileName(const std::string& dbname) { - return dbname + "/CURRENT"; -} - -std::string LockFileName(const std::string& dbname) { return dbname + "/LOCK"; } - -std::string TempFileName(const std::string& dbname, uint64_t number) { - assert(number > 0); - return MakeFileName(dbname, number, "dbtmp"); -} - -std::string InfoLogFileName(const std::string& dbname) { - return dbname + "/LOG"; -} - -// Return the name of the old info log file for "dbname". -std::string OldInfoLogFileName(const std::string& dbname) { - return dbname + "/LOG.old"; -} - -// Owned filenames have the form: -// dbname/CURRENT -// dbname/LOCK -// dbname/LOG -// dbname/LOG.old -// dbname/MANIFEST-[0-9]+ -// dbname/[0-9]+.(log|sst|ldb) -bool ParseFileName(const std::string& filename, uint64_t* number, - FileType* type) { - Slice rest(filename); - if (rest == "CURRENT") { - *number = 0; - *type = kCurrentFile; - } else if (rest == "LOCK") { - *number = 0; - *type = kDBLockFile; - } else if (rest == "LOG" || rest == "LOG.old") { - *number = 0; - *type = kInfoLogFile; - } else if (rest.starts_with("MANIFEST-")) { - rest.remove_prefix(strlen("MANIFEST-")); - uint64_t num; - if (!ConsumeDecimalNumber(&rest, &num)) { - return false; - } - if (!rest.empty()) { - return false; - } - *type = kDescriptorFile; - *number = num; - } else { - // Avoid strtoull() to keep filename format independent of the - // current locale - uint64_t num; - if (!ConsumeDecimalNumber(&rest, &num)) { - return false; - } - Slice suffix = rest; - if (suffix == Slice(".log")) { - *type = kLogFile; - } else if (suffix == Slice(".sst") || suffix == Slice(".ldb")) { - *type = kTableFile; - } else if (suffix == Slice(".dbtmp")) { - *type = kTempFile; - } else { - return false; - } - *number = num; - } - return true; -} - -Status SetCurrentFile(Env* env, const std::string& dbname, - uint64_t descriptor_number) { - // Remove leading "dbname/" and add newline to manifest file name - std::string manifest = DescriptorFileName(dbname, descriptor_number); - Slice contents = manifest; - assert(contents.starts_with(dbname + "/")); - contents.remove_prefix(dbname.size() + 1); - std::string tmp = TempFileName(dbname, descriptor_number); - Status s = WriteStringToFileSync(env, contents.ToString() + "\n", tmp); - if (s.ok()) { - s = env->RenameFile(tmp, CurrentFileName(dbname)); - } - if (!s.ok()) { - env->DeleteFile(tmp); - } - return s; -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/db/filename.h b/assign5/openTok/Pods/leveldb-library/db/filename.h deleted file mode 100644 index 524e813..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/filename.h +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// File names used by DB code - -#ifndef STORAGE_LEVELDB_DB_FILENAME_H_ -#define STORAGE_LEVELDB_DB_FILENAME_H_ - -#include <stdint.h> - -#include <string> - -#include "leveldb/slice.h" -#include "leveldb/status.h" -#include "port/port.h" - -namespace leveldb { - -class Env; - -enum FileType { - kLogFile, - kDBLockFile, - kTableFile, - kDescriptorFile, - kCurrentFile, - kTempFile, - kInfoLogFile // Either the current one, or an old one -}; - -// Return the name of the log file with the specified number -// in the db named by "dbname". The result will be prefixed with -// "dbname". -std::string LogFileName(const std::string& dbname, uint64_t number); - -// Return the name of the sstable with the specified number -// in the db named by "dbname". The result will be prefixed with -// "dbname". -std::string TableFileName(const std::string& dbname, uint64_t number); - -// Return the legacy file name for an sstable with the specified number -// in the db named by "dbname". The result will be prefixed with -// "dbname". -std::string SSTTableFileName(const std::string& dbname, uint64_t number); - -// Return the name of the descriptor file for the db named by -// "dbname" and the specified incarnation number. The result will be -// prefixed with "dbname". -std::string DescriptorFileName(const std::string& dbname, uint64_t number); - -// Return the name of the current file. This file contains the name -// of the current manifest file. The result will be prefixed with -// "dbname". -std::string CurrentFileName(const std::string& dbname); - -// Return the name of the lock file for the db named by -// "dbname". The result will be prefixed with "dbname". -std::string LockFileName(const std::string& dbname); - -// Return the name of a temporary file owned by the db named "dbname". -// The result will be prefixed with "dbname". -std::string TempFileName(const std::string& dbname, uint64_t number); - -// Return the name of the info log file for "dbname". -std::string InfoLogFileName(const std::string& dbname); - -// Return the name of the old info log file for "dbname". -std::string OldInfoLogFileName(const std::string& dbname); - -// If filename is a leveldb file, store the type of the file in *type. -// The number encoded in the filename is stored in *number. If the -// filename was successfully parsed, returns true. Else return false. -bool ParseFileName(const std::string& filename, uint64_t* number, - FileType* type); - -// Make the CURRENT file point to the descriptor file with the -// specified number. -Status SetCurrentFile(Env* env, const std::string& dbname, - uint64_t descriptor_number); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_FILENAME_H_ diff --git a/assign5/openTok/Pods/leveldb-library/db/log_format.h b/assign5/openTok/Pods/leveldb-library/db/log_format.h deleted file mode 100644 index 356e69f..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/log_format.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Log format information shared by reader and writer. -// See ../doc/log_format.md for more detail. - -#ifndef STORAGE_LEVELDB_DB_LOG_FORMAT_H_ -#define STORAGE_LEVELDB_DB_LOG_FORMAT_H_ - -namespace leveldb { -namespace log { - -enum RecordType { - // Zero is reserved for preallocated files - kZeroType = 0, - - kFullType = 1, - - // For fragments - kFirstType = 2, - kMiddleType = 3, - kLastType = 4 -}; -static const int kMaxRecordType = kLastType; - -static const int kBlockSize = 32768; - -// Header is checksum (4 bytes), length (2 bytes), type (1 byte). -static const int kHeaderSize = 4 + 2 + 1; - -} // namespace log -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_LOG_FORMAT_H_ diff --git a/assign5/openTok/Pods/leveldb-library/db/log_reader.cc b/assign5/openTok/Pods/leveldb-library/db/log_reader.cc deleted file mode 100644 index f472723..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/log_reader.cc +++ /dev/null @@ -1,274 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/log_reader.h" - -#include <stdio.h> - -#include "leveldb/env.h" -#include "util/coding.h" -#include "util/crc32c.h" - -namespace leveldb { -namespace log { - -Reader::Reporter::~Reporter() {} - -Reader::Reader(SequentialFile* file, Reporter* reporter, bool checksum, - uint64_t initial_offset) - : file_(file), - reporter_(reporter), - checksum_(checksum), - backing_store_(new char[kBlockSize]), - buffer_(), - eof_(false), - last_record_offset_(0), - end_of_buffer_offset_(0), - initial_offset_(initial_offset), - resyncing_(initial_offset > 0) {} - -Reader::~Reader() { delete[] backing_store_; } - -bool Reader::SkipToInitialBlock() { - const size_t offset_in_block = initial_offset_ % kBlockSize; - uint64_t block_start_location = initial_offset_ - offset_in_block; - - // Don't search a block if we'd be in the trailer - if (offset_in_block > kBlockSize - 6) { - block_start_location += kBlockSize; - } - - end_of_buffer_offset_ = block_start_location; - - // Skip to start of first block that can contain the initial record - if (block_start_location > 0) { - Status skip_status = file_->Skip(block_start_location); - if (!skip_status.ok()) { - ReportDrop(block_start_location, skip_status); - return false; - } - } - - return true; -} - -bool Reader::ReadRecord(Slice* record, std::string* scratch) { - if (last_record_offset_ < initial_offset_) { - if (!SkipToInitialBlock()) { - return false; - } - } - - scratch->clear(); - record->clear(); - bool in_fragmented_record = false; - // Record offset of the logical record that we're reading - // 0 is a dummy value to make compilers happy - uint64_t prospective_record_offset = 0; - - Slice fragment; - while (true) { - const unsigned int record_type = ReadPhysicalRecord(&fragment); - - // ReadPhysicalRecord may have only had an empty trailer remaining in its - // internal buffer. Calculate the offset of the next physical record now - // that it has returned, properly accounting for its header size. - uint64_t physical_record_offset = - end_of_buffer_offset_ - buffer_.size() - kHeaderSize - fragment.size(); - - if (resyncing_) { - if (record_type == kMiddleType) { - continue; - } else if (record_type == kLastType) { - resyncing_ = false; - continue; - } else { - resyncing_ = false; - } - } - - switch (record_type) { - case kFullType: - if (in_fragmented_record) { - // Handle bug in earlier versions of log::Writer where - // it could emit an empty kFirstType record at the tail end - // of a block followed by a kFullType or kFirstType record - // at the beginning of the next block. - if (!scratch->empty()) { - ReportCorruption(scratch->size(), "partial record without end(1)"); - } - } - prospective_record_offset = physical_record_offset; - scratch->clear(); - *record = fragment; - last_record_offset_ = prospective_record_offset; - return true; - - case kFirstType: - if (in_fragmented_record) { - // Handle bug in earlier versions of log::Writer where - // it could emit an empty kFirstType record at the tail end - // of a block followed by a kFullType or kFirstType record - // at the beginning of the next block. - if (!scratch->empty()) { - ReportCorruption(scratch->size(), "partial record without end(2)"); - } - } - prospective_record_offset = physical_record_offset; - scratch->assign(fragment.data(), fragment.size()); - in_fragmented_record = true; - break; - - case kMiddleType: - if (!in_fragmented_record) { - ReportCorruption(fragment.size(), - "missing start of fragmented record(1)"); - } else { - scratch->append(fragment.data(), fragment.size()); - } - break; - - case kLastType: - if (!in_fragmented_record) { - ReportCorruption(fragment.size(), - "missing start of fragmented record(2)"); - } else { - scratch->append(fragment.data(), fragment.size()); - *record = Slice(*scratch); - last_record_offset_ = prospective_record_offset; - return true; - } - break; - - case kEof: - if (in_fragmented_record) { - // This can be caused by the writer dying immediately after - // writing a physical record but before completing the next; don't - // treat it as a corruption, just ignore the entire logical record. - scratch->clear(); - } - return false; - - case kBadRecord: - if (in_fragmented_record) { - ReportCorruption(scratch->size(), "error in middle of record"); - in_fragmented_record = false; - scratch->clear(); - } - break; - - default: { - char buf[40]; - snprintf(buf, sizeof(buf), "unknown record type %u", record_type); - ReportCorruption( - (fragment.size() + (in_fragmented_record ? scratch->size() : 0)), - buf); - in_fragmented_record = false; - scratch->clear(); - break; - } - } - } - return false; -} - -uint64_t Reader::LastRecordOffset() { return last_record_offset_; } - -void Reader::ReportCorruption(uint64_t bytes, const char* reason) { - ReportDrop(bytes, Status::Corruption(reason)); -} - -void Reader::ReportDrop(uint64_t bytes, const Status& reason) { - if (reporter_ != nullptr && - end_of_buffer_offset_ - buffer_.size() - bytes >= initial_offset_) { - reporter_->Corruption(static_cast<size_t>(bytes), reason); - } -} - -unsigned int Reader::ReadPhysicalRecord(Slice* result) { - while (true) { - if (buffer_.size() < kHeaderSize) { - if (!eof_) { - // Last read was a full read, so this is a trailer to skip - buffer_.clear(); - Status status = file_->Read(kBlockSize, &buffer_, backing_store_); - end_of_buffer_offset_ += buffer_.size(); - if (!status.ok()) { - buffer_.clear(); - ReportDrop(kBlockSize, status); - eof_ = true; - return kEof; - } else if (buffer_.size() < kBlockSize) { - eof_ = true; - } - continue; - } else { - // Note that if buffer_ is non-empty, we have a truncated header at the - // end of the file, which can be caused by the writer crashing in the - // middle of writing the header. Instead of considering this an error, - // just report EOF. - buffer_.clear(); - return kEof; - } - } - - // Parse the header - const char* header = buffer_.data(); - const uint32_t a = static_cast<uint32_t>(header[4]) & 0xff; - const uint32_t b = static_cast<uint32_t>(header[5]) & 0xff; - const unsigned int type = header[6]; - const uint32_t length = a | (b << 8); - if (kHeaderSize + length > buffer_.size()) { - size_t drop_size = buffer_.size(); - buffer_.clear(); - if (!eof_) { - ReportCorruption(drop_size, "bad record length"); - return kBadRecord; - } - // If the end of the file has been reached without reading |length| bytes - // of payload, assume the writer died in the middle of writing the record. - // Don't report a corruption. - return kEof; - } - - if (type == kZeroType && length == 0) { - // Skip zero length record without reporting any drops since - // such records are produced by the mmap based writing code in - // env_posix.cc that preallocates file regions. - buffer_.clear(); - return kBadRecord; - } - - // Check crc - if (checksum_) { - uint32_t expected_crc = crc32c::Unmask(DecodeFixed32(header)); - uint32_t actual_crc = crc32c::Value(header + 6, 1 + length); - if (actual_crc != expected_crc) { - // Drop the rest of the buffer since "length" itself may have - // been corrupted and if we trust it, we could find some - // fragment of a real log record that just happens to look - // like a valid log record. - size_t drop_size = buffer_.size(); - buffer_.clear(); - ReportCorruption(drop_size, "checksum mismatch"); - return kBadRecord; - } - } - - buffer_.remove_prefix(kHeaderSize + length); - - // Skip physical record that started before initial_offset_ - if (end_of_buffer_offset_ - buffer_.size() - kHeaderSize - length < - initial_offset_) { - result->clear(); - return kBadRecord; - } - - *result = Slice(header + kHeaderSize, length); - return type; - } -} - -} // namespace log -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/db/log_reader.h b/assign5/openTok/Pods/leveldb-library/db/log_reader.h deleted file mode 100644 index 001da89..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/log_reader.h +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_LOG_READER_H_ -#define STORAGE_LEVELDB_DB_LOG_READER_H_ - -#include <stdint.h> - -#include "db/log_format.h" -#include "leveldb/slice.h" -#include "leveldb/status.h" - -namespace leveldb { - -class SequentialFile; - -namespace log { - -class Reader { - public: - // Interface for reporting errors. - class Reporter { - public: - virtual ~Reporter(); - - // Some corruption was detected. "size" is the approximate number - // of bytes dropped due to the corruption. - virtual void Corruption(size_t bytes, const Status& status) = 0; - }; - - // Create a reader that will return log records from "*file". - // "*file" must remain live while this Reader is in use. - // - // If "reporter" is non-null, it is notified whenever some data is - // dropped due to a detected corruption. "*reporter" must remain - // live while this Reader is in use. - // - // If "checksum" is true, verify checksums if available. - // - // The Reader will start reading at the first record located at physical - // position >= initial_offset within the file. - Reader(SequentialFile* file, Reporter* reporter, bool checksum, - uint64_t initial_offset); - - Reader(const Reader&) = delete; - Reader& operator=(const Reader&) = delete; - - ~Reader(); - - // Read the next record into *record. Returns true if read - // successfully, false if we hit end of the input. May use - // "*scratch" as temporary storage. The contents filled in *record - // will only be valid until the next mutating operation on this - // reader or the next mutation to *scratch. - bool ReadRecord(Slice* record, std::string* scratch); - - // Returns the physical offset of the last record returned by ReadRecord. - // - // Undefined before the first call to ReadRecord. - uint64_t LastRecordOffset(); - - private: - // Extend record types with the following special values - enum { - kEof = kMaxRecordType + 1, - // Returned whenever we find an invalid physical record. - // Currently there are three situations in which this happens: - // * The record has an invalid CRC (ReadPhysicalRecord reports a drop) - // * The record is a 0-length record (No drop is reported) - // * The record is below constructor's initial_offset (No drop is reported) - kBadRecord = kMaxRecordType + 2 - }; - - // Skips all blocks that are completely before "initial_offset_". - // - // Returns true on success. Handles reporting. - bool SkipToInitialBlock(); - - // Return type, or one of the preceding special values - unsigned int ReadPhysicalRecord(Slice* result); - - // Reports dropped bytes to the reporter. - // buffer_ must be updated to remove the dropped bytes prior to invocation. - void ReportCorruption(uint64_t bytes, const char* reason); - void ReportDrop(uint64_t bytes, const Status& reason); - - SequentialFile* const file_; - Reporter* const reporter_; - bool const checksum_; - char* const backing_store_; - Slice buffer_; - bool eof_; // Last Read() indicated EOF by returning < kBlockSize - - // Offset of the last record returned by ReadRecord. - uint64_t last_record_offset_; - // Offset of the first location past the end of buffer_. - uint64_t end_of_buffer_offset_; - - // Offset at which to start looking for the first record to return - uint64_t const initial_offset_; - - // True if we are resynchronizing after a seek (initial_offset_ > 0). In - // particular, a run of kMiddleType and kLastType records can be silently - // skipped in this mode - bool resyncing_; -}; - -} // namespace log -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_LOG_READER_H_ diff --git a/assign5/openTok/Pods/leveldb-library/db/log_writer.cc b/assign5/openTok/Pods/leveldb-library/db/log_writer.cc deleted file mode 100644 index 5e83f6a..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/log_writer.cc +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/log_writer.h" - -#include <stdint.h> - -#include "leveldb/env.h" -#include "util/coding.h" -#include "util/crc32c.h" - -namespace leveldb { -namespace log { - -static void InitTypeCrc(uint32_t* type_crc) { - for (int i = 0; i <= kMaxRecordType; i++) { - char t = static_cast<char>(i); - type_crc[i] = crc32c::Value(&t, 1); - } -} - -Writer::Writer(WritableFile* dest) : dest_(dest), block_offset_(0) { - InitTypeCrc(type_crc_); -} - -Writer::Writer(WritableFile* dest, uint64_t dest_length) - : dest_(dest), block_offset_(dest_length % kBlockSize) { - InitTypeCrc(type_crc_); -} - -Writer::~Writer() {} - -Status Writer::AddRecord(const Slice& slice) { - const char* ptr = slice.data(); - size_t left = slice.size(); - - // Fragment the record if necessary and emit it. Note that if slice - // is empty, we still want to iterate once to emit a single - // zero-length record - Status s; - bool begin = true; - do { - const int leftover = kBlockSize - block_offset_; - assert(leftover >= 0); - if (leftover < kHeaderSize) { - // Switch to a new block - if (leftover > 0) { - // Fill the trailer (literal below relies on kHeaderSize being 7) - static_assert(kHeaderSize == 7, ""); - dest_->Append(Slice("\x00\x00\x00\x00\x00\x00", leftover)); - } - block_offset_ = 0; - } - - // Invariant: we never leave < kHeaderSize bytes in a block. - assert(kBlockSize - block_offset_ - kHeaderSize >= 0); - - const size_t avail = kBlockSize - block_offset_ - kHeaderSize; - const size_t fragment_length = (left < avail) ? left : avail; - - RecordType type; - const bool end = (left == fragment_length); - if (begin && end) { - type = kFullType; - } else if (begin) { - type = kFirstType; - } else if (end) { - type = kLastType; - } else { - type = kMiddleType; - } - - s = EmitPhysicalRecord(type, ptr, fragment_length); - ptr += fragment_length; - left -= fragment_length; - begin = false; - } while (s.ok() && left > 0); - return s; -} - -Status Writer::EmitPhysicalRecord(RecordType t, const char* ptr, - size_t length) { - assert(length <= 0xffff); // Must fit in two bytes - assert(block_offset_ + kHeaderSize + length <= kBlockSize); - - // Format the header - char buf[kHeaderSize]; - buf[4] = static_cast<char>(length & 0xff); - buf[5] = static_cast<char>(length >> 8); - buf[6] = static_cast<char>(t); - - // Compute the crc of the record type and the payload. - uint32_t crc = crc32c::Extend(type_crc_[t], ptr, length); - crc = crc32c::Mask(crc); // Adjust for storage - EncodeFixed32(buf, crc); - - // Write the header and the payload - Status s = dest_->Append(Slice(buf, kHeaderSize)); - if (s.ok()) { - s = dest_->Append(Slice(ptr, length)); - if (s.ok()) { - s = dest_->Flush(); - } - } - block_offset_ += kHeaderSize + length; - return s; -} - -} // namespace log -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/db/log_writer.h b/assign5/openTok/Pods/leveldb-library/db/log_writer.h deleted file mode 100644 index c0a2114..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/log_writer.h +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_LOG_WRITER_H_ -#define STORAGE_LEVELDB_DB_LOG_WRITER_H_ - -#include <stdint.h> - -#include "db/log_format.h" -#include "leveldb/slice.h" -#include "leveldb/status.h" - -namespace leveldb { - -class WritableFile; - -namespace log { - -class Writer { - public: - // Create a writer that will append data to "*dest". - // "*dest" must be initially empty. - // "*dest" must remain live while this Writer is in use. - explicit Writer(WritableFile* dest); - - // Create a writer that will append data to "*dest". - // "*dest" must have initial length "dest_length". - // "*dest" must remain live while this Writer is in use. - Writer(WritableFile* dest, uint64_t dest_length); - - Writer(const Writer&) = delete; - Writer& operator=(const Writer&) = delete; - - ~Writer(); - - Status AddRecord(const Slice& slice); - - private: - Status EmitPhysicalRecord(RecordType type, const char* ptr, size_t length); - - WritableFile* dest_; - int block_offset_; // Current offset in block - - // crc32c values for all supported record types. These are - // pre-computed to reduce the overhead of computing the crc of the - // record type stored in the header. - uint32_t type_crc_[kMaxRecordType + 1]; -}; - -} // namespace log -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_LOG_WRITER_H_ diff --git a/assign5/openTok/Pods/leveldb-library/db/memtable.cc b/assign5/openTok/Pods/leveldb-library/db/memtable.cc deleted file mode 100644 index c91405c..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/memtable.cc +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/memtable.h" -#include "db/dbformat.h" -#include "leveldb/comparator.h" -#include "leveldb/env.h" -#include "leveldb/iterator.h" -#include "util/coding.h" - -namespace leveldb { - -static Slice GetLengthPrefixedSlice(const char* data) { - uint32_t len; - const char* p = data; - p = GetVarint32Ptr(p, p + 5, &len); // +5: we assume "p" is not corrupted - return Slice(p, len); -} - -MemTable::MemTable(const InternalKeyComparator& comparator) - : comparator_(comparator), refs_(0), table_(comparator_, &arena_) {} - -MemTable::~MemTable() { assert(refs_ == 0); } - -size_t MemTable::ApproximateMemoryUsage() { return arena_.MemoryUsage(); } - -int MemTable::KeyComparator::operator()(const char* aptr, - const char* bptr) const { - // Internal keys are encoded as length-prefixed strings. - Slice a = GetLengthPrefixedSlice(aptr); - Slice b = GetLengthPrefixedSlice(bptr); - return comparator.Compare(a, b); -} - -// Encode a suitable internal key target for "target" and return it. -// Uses *scratch as scratch space, and the returned pointer will point -// into this scratch space. -static const char* EncodeKey(std::string* scratch, const Slice& target) { - scratch->clear(); - PutVarint32(scratch, target.size()); - scratch->append(target.data(), target.size()); - return scratch->data(); -} - -class MemTableIterator : public Iterator { - public: - explicit MemTableIterator(MemTable::Table* table) : iter_(table) {} - - virtual bool Valid() const { return iter_.Valid(); } - virtual void Seek(const Slice& k) { iter_.Seek(EncodeKey(&tmp_, k)); } - virtual void SeekToFirst() { iter_.SeekToFirst(); } - virtual void SeekToLast() { iter_.SeekToLast(); } - virtual void Next() { iter_.Next(); } - virtual void Prev() { iter_.Prev(); } - virtual Slice key() const { return GetLengthPrefixedSlice(iter_.key()); } - virtual Slice value() const { - Slice key_slice = GetLengthPrefixedSlice(iter_.key()); - return GetLengthPrefixedSlice(key_slice.data() + key_slice.size()); - } - - virtual Status status() const { return Status::OK(); } - - private: - MemTable::Table::Iterator iter_; - std::string tmp_; // For passing to EncodeKey - - // No copying allowed - MemTableIterator(const MemTableIterator&); - void operator=(const MemTableIterator&); -}; - -Iterator* MemTable::NewIterator() { return new MemTableIterator(&table_); } - -void MemTable::Add(SequenceNumber s, ValueType type, const Slice& key, - const Slice& value) { - // Format of an entry is concatenation of: - // key_size : varint32 of internal_key.size() - // key bytes : char[internal_key.size()] - // value_size : varint32 of value.size() - // value bytes : char[value.size()] - size_t key_size = key.size(); - size_t val_size = value.size(); - size_t internal_key_size = key_size + 8; - const size_t encoded_len = VarintLength(internal_key_size) + - internal_key_size + VarintLength(val_size) + - val_size; - char* buf = arena_.Allocate(encoded_len); - char* p = EncodeVarint32(buf, internal_key_size); - memcpy(p, key.data(), key_size); - p += key_size; - EncodeFixed64(p, (s << 8) | type); - p += 8; - p = EncodeVarint32(p, val_size); - memcpy(p, value.data(), val_size); - assert(p + val_size == buf + encoded_len); - table_.Insert(buf); -} - -bool MemTable::Get(const LookupKey& key, std::string* value, Status* s) { - Slice memkey = key.memtable_key(); - Table::Iterator iter(&table_); - iter.Seek(memkey.data()); - if (iter.Valid()) { - // entry format is: - // klength varint32 - // userkey char[klength] - // tag uint64 - // vlength varint32 - // value char[vlength] - // Check that it belongs to same user key. We do not check the - // sequence number since the Seek() call above should have skipped - // all entries with overly large sequence numbers. - const char* entry = iter.key(); - uint32_t key_length; - const char* key_ptr = GetVarint32Ptr(entry, entry + 5, &key_length); - if (comparator_.comparator.user_comparator()->Compare( - Slice(key_ptr, key_length - 8), key.user_key()) == 0) { - // Correct user key - const uint64_t tag = DecodeFixed64(key_ptr + key_length - 8); - switch (static_cast<ValueType>(tag & 0xff)) { - case kTypeValue: { - Slice v = GetLengthPrefixedSlice(key_ptr + key_length); - value->assign(v.data(), v.size()); - return true; - } - case kTypeDeletion: - *s = Status::NotFound(Slice()); - return true; - } - } - } - return false; -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/db/memtable.h b/assign5/openTok/Pods/leveldb-library/db/memtable.h deleted file mode 100644 index 9d986b1..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/memtable.h +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_MEMTABLE_H_ -#define STORAGE_LEVELDB_DB_MEMTABLE_H_ - -#include <string> - -#include "db/dbformat.h" -#include "db/skiplist.h" -#include "leveldb/db.h" -#include "util/arena.h" - -namespace leveldb { - -class InternalKeyComparator; -class MemTableIterator; - -class MemTable { - public: - // MemTables are reference counted. The initial reference count - // is zero and the caller must call Ref() at least once. - explicit MemTable(const InternalKeyComparator& comparator); - - MemTable(const MemTable&) = delete; - MemTable& operator=(const MemTable&) = delete; - - // Increase reference count. - void Ref() { ++refs_; } - - // Drop reference count. Delete if no more references exist. - void Unref() { - --refs_; - assert(refs_ >= 0); - if (refs_ <= 0) { - delete this; - } - } - - // Returns an estimate of the number of bytes of data in use by this - // data structure. It is safe to call when MemTable is being modified. - size_t ApproximateMemoryUsage(); - - // Return an iterator that yields the contents of the memtable. - // - // The caller must ensure that the underlying MemTable remains live - // while the returned iterator is live. The keys returned by this - // iterator are internal keys encoded by AppendInternalKey in the - // db/format.{h,cc} module. - Iterator* NewIterator(); - - // Add an entry into memtable that maps key to value at the - // specified sequence number and with the specified type. - // Typically value will be empty if type==kTypeDeletion. - void Add(SequenceNumber seq, ValueType type, const Slice& key, - const Slice& value); - - // If memtable contains a value for key, store it in *value and return true. - // If memtable contains a deletion for key, store a NotFound() error - // in *status and return true. - // Else, return false. - bool Get(const LookupKey& key, std::string* value, Status* s); - - private: - friend class MemTableIterator; - friend class MemTableBackwardIterator; - - struct KeyComparator { - const InternalKeyComparator comparator; - explicit KeyComparator(const InternalKeyComparator& c) : comparator(c) {} - int operator()(const char* a, const char* b) const; - }; - - typedef SkipList<const char*, KeyComparator> Table; - - ~MemTable(); // Private since only Unref() should be used to delete it - - KeyComparator comparator_; - int refs_; - Arena arena_; - Table table_; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_MEMTABLE_H_ diff --git a/assign5/openTok/Pods/leveldb-library/db/repair.cc b/assign5/openTok/Pods/leveldb-library/db/repair.cc deleted file mode 100644 index 3c676ca..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/repair.cc +++ /dev/null @@ -1,450 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// We recover the contents of the descriptor from the other files we find. -// (1) Any log files are first converted to tables -// (2) We scan every table to compute -// (a) smallest/largest for the table -// (b) largest sequence number in the table -// (3) We generate descriptor contents: -// - log number is set to zero -// - next-file-number is set to 1 + largest file number we found -// - last-sequence-number is set to largest sequence# found across -// all tables (see 2c) -// - compaction pointers are cleared -// - every table file is added at level 0 -// -// Possible optimization 1: -// (a) Compute total size and use to pick appropriate max-level M -// (b) Sort tables by largest sequence# in the table -// (c) For each table: if it overlaps earlier table, place in level-0, -// else place in level-M. -// Possible optimization 2: -// Store per-table metadata (smallest, largest, largest-seq#, ...) -// in the table's meta section to speed up ScanTable. - -#include "db/builder.h" -#include "db/db_impl.h" -#include "db/dbformat.h" -#include "db/filename.h" -#include "db/log_reader.h" -#include "db/log_writer.h" -#include "db/memtable.h" -#include "db/table_cache.h" -#include "db/version_edit.h" -#include "db/write_batch_internal.h" -#include "leveldb/comparator.h" -#include "leveldb/db.h" -#include "leveldb/env.h" - -namespace leveldb { - -namespace { - -class Repairer { - public: - Repairer(const std::string& dbname, const Options& options) - : dbname_(dbname), - env_(options.env), - icmp_(options.comparator), - ipolicy_(options.filter_policy), - options_(SanitizeOptions(dbname, &icmp_, &ipolicy_, options)), - owns_info_log_(options_.info_log != options.info_log), - owns_cache_(options_.block_cache != options.block_cache), - next_file_number_(1) { - // TableCache can be small since we expect each table to be opened once. - table_cache_ = new TableCache(dbname_, options_, 10); - } - - ~Repairer() { - delete table_cache_; - if (owns_info_log_) { - delete options_.info_log; - } - if (owns_cache_) { - delete options_.block_cache; - } - } - - Status Run() { - Status status = FindFiles(); - if (status.ok()) { - ConvertLogFilesToTables(); - ExtractMetaData(); - status = WriteDescriptor(); - } - if (status.ok()) { - unsigned long long bytes = 0; - for (size_t i = 0; i < tables_.size(); i++) { - bytes += tables_[i].meta.file_size; - } - Log(options_.info_log, - "**** Repaired leveldb %s; " - "recovered %d files; %llu bytes. " - "Some data may have been lost. " - "****", - dbname_.c_str(), static_cast<int>(tables_.size()), bytes); - } - return status; - } - - private: - struct TableInfo { - FileMetaData meta; - SequenceNumber max_sequence; - }; - - Status FindFiles() { - std::vector<std::string> filenames; - Status status = env_->GetChildren(dbname_, &filenames); - if (!status.ok()) { - return status; - } - if (filenames.empty()) { - return Status::IOError(dbname_, "repair found no files"); - } - - uint64_t number; - FileType type; - for (size_t i = 0; i < filenames.size(); i++) { - if (ParseFileName(filenames[i], &number, &type)) { - if (type == kDescriptorFile) { - manifests_.push_back(filenames[i]); - } else { - if (number + 1 > next_file_number_) { - next_file_number_ = number + 1; - } - if (type == kLogFile) { - logs_.push_back(number); - } else if (type == kTableFile) { - table_numbers_.push_back(number); - } else { - // Ignore other files - } - } - } - } - return status; - } - - void ConvertLogFilesToTables() { - for (size_t i = 0; i < logs_.size(); i++) { - std::string logname = LogFileName(dbname_, logs_[i]); - Status status = ConvertLogToTable(logs_[i]); - if (!status.ok()) { - Log(options_.info_log, "Log #%llu: ignoring conversion error: %s", - (unsigned long long)logs_[i], status.ToString().c_str()); - } - ArchiveFile(logname); - } - } - - Status ConvertLogToTable(uint64_t log) { - struct LogReporter : public log::Reader::Reporter { - Env* env; - Logger* info_log; - uint64_t lognum; - virtual void Corruption(size_t bytes, const Status& s) { - // We print error messages for corruption, but continue repairing. - Log(info_log, "Log #%llu: dropping %d bytes; %s", - (unsigned long long)lognum, static_cast<int>(bytes), - s.ToString().c_str()); - } - }; - - // Open the log file - std::string logname = LogFileName(dbname_, log); - SequentialFile* lfile; - Status status = env_->NewSequentialFile(logname, &lfile); - if (!status.ok()) { - return status; - } - - // Create the log reader. - LogReporter reporter; - reporter.env = env_; - reporter.info_log = options_.info_log; - reporter.lognum = log; - // We intentionally make log::Reader do checksumming so that - // corruptions cause entire commits to be skipped instead of - // propagating bad information (like overly large sequence - // numbers). - log::Reader reader(lfile, &reporter, false /*do not checksum*/, - 0 /*initial_offset*/); - - // Read all the records and add to a memtable - std::string scratch; - Slice record; - WriteBatch batch; - MemTable* mem = new MemTable(icmp_); - mem->Ref(); - int counter = 0; - while (reader.ReadRecord(&record, &scratch)) { - if (record.size() < 12) { - reporter.Corruption(record.size(), - Status::Corruption("log record too small")); - continue; - } - WriteBatchInternal::SetContents(&batch, record); - status = WriteBatchInternal::InsertInto(&batch, mem); - if (status.ok()) { - counter += WriteBatchInternal::Count(&batch); - } else { - Log(options_.info_log, "Log #%llu: ignoring %s", - (unsigned long long)log, status.ToString().c_str()); - status = Status::OK(); // Keep going with rest of file - } - } - delete lfile; - - // Do not record a version edit for this conversion to a Table - // since ExtractMetaData() will also generate edits. - FileMetaData meta; - meta.number = next_file_number_++; - Iterator* iter = mem->NewIterator(); - status = BuildTable(dbname_, env_, options_, table_cache_, iter, &meta); - delete iter; - mem->Unref(); - mem = nullptr; - if (status.ok()) { - if (meta.file_size > 0) { - table_numbers_.push_back(meta.number); - } - } - Log(options_.info_log, "Log #%llu: %d ops saved to Table #%llu %s", - (unsigned long long)log, counter, (unsigned long long)meta.number, - status.ToString().c_str()); - return status; - } - - void ExtractMetaData() { - for (size_t i = 0; i < table_numbers_.size(); i++) { - ScanTable(table_numbers_[i]); - } - } - - Iterator* NewTableIterator(const FileMetaData& meta) { - // Same as compaction iterators: if paranoid_checks are on, turn - // on checksum verification. - ReadOptions r; - r.verify_checksums = options_.paranoid_checks; - return table_cache_->NewIterator(r, meta.number, meta.file_size); - } - - void ScanTable(uint64_t number) { - TableInfo t; - t.meta.number = number; - std::string fname = TableFileName(dbname_, number); - Status status = env_->GetFileSize(fname, &t.meta.file_size); - if (!status.ok()) { - // Try alternate file name. - fname = SSTTableFileName(dbname_, number); - Status s2 = env_->GetFileSize(fname, &t.meta.file_size); - if (s2.ok()) { - status = Status::OK(); - } - } - if (!status.ok()) { - ArchiveFile(TableFileName(dbname_, number)); - ArchiveFile(SSTTableFileName(dbname_, number)); - Log(options_.info_log, "Table #%llu: dropped: %s", - (unsigned long long)t.meta.number, status.ToString().c_str()); - return; - } - - // Extract metadata by scanning through table. - int counter = 0; - Iterator* iter = NewTableIterator(t.meta); - bool empty = true; - ParsedInternalKey parsed; - t.max_sequence = 0; - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - Slice key = iter->key(); - if (!ParseInternalKey(key, &parsed)) { - Log(options_.info_log, "Table #%llu: unparsable key %s", - (unsigned long long)t.meta.number, EscapeString(key).c_str()); - continue; - } - - counter++; - if (empty) { - empty = false; - t.meta.smallest.DecodeFrom(key); - } - t.meta.largest.DecodeFrom(key); - if (parsed.sequence > t.max_sequence) { - t.max_sequence = parsed.sequence; - } - } - if (!iter->status().ok()) { - status = iter->status(); - } - delete iter; - Log(options_.info_log, "Table #%llu: %d entries %s", - (unsigned long long)t.meta.number, counter, status.ToString().c_str()); - - if (status.ok()) { - tables_.push_back(t); - } else { - RepairTable(fname, t); // RepairTable archives input file. - } - } - - void RepairTable(const std::string& src, TableInfo t) { - // We will copy src contents to a new table and then rename the - // new table over the source. - - // Create builder. - std::string copy = TableFileName(dbname_, next_file_number_++); - WritableFile* file; - Status s = env_->NewWritableFile(copy, &file); - if (!s.ok()) { - return; - } - TableBuilder* builder = new TableBuilder(options_, file); - - // Copy data. - Iterator* iter = NewTableIterator(t.meta); - int counter = 0; - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - builder->Add(iter->key(), iter->value()); - counter++; - } - delete iter; - - ArchiveFile(src); - if (counter == 0) { - builder->Abandon(); // Nothing to save - } else { - s = builder->Finish(); - if (s.ok()) { - t.meta.file_size = builder->FileSize(); - } - } - delete builder; - builder = nullptr; - - if (s.ok()) { - s = file->Close(); - } - delete file; - file = nullptr; - - if (counter > 0 && s.ok()) { - std::string orig = TableFileName(dbname_, t.meta.number); - s = env_->RenameFile(copy, orig); - if (s.ok()) { - Log(options_.info_log, "Table #%llu: %d entries repaired", - (unsigned long long)t.meta.number, counter); - tables_.push_back(t); - } - } - if (!s.ok()) { - env_->DeleteFile(copy); - } - } - - Status WriteDescriptor() { - std::string tmp = TempFileName(dbname_, 1); - WritableFile* file; - Status status = env_->NewWritableFile(tmp, &file); - if (!status.ok()) { - return status; - } - - SequenceNumber max_sequence = 0; - for (size_t i = 0; i < tables_.size(); i++) { - if (max_sequence < tables_[i].max_sequence) { - max_sequence = tables_[i].max_sequence; - } - } - - edit_.SetComparatorName(icmp_.user_comparator()->Name()); - edit_.SetLogNumber(0); - edit_.SetNextFile(next_file_number_); - edit_.SetLastSequence(max_sequence); - - for (size_t i = 0; i < tables_.size(); i++) { - // TODO(opt): separate out into multiple levels - const TableInfo& t = tables_[i]; - edit_.AddFile(0, t.meta.number, t.meta.file_size, t.meta.smallest, - t.meta.largest); - } - - // fprintf(stderr, "NewDescriptor:\n%s\n", edit_.DebugString().c_str()); - { - log::Writer log(file); - std::string record; - edit_.EncodeTo(&record); - status = log.AddRecord(record); - } - if (status.ok()) { - status = file->Close(); - } - delete file; - file = nullptr; - - if (!status.ok()) { - env_->DeleteFile(tmp); - } else { - // Discard older manifests - for (size_t i = 0; i < manifests_.size(); i++) { - ArchiveFile(dbname_ + "/" + manifests_[i]); - } - - // Install new manifest - status = env_->RenameFile(tmp, DescriptorFileName(dbname_, 1)); - if (status.ok()) { - status = SetCurrentFile(env_, dbname_, 1); - } else { - env_->DeleteFile(tmp); - } - } - return status; - } - - void ArchiveFile(const std::string& fname) { - // Move into another directory. E.g., for - // dir/foo - // rename to - // dir/lost/foo - const char* slash = strrchr(fname.c_str(), '/'); - std::string new_dir; - if (slash != nullptr) { - new_dir.assign(fname.data(), slash - fname.data()); - } - new_dir.append("/lost"); - env_->CreateDir(new_dir); // Ignore error - std::string new_file = new_dir; - new_file.append("/"); - new_file.append((slash == nullptr) ? fname.c_str() : slash + 1); - Status s = env_->RenameFile(fname, new_file); - Log(options_.info_log, "Archiving %s: %s\n", fname.c_str(), - s.ToString().c_str()); - } - - const std::string dbname_; - Env* const env_; - InternalKeyComparator const icmp_; - InternalFilterPolicy const ipolicy_; - const Options options_; - bool owns_info_log_; - bool owns_cache_; - TableCache* table_cache_; - VersionEdit edit_; - - std::vector<std::string> manifests_; - std::vector<uint64_t> table_numbers_; - std::vector<uint64_t> logs_; - std::vector<TableInfo> tables_; - uint64_t next_file_number_; -}; -} // namespace - -Status RepairDB(const std::string& dbname, const Options& options) { - Repairer repairer(dbname, options); - return repairer.Run(); -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/db/skiplist.h b/assign5/openTok/Pods/leveldb-library/db/skiplist.h deleted file mode 100644 index a59b45b..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/skiplist.h +++ /dev/null @@ -1,382 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_SKIPLIST_H_ -#define STORAGE_LEVELDB_DB_SKIPLIST_H_ - -// Thread safety -// ------------- -// -// Writes require external synchronization, most likely a mutex. -// Reads require a guarantee that the SkipList will not be destroyed -// while the read is in progress. Apart from that, reads progress -// without any internal locking or synchronization. -// -// Invariants: -// -// (1) Allocated nodes are never deleted until the SkipList is -// destroyed. This is trivially guaranteed by the code since we -// never delete any skip list nodes. -// -// (2) The contents of a Node except for the next/prev pointers are -// immutable after the Node has been linked into the SkipList. -// Only Insert() modifies the list, and it is careful to initialize -// a node and use release-stores to publish the nodes in one or -// more lists. -// -// ... prev vs. next pointer ordering ... - -#include <atomic> -#include <cassert> -#include <cstdlib> - -#include "util/arena.h" -#include "util/random.h" - -namespace leveldb { - -class Arena; - -template <typename Key, class Comparator> -class SkipList { - private: - struct Node; - - public: - // Create a new SkipList object that will use "cmp" for comparing keys, - // and will allocate memory using "*arena". Objects allocated in the arena - // must remain allocated for the lifetime of the skiplist object. - explicit SkipList(Comparator cmp, Arena* arena); - - SkipList(const SkipList&) = delete; - SkipList& operator=(const SkipList&) = delete; - - // Insert key into the list. - // REQUIRES: nothing that compares equal to key is currently in the list. - void Insert(const Key& key); - - // Returns true iff an entry that compares equal to key is in the list. - bool Contains(const Key& key) const; - - // Iteration over the contents of a skip list - class Iterator { - public: - // Initialize an iterator over the specified list. - // The returned iterator is not valid. - explicit Iterator(const SkipList* list); - - // Returns true iff the iterator is positioned at a valid node. - bool Valid() const; - - // Returns the key at the current position. - // REQUIRES: Valid() - const Key& key() const; - - // Advances to the next position. - // REQUIRES: Valid() - void Next(); - - // Advances to the previous position. - // REQUIRES: Valid() - void Prev(); - - // Advance to the first entry with a key >= target - void Seek(const Key& target); - - // Position at the first entry in list. - // Final state of iterator is Valid() iff list is not empty. - void SeekToFirst(); - - // Position at the last entry in list. - // Final state of iterator is Valid() iff list is not empty. - void SeekToLast(); - - private: - const SkipList* list_; - Node* node_; - // Intentionally copyable - }; - - private: - enum { kMaxHeight = 12 }; - - inline int GetMaxHeight() const { - return max_height_.load(std::memory_order_relaxed); - } - - Node* NewNode(const Key& key, int height); - int RandomHeight(); - bool Equal(const Key& a, const Key& b) const { return (compare_(a, b) == 0); } - - // Return true if key is greater than the data stored in "n" - bool KeyIsAfterNode(const Key& key, Node* n) const; - - // Return the earliest node that comes at or after key. - // Return nullptr if there is no such node. - // - // If prev is non-null, fills prev[level] with pointer to previous - // node at "level" for every level in [0..max_height_-1]. - Node* FindGreaterOrEqual(const Key& key, Node** prev) const; - - // Return the latest node with a key < key. - // Return head_ if there is no such node. - Node* FindLessThan(const Key& key) const; - - // Return the last node in the list. - // Return head_ if list is empty. - Node* FindLast() const; - - // Immutable after construction - Comparator const compare_; - Arena* const arena_; // Arena used for allocations of nodes - - Node* const head_; - - // Modified only by Insert(). Read racily by readers, but stale - // values are ok. - std::atomic<int> max_height_; // Height of the entire list - - // Read/written only by Insert(). - Random rnd_; -}; - -// Implementation details follow -template <typename Key, class Comparator> -struct SkipList<Key, Comparator>::Node { - explicit Node(const Key& k) : key(k) {} - - Key const key; - - // Accessors/mutators for links. Wrapped in methods so we can - // add the appropriate barriers as necessary. - Node* Next(int n) { - assert(n >= 0); - // Use an 'acquire load' so that we observe a fully initialized - // version of the returned Node. - return next_[n].load(std::memory_order_acquire); - } - void SetNext(int n, Node* x) { - assert(n >= 0); - // Use a 'release store' so that anybody who reads through this - // pointer observes a fully initialized version of the inserted node. - next_[n].store(x, std::memory_order_release); - } - - // No-barrier variants that can be safely used in a few locations. - Node* NoBarrier_Next(int n) { - assert(n >= 0); - return next_[n].load(std::memory_order_relaxed); - } - void NoBarrier_SetNext(int n, Node* x) { - assert(n >= 0); - next_[n].store(x, std::memory_order_relaxed); - } - - private: - // Array of length equal to the node height. next_[0] is lowest level link. - std::atomic<Node*> next_[1]; -}; - -template <typename Key, class Comparator> -typename SkipList<Key, Comparator>::Node* SkipList<Key, Comparator>::NewNode( - const Key& key, int height) { - char* const node_memory = arena_->AllocateAligned( - sizeof(Node) + sizeof(std::atomic<Node*>) * (height - 1)); - return new (node_memory) Node(key); -} - -template <typename Key, class Comparator> -inline SkipList<Key, Comparator>::Iterator::Iterator(const SkipList* list) { - list_ = list; - node_ = nullptr; -} - -template <typename Key, class Comparator> -inline bool SkipList<Key, Comparator>::Iterator::Valid() const { - return node_ != nullptr; -} - -template <typename Key, class Comparator> -inline const Key& SkipList<Key, Comparator>::Iterator::key() const { - assert(Valid()); - return node_->key; -} - -template <typename Key, class Comparator> -inline void SkipList<Key, Comparator>::Iterator::Next() { - assert(Valid()); - node_ = node_->Next(0); -} - -template <typename Key, class Comparator> -inline void SkipList<Key, Comparator>::Iterator::Prev() { - // Instead of using explicit "prev" links, we just search for the - // last node that falls before key. - assert(Valid()); - node_ = list_->FindLessThan(node_->key); - if (node_ == list_->head_) { - node_ = nullptr; - } -} - -template <typename Key, class Comparator> -inline void SkipList<Key, Comparator>::Iterator::Seek(const Key& target) { - node_ = list_->FindGreaterOrEqual(target, nullptr); -} - -template <typename Key, class Comparator> -inline void SkipList<Key, Comparator>::Iterator::SeekToFirst() { - node_ = list_->head_->Next(0); -} - -template <typename Key, class Comparator> -inline void SkipList<Key, Comparator>::Iterator::SeekToLast() { - node_ = list_->FindLast(); - if (node_ == list_->head_) { - node_ = nullptr; - } -} - -template <typename Key, class Comparator> -int SkipList<Key, Comparator>::RandomHeight() { - // Increase height with probability 1 in kBranching - static const unsigned int kBranching = 4; - int height = 1; - while (height < kMaxHeight && ((rnd_.Next() % kBranching) == 0)) { - height++; - } - assert(height > 0); - assert(height <= kMaxHeight); - return height; -} - -template <typename Key, class Comparator> -bool SkipList<Key, Comparator>::KeyIsAfterNode(const Key& key, Node* n) const { - // null n is considered infinite - return (n != nullptr) && (compare_(n->key, key) < 0); -} - -template <typename Key, class Comparator> -typename SkipList<Key, Comparator>::Node* -SkipList<Key, Comparator>::FindGreaterOrEqual(const Key& key, - Node** prev) const { - Node* x = head_; - int level = GetMaxHeight() - 1; - while (true) { - Node* next = x->Next(level); - if (KeyIsAfterNode(key, next)) { - // Keep searching in this list - x = next; - } else { - if (prev != nullptr) prev[level] = x; - if (level == 0) { - return next; - } else { - // Switch to next list - level--; - } - } - } -} - -template <typename Key, class Comparator> -typename SkipList<Key, Comparator>::Node* -SkipList<Key, Comparator>::FindLessThan(const Key& key) const { - Node* x = head_; - int level = GetMaxHeight() - 1; - while (true) { - assert(x == head_ || compare_(x->key, key) < 0); - Node* next = x->Next(level); - if (next == nullptr || compare_(next->key, key) >= 0) { - if (level == 0) { - return x; - } else { - // Switch to next list - level--; - } - } else { - x = next; - } - } -} - -template <typename Key, class Comparator> -typename SkipList<Key, Comparator>::Node* SkipList<Key, Comparator>::FindLast() - const { - Node* x = head_; - int level = GetMaxHeight() - 1; - while (true) { - Node* next = x->Next(level); - if (next == nullptr) { - if (level == 0) { - return x; - } else { - // Switch to next list - level--; - } - } else { - x = next; - } - } -} - -template <typename Key, class Comparator> -SkipList<Key, Comparator>::SkipList(Comparator cmp, Arena* arena) - : compare_(cmp), - arena_(arena), - head_(NewNode(0 /* any key will do */, kMaxHeight)), - max_height_(1), - rnd_(0xdeadbeef) { - for (int i = 0; i < kMaxHeight; i++) { - head_->SetNext(i, nullptr); - } -} - -template <typename Key, class Comparator> -void SkipList<Key, Comparator>::Insert(const Key& key) { - // TODO(opt): We can use a barrier-free variant of FindGreaterOrEqual() - // here since Insert() is externally synchronized. - Node* prev[kMaxHeight]; - Node* x = FindGreaterOrEqual(key, prev); - - // Our data structure does not allow duplicate insertion - assert(x == nullptr || !Equal(key, x->key)); - - int height = RandomHeight(); - if (height > GetMaxHeight()) { - for (int i = GetMaxHeight(); i < height; i++) { - prev[i] = head_; - } - // It is ok to mutate max_height_ without any synchronization - // with concurrent readers. A concurrent reader that observes - // the new value of max_height_ will see either the old value of - // new level pointers from head_ (nullptr), or a new value set in - // the loop below. In the former case the reader will - // immediately drop to the next level since nullptr sorts after all - // keys. In the latter case the reader will use the new node. - max_height_.store(height, std::memory_order_relaxed); - } - - x = NewNode(key, height); - for (int i = 0; i < height; i++) { - // NoBarrier_SetNext() suffices since we will add a barrier when - // we publish a pointer to "x" in prev[i]. - x->NoBarrier_SetNext(i, prev[i]->NoBarrier_Next(i)); - prev[i]->SetNext(i, x); - } -} - -template <typename Key, class Comparator> -bool SkipList<Key, Comparator>::Contains(const Key& key) const { - Node* x = FindGreaterOrEqual(key, nullptr); - if (x != nullptr && Equal(key, x->key)) { - return true; - } else { - return false; - } -} - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_SKIPLIST_H_ diff --git a/assign5/openTok/Pods/leveldb-library/db/snapshot.h b/assign5/openTok/Pods/leveldb-library/db/snapshot.h deleted file mode 100644 index 9f1d664..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/snapshot.h +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_SNAPSHOT_H_ -#define STORAGE_LEVELDB_DB_SNAPSHOT_H_ - -#include "db/dbformat.h" -#include "leveldb/db.h" - -namespace leveldb { - -class SnapshotList; - -// Snapshots are kept in a doubly-linked list in the DB. -// Each SnapshotImpl corresponds to a particular sequence number. -class SnapshotImpl : public Snapshot { - public: - SnapshotImpl(SequenceNumber sequence_number) - : sequence_number_(sequence_number) {} - - SequenceNumber sequence_number() const { return sequence_number_; } - - private: - friend class SnapshotList; - - // SnapshotImpl is kept in a doubly-linked circular list. The SnapshotList - // implementation operates on the next/previous fields direcly. - SnapshotImpl* prev_; - SnapshotImpl* next_; - - const SequenceNumber sequence_number_; - -#if !defined(NDEBUG) - SnapshotList* list_ = nullptr; -#endif // !defined(NDEBUG) -}; - -class SnapshotList { - public: - SnapshotList() : head_(0) { - head_.prev_ = &head_; - head_.next_ = &head_; - } - - bool empty() const { return head_.next_ == &head_; } - SnapshotImpl* oldest() const { - assert(!empty()); - return head_.next_; - } - SnapshotImpl* newest() const { - assert(!empty()); - return head_.prev_; - } - - // Creates a SnapshotImpl and appends it to the end of the list. - SnapshotImpl* New(SequenceNumber sequence_number) { - assert(empty() || newest()->sequence_number_ <= sequence_number); - - SnapshotImpl* snapshot = new SnapshotImpl(sequence_number); - -#if !defined(NDEBUG) - snapshot->list_ = this; -#endif // !defined(NDEBUG) - snapshot->next_ = &head_; - snapshot->prev_ = head_.prev_; - snapshot->prev_->next_ = snapshot; - snapshot->next_->prev_ = snapshot; - return snapshot; - } - - // Removes a SnapshotImpl from this list. - // - // The snapshot must have been created by calling New() on this list. - // - // The snapshot pointer should not be const, because its memory is - // deallocated. However, that would force us to change DB::ReleaseSnapshot(), - // which is in the API, and currently takes a const Snapshot. - void Delete(const SnapshotImpl* snapshot) { -#if !defined(NDEBUG) - assert(snapshot->list_ == this); -#endif // !defined(NDEBUG) - snapshot->prev_->next_ = snapshot->next_; - snapshot->next_->prev_ = snapshot->prev_; - delete snapshot; - } - - private: - // Dummy head of doubly-linked list of snapshots - SnapshotImpl head_; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_SNAPSHOT_H_ diff --git a/assign5/openTok/Pods/leveldb-library/db/table_cache.cc b/assign5/openTok/Pods/leveldb-library/db/table_cache.cc deleted file mode 100644 index 73f05fd..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/table_cache.cc +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/table_cache.h" - -#include "db/filename.h" -#include "leveldb/env.h" -#include "leveldb/table.h" -#include "util/coding.h" - -namespace leveldb { - -struct TableAndFile { - RandomAccessFile* file; - Table* table; -}; - -static void DeleteEntry(const Slice& key, void* value) { - TableAndFile* tf = reinterpret_cast<TableAndFile*>(value); - delete tf->table; - delete tf->file; - delete tf; -} - -static void UnrefEntry(void* arg1, void* arg2) { - Cache* cache = reinterpret_cast<Cache*>(arg1); - Cache::Handle* h = reinterpret_cast<Cache::Handle*>(arg2); - cache->Release(h); -} - -TableCache::TableCache(const std::string& dbname, const Options& options, - int entries) - : env_(options.env), - dbname_(dbname), - options_(options), - cache_(NewLRUCache(entries)) {} - -TableCache::~TableCache() { delete cache_; } - -Status TableCache::FindTable(uint64_t file_number, uint64_t file_size, - Cache::Handle** handle) { - Status s; - char buf[sizeof(file_number)]; - EncodeFixed64(buf, file_number); - Slice key(buf, sizeof(buf)); - *handle = cache_->Lookup(key); - if (*handle == nullptr) { - std::string fname = TableFileName(dbname_, file_number); - RandomAccessFile* file = nullptr; - Table* table = nullptr; - s = env_->NewRandomAccessFile(fname, &file); - if (!s.ok()) { - std::string old_fname = SSTTableFileName(dbname_, file_number); - if (env_->NewRandomAccessFile(old_fname, &file).ok()) { - s = Status::OK(); - } - } - if (s.ok()) { - s = Table::Open(options_, file, file_size, &table); - } - - if (!s.ok()) { - assert(table == nullptr); - delete file; - // We do not cache error results so that if the error is transient, - // or somebody repairs the file, we recover automatically. - } else { - TableAndFile* tf = new TableAndFile; - tf->file = file; - tf->table = table; - *handle = cache_->Insert(key, tf, 1, &DeleteEntry); - } - } - return s; -} - -Iterator* TableCache::NewIterator(const ReadOptions& options, - uint64_t file_number, uint64_t file_size, - Table** tableptr) { - if (tableptr != nullptr) { - *tableptr = nullptr; - } - - Cache::Handle* handle = nullptr; - Status s = FindTable(file_number, file_size, &handle); - if (!s.ok()) { - return NewErrorIterator(s); - } - - Table* table = reinterpret_cast<TableAndFile*>(cache_->Value(handle))->table; - Iterator* result = table->NewIterator(options); - result->RegisterCleanup(&UnrefEntry, cache_, handle); - if (tableptr != nullptr) { - *tableptr = table; - } - return result; -} - -Status TableCache::Get(const ReadOptions& options, uint64_t file_number, - uint64_t file_size, const Slice& k, void* arg, - void (*handle_result)(void*, const Slice&, - const Slice&)) { - Cache::Handle* handle = nullptr; - Status s = FindTable(file_number, file_size, &handle); - if (s.ok()) { - Table* t = reinterpret_cast<TableAndFile*>(cache_->Value(handle))->table; - s = t->InternalGet(options, k, arg, handle_result); - cache_->Release(handle); - } - return s; -} - -void TableCache::Evict(uint64_t file_number) { - char buf[sizeof(file_number)]; - EncodeFixed64(buf, file_number); - cache_->Erase(Slice(buf, sizeof(buf))); -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/db/table_cache.h b/assign5/openTok/Pods/leveldb-library/db/table_cache.h deleted file mode 100644 index 93069c8..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/table_cache.h +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Thread-safe (provides internal synchronization) - -#ifndef STORAGE_LEVELDB_DB_TABLE_CACHE_H_ -#define STORAGE_LEVELDB_DB_TABLE_CACHE_H_ - -#include <stdint.h> - -#include <string> - -#include "db/dbformat.h" -#include "leveldb/cache.h" -#include "leveldb/table.h" -#include "port/port.h" - -namespace leveldb { - -class Env; - -class TableCache { - public: - TableCache(const std::string& dbname, const Options& options, int entries); - ~TableCache(); - - // Return an iterator for the specified file number (the corresponding - // file length must be exactly "file_size" bytes). If "tableptr" is - // non-null, also sets "*tableptr" to point to the Table object - // underlying the returned iterator, or to nullptr if no Table object - // underlies the returned iterator. The returned "*tableptr" object is owned - // by the cache and should not be deleted, and is valid for as long as the - // returned iterator is live. - Iterator* NewIterator(const ReadOptions& options, uint64_t file_number, - uint64_t file_size, Table** tableptr = nullptr); - - // If a seek to internal key "k" in specified file finds an entry, - // call (*handle_result)(arg, found_key, found_value). - Status Get(const ReadOptions& options, uint64_t file_number, - uint64_t file_size, const Slice& k, void* arg, - void (*handle_result)(void*, const Slice&, const Slice&)); - - // Evict any entry for the specified file number - void Evict(uint64_t file_number); - - private: - Status FindTable(uint64_t file_number, uint64_t file_size, Cache::Handle**); - - Env* const env_; - const std::string dbname_; - const Options& options_; - Cache* cache_; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_TABLE_CACHE_H_ diff --git a/assign5/openTok/Pods/leveldb-library/db/version_edit.cc b/assign5/openTok/Pods/leveldb-library/db/version_edit.cc deleted file mode 100644 index 44a4d02..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/version_edit.cc +++ /dev/null @@ -1,260 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/version_edit.h" - -#include "db/version_set.h" -#include "util/coding.h" - -namespace leveldb { - -// Tag numbers for serialized VersionEdit. These numbers are written to -// disk and should not be changed. -enum Tag { - kComparator = 1, - kLogNumber = 2, - kNextFileNumber = 3, - kLastSequence = 4, - kCompactPointer = 5, - kDeletedFile = 6, - kNewFile = 7, - // 8 was used for large value refs - kPrevLogNumber = 9 -}; - -void VersionEdit::Clear() { - comparator_.clear(); - log_number_ = 0; - prev_log_number_ = 0; - last_sequence_ = 0; - next_file_number_ = 0; - has_comparator_ = false; - has_log_number_ = false; - has_prev_log_number_ = false; - has_next_file_number_ = false; - has_last_sequence_ = false; - deleted_files_.clear(); - new_files_.clear(); -} - -void VersionEdit::EncodeTo(std::string* dst) const { - if (has_comparator_) { - PutVarint32(dst, kComparator); - PutLengthPrefixedSlice(dst, comparator_); - } - if (has_log_number_) { - PutVarint32(dst, kLogNumber); - PutVarint64(dst, log_number_); - } - if (has_prev_log_number_) { - PutVarint32(dst, kPrevLogNumber); - PutVarint64(dst, prev_log_number_); - } - if (has_next_file_number_) { - PutVarint32(dst, kNextFileNumber); - PutVarint64(dst, next_file_number_); - } - if (has_last_sequence_) { - PutVarint32(dst, kLastSequence); - PutVarint64(dst, last_sequence_); - } - - for (size_t i = 0; i < compact_pointers_.size(); i++) { - PutVarint32(dst, kCompactPointer); - PutVarint32(dst, compact_pointers_[i].first); // level - PutLengthPrefixedSlice(dst, compact_pointers_[i].second.Encode()); - } - - for (DeletedFileSet::const_iterator iter = deleted_files_.begin(); - iter != deleted_files_.end(); ++iter) { - PutVarint32(dst, kDeletedFile); - PutVarint32(dst, iter->first); // level - PutVarint64(dst, iter->second); // file number - } - - for (size_t i = 0; i < new_files_.size(); i++) { - const FileMetaData& f = new_files_[i].second; - PutVarint32(dst, kNewFile); - PutVarint32(dst, new_files_[i].first); // level - PutVarint64(dst, f.number); - PutVarint64(dst, f.file_size); - PutLengthPrefixedSlice(dst, f.smallest.Encode()); - PutLengthPrefixedSlice(dst, f.largest.Encode()); - } -} - -static bool GetInternalKey(Slice* input, InternalKey* dst) { - Slice str; - if (GetLengthPrefixedSlice(input, &str)) { - dst->DecodeFrom(str); - return true; - } else { - return false; - } -} - -static bool GetLevel(Slice* input, int* level) { - uint32_t v; - if (GetVarint32(input, &v) && v < config::kNumLevels) { - *level = v; - return true; - } else { - return false; - } -} - -Status VersionEdit::DecodeFrom(const Slice& src) { - Clear(); - Slice input = src; - const char* msg = nullptr; - uint32_t tag; - - // Temporary storage for parsing - int level; - uint64_t number; - FileMetaData f; - Slice str; - InternalKey key; - - while (msg == nullptr && GetVarint32(&input, &tag)) { - switch (tag) { - case kComparator: - if (GetLengthPrefixedSlice(&input, &str)) { - comparator_ = str.ToString(); - has_comparator_ = true; - } else { - msg = "comparator name"; - } - break; - - case kLogNumber: - if (GetVarint64(&input, &log_number_)) { - has_log_number_ = true; - } else { - msg = "log number"; - } - break; - - case kPrevLogNumber: - if (GetVarint64(&input, &prev_log_number_)) { - has_prev_log_number_ = true; - } else { - msg = "previous log number"; - } - break; - - case kNextFileNumber: - if (GetVarint64(&input, &next_file_number_)) { - has_next_file_number_ = true; - } else { - msg = "next file number"; - } - break; - - case kLastSequence: - if (GetVarint64(&input, &last_sequence_)) { - has_last_sequence_ = true; - } else { - msg = "last sequence number"; - } - break; - - case kCompactPointer: - if (GetLevel(&input, &level) && GetInternalKey(&input, &key)) { - compact_pointers_.push_back(std::make_pair(level, key)); - } else { - msg = "compaction pointer"; - } - break; - - case kDeletedFile: - if (GetLevel(&input, &level) && GetVarint64(&input, &number)) { - deleted_files_.insert(std::make_pair(level, number)); - } else { - msg = "deleted file"; - } - break; - - case kNewFile: - if (GetLevel(&input, &level) && GetVarint64(&input, &f.number) && - GetVarint64(&input, &f.file_size) && - GetInternalKey(&input, &f.smallest) && - GetInternalKey(&input, &f.largest)) { - new_files_.push_back(std::make_pair(level, f)); - } else { - msg = "new-file entry"; - } - break; - - default: - msg = "unknown tag"; - break; - } - } - - if (msg == nullptr && !input.empty()) { - msg = "invalid tag"; - } - - Status result; - if (msg != nullptr) { - result = Status::Corruption("VersionEdit", msg); - } - return result; -} - -std::string VersionEdit::DebugString() const { - std::string r; - r.append("VersionEdit {"); - if (has_comparator_) { - r.append("\n Comparator: "); - r.append(comparator_); - } - if (has_log_number_) { - r.append("\n LogNumber: "); - AppendNumberTo(&r, log_number_); - } - if (has_prev_log_number_) { - r.append("\n PrevLogNumber: "); - AppendNumberTo(&r, prev_log_number_); - } - if (has_next_file_number_) { - r.append("\n NextFile: "); - AppendNumberTo(&r, next_file_number_); - } - if (has_last_sequence_) { - r.append("\n LastSeq: "); - AppendNumberTo(&r, last_sequence_); - } - for (size_t i = 0; i < compact_pointers_.size(); i++) { - r.append("\n CompactPointer: "); - AppendNumberTo(&r, compact_pointers_[i].first); - r.append(" "); - r.append(compact_pointers_[i].second.DebugString()); - } - for (DeletedFileSet::const_iterator iter = deleted_files_.begin(); - iter != deleted_files_.end(); ++iter) { - r.append("\n DeleteFile: "); - AppendNumberTo(&r, iter->first); - r.append(" "); - AppendNumberTo(&r, iter->second); - } - for (size_t i = 0; i < new_files_.size(); i++) { - const FileMetaData& f = new_files_[i].second; - r.append("\n AddFile: "); - AppendNumberTo(&r, new_files_[i].first); - r.append(" "); - AppendNumberTo(&r, f.number); - r.append(" "); - AppendNumberTo(&r, f.file_size); - r.append(" "); - r.append(f.smallest.DebugString()); - r.append(" .. "); - r.append(f.largest.DebugString()); - } - r.append("\n}\n"); - return r; -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/db/version_edit.h b/assign5/openTok/Pods/leveldb-library/db/version_edit.h deleted file mode 100644 index 2dadda7..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/version_edit.h +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_VERSION_EDIT_H_ -#define STORAGE_LEVELDB_DB_VERSION_EDIT_H_ - -#include <set> -#include <utility> -#include <vector> - -#include "db/dbformat.h" - -namespace leveldb { - -class VersionSet; - -struct FileMetaData { - FileMetaData() : refs(0), allowed_seeks(1 << 30), file_size(0) {} - - int refs; - int allowed_seeks; // Seeks allowed until compaction - uint64_t number; - uint64_t file_size; // File size in bytes - InternalKey smallest; // Smallest internal key served by table - InternalKey largest; // Largest internal key served by table -}; - -class VersionEdit { - public: - VersionEdit() { Clear(); } - ~VersionEdit() {} - - void Clear(); - - void SetComparatorName(const Slice& name) { - has_comparator_ = true; - comparator_ = name.ToString(); - } - void SetLogNumber(uint64_t num) { - has_log_number_ = true; - log_number_ = num; - } - void SetPrevLogNumber(uint64_t num) { - has_prev_log_number_ = true; - prev_log_number_ = num; - } - void SetNextFile(uint64_t num) { - has_next_file_number_ = true; - next_file_number_ = num; - } - void SetLastSequence(SequenceNumber seq) { - has_last_sequence_ = true; - last_sequence_ = seq; - } - void SetCompactPointer(int level, const InternalKey& key) { - compact_pointers_.push_back(std::make_pair(level, key)); - } - - // Add the specified file at the specified number. - // REQUIRES: This version has not been saved (see VersionSet::SaveTo) - // REQUIRES: "smallest" and "largest" are smallest and largest keys in file - void AddFile(int level, uint64_t file, uint64_t file_size, - const InternalKey& smallest, const InternalKey& largest) { - FileMetaData f; - f.number = file; - f.file_size = file_size; - f.smallest = smallest; - f.largest = largest; - new_files_.push_back(std::make_pair(level, f)); - } - - // Delete the specified "file" from the specified "level". - void DeleteFile(int level, uint64_t file) { - deleted_files_.insert(std::make_pair(level, file)); - } - - void EncodeTo(std::string* dst) const; - Status DecodeFrom(const Slice& src); - - std::string DebugString() const; - - private: - friend class VersionSet; - - typedef std::set<std::pair<int, uint64_t> > DeletedFileSet; - - std::string comparator_; - uint64_t log_number_; - uint64_t prev_log_number_; - uint64_t next_file_number_; - SequenceNumber last_sequence_; - bool has_comparator_; - bool has_log_number_; - bool has_prev_log_number_; - bool has_next_file_number_; - bool has_last_sequence_; - - std::vector<std::pair<int, InternalKey> > compact_pointers_; - DeletedFileSet deleted_files_; - std::vector<std::pair<int, FileMetaData> > new_files_; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_VERSION_EDIT_H_ diff --git a/assign5/openTok/Pods/leveldb-library/db/version_set.cc b/assign5/openTok/Pods/leveldb-library/db/version_set.cc deleted file mode 100644 index 96a92cc..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/version_set.cc +++ /dev/null @@ -1,1585 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/version_set.h" - -#include <stdio.h> - -#include <algorithm> - -#include "db/filename.h" -#include "db/log_reader.h" -#include "db/log_writer.h" -#include "db/memtable.h" -#include "db/table_cache.h" -#include "leveldb/env.h" -#include "leveldb/table_builder.h" -#include "table/merger.h" -#include "table/two_level_iterator.h" -#include "util/coding.h" -#include "util/logging.h" - -namespace leveldb { - -static size_t TargetFileSize(const Options* options) { - return options->max_file_size; -} - -// Maximum bytes of overlaps in grandparent (i.e., level+2) before we -// stop building a single file in a level->level+1 compaction. -static int64_t MaxGrandParentOverlapBytes(const Options* options) { - return 10 * TargetFileSize(options); -} - -// Maximum number of bytes in all compacted files. We avoid expanding -// the lower level file set of a compaction if it would make the -// total compaction cover more than this many bytes. -static int64_t ExpandedCompactionByteSizeLimit(const Options* options) { - return 25 * TargetFileSize(options); -} - -static double MaxBytesForLevel(const Options* options, int level) { - // Note: the result for level zero is not really used since we set - // the level-0 compaction threshold based on number of files. - - // Result for both level-0 and level-1 - double result = 10. * 1048576.0; - while (level > 1) { - result *= 10; - level--; - } - return result; -} - -static uint64_t MaxFileSizeForLevel(const Options* options, int level) { - // We could vary per level to reduce number of files? - return TargetFileSize(options); -} - -static int64_t TotalFileSize(const std::vector<FileMetaData*>& files) { - int64_t sum = 0; - for (size_t i = 0; i < files.size(); i++) { - sum += files[i]->file_size; - } - return sum; -} - -Version::~Version() { - assert(refs_ == 0); - - // Remove from linked list - prev_->next_ = next_; - next_->prev_ = prev_; - - // Drop references to files - for (int level = 0; level < config::kNumLevels; level++) { - for (size_t i = 0; i < files_[level].size(); i++) { - FileMetaData* f = files_[level][i]; - assert(f->refs > 0); - f->refs--; - if (f->refs <= 0) { - delete f; - } - } - } -} - -int FindFile(const InternalKeyComparator& icmp, - const std::vector<FileMetaData*>& files, const Slice& key) { - uint32_t left = 0; - uint32_t right = files.size(); - while (left < right) { - uint32_t mid = (left + right) / 2; - const FileMetaData* f = files[mid]; - if (icmp.InternalKeyComparator::Compare(f->largest.Encode(), key) < 0) { - // Key at "mid.largest" is < "target". Therefore all - // files at or before "mid" are uninteresting. - left = mid + 1; - } else { - // Key at "mid.largest" is >= "target". Therefore all files - // after "mid" are uninteresting. - right = mid; - } - } - return right; -} - -static bool AfterFile(const Comparator* ucmp, const Slice* user_key, - const FileMetaData* f) { - // null user_key occurs before all keys and is therefore never after *f - return (user_key != nullptr && - ucmp->Compare(*user_key, f->largest.user_key()) > 0); -} - -static bool BeforeFile(const Comparator* ucmp, const Slice* user_key, - const FileMetaData* f) { - // null user_key occurs after all keys and is therefore never before *f - return (user_key != nullptr && - ucmp->Compare(*user_key, f->smallest.user_key()) < 0); -} - -bool SomeFileOverlapsRange(const InternalKeyComparator& icmp, - bool disjoint_sorted_files, - const std::vector<FileMetaData*>& files, - const Slice* smallest_user_key, - const Slice* largest_user_key) { - const Comparator* ucmp = icmp.user_comparator(); - if (!disjoint_sorted_files) { - // Need to check against all files - for (size_t i = 0; i < files.size(); i++) { - const FileMetaData* f = files[i]; - if (AfterFile(ucmp, smallest_user_key, f) || - BeforeFile(ucmp, largest_user_key, f)) { - // No overlap - } else { - return true; // Overlap - } - } - return false; - } - - // Binary search over file list - uint32_t index = 0; - if (smallest_user_key != nullptr) { - // Find the earliest possible internal key for smallest_user_key - InternalKey small_key(*smallest_user_key, kMaxSequenceNumber, - kValueTypeForSeek); - index = FindFile(icmp, files, small_key.Encode()); - } - - if (index >= files.size()) { - // beginning of range is after all files, so no overlap. - return false; - } - - return !BeforeFile(ucmp, largest_user_key, files[index]); -} - -// An internal iterator. For a given version/level pair, yields -// information about the files in the level. For a given entry, key() -// is the largest key that occurs in the file, and value() is an -// 16-byte value containing the file number and file size, both -// encoded using EncodeFixed64. -class Version::LevelFileNumIterator : public Iterator { - public: - LevelFileNumIterator(const InternalKeyComparator& icmp, - const std::vector<FileMetaData*>* flist) - : icmp_(icmp), flist_(flist), index_(flist->size()) { // Marks as invalid - } - virtual bool Valid() const { return index_ < flist_->size(); } - virtual void Seek(const Slice& target) { - index_ = FindFile(icmp_, *flist_, target); - } - virtual void SeekToFirst() { index_ = 0; } - virtual void SeekToLast() { - index_ = flist_->empty() ? 0 : flist_->size() - 1; - } - virtual void Next() { - assert(Valid()); - index_++; - } - virtual void Prev() { - assert(Valid()); - if (index_ == 0) { - index_ = flist_->size(); // Marks as invalid - } else { - index_--; - } - } - Slice key() const { - assert(Valid()); - return (*flist_)[index_]->largest.Encode(); - } - Slice value() const { - assert(Valid()); - EncodeFixed64(value_buf_, (*flist_)[index_]->number); - EncodeFixed64(value_buf_ + 8, (*flist_)[index_]->file_size); - return Slice(value_buf_, sizeof(value_buf_)); - } - virtual Status status() const { return Status::OK(); } - - private: - const InternalKeyComparator icmp_; - const std::vector<FileMetaData*>* const flist_; - uint32_t index_; - - // Backing store for value(). Holds the file number and size. - mutable char value_buf_[16]; -}; - -static Iterator* GetFileIterator(void* arg, const ReadOptions& options, - const Slice& file_value) { - TableCache* cache = reinterpret_cast<TableCache*>(arg); - if (file_value.size() != 16) { - return NewErrorIterator( - Status::Corruption("FileReader invoked with unexpected value")); - } else { - return cache->NewIterator(options, DecodeFixed64(file_value.data()), - DecodeFixed64(file_value.data() + 8)); - } -} - -Iterator* Version::NewConcatenatingIterator(const ReadOptions& options, - int level) const { - return NewTwoLevelIterator( - new LevelFileNumIterator(vset_->icmp_, &files_[level]), &GetFileIterator, - vset_->table_cache_, options); -} - -void Version::AddIterators(const ReadOptions& options, - std::vector<Iterator*>* iters) { - // Merge all level zero files together since they may overlap - for (size_t i = 0; i < files_[0].size(); i++) { - iters->push_back(vset_->table_cache_->NewIterator( - options, files_[0][i]->number, files_[0][i]->file_size)); - } - - // For levels > 0, we can use a concatenating iterator that sequentially - // walks through the non-overlapping files in the level, opening them - // lazily. - for (int level = 1; level < config::kNumLevels; level++) { - if (!files_[level].empty()) { - iters->push_back(NewConcatenatingIterator(options, level)); - } - } -} - -// Callback from TableCache::Get() -namespace { -enum SaverState { - kNotFound, - kFound, - kDeleted, - kCorrupt, -}; -struct Saver { - SaverState state; - const Comparator* ucmp; - Slice user_key; - std::string* value; -}; -} // namespace -static void SaveValue(void* arg, const Slice& ikey, const Slice& v) { - Saver* s = reinterpret_cast<Saver*>(arg); - ParsedInternalKey parsed_key; - if (!ParseInternalKey(ikey, &parsed_key)) { - s->state = kCorrupt; - } else { - if (s->ucmp->Compare(parsed_key.user_key, s->user_key) == 0) { - s->state = (parsed_key.type == kTypeValue) ? kFound : kDeleted; - if (s->state == kFound) { - s->value->assign(v.data(), v.size()); - } - } - } -} - -static bool NewestFirst(FileMetaData* a, FileMetaData* b) { - return a->number > b->number; -} - -void Version::ForEachOverlapping(Slice user_key, Slice internal_key, void* arg, - bool (*func)(void*, int, FileMetaData*)) { - // TODO(sanjay): Change Version::Get() to use this function. - const Comparator* ucmp = vset_->icmp_.user_comparator(); - - // Search level-0 in order from newest to oldest. - std::vector<FileMetaData*> tmp; - tmp.reserve(files_[0].size()); - for (uint32_t i = 0; i < files_[0].size(); i++) { - FileMetaData* f = files_[0][i]; - if (ucmp->Compare(user_key, f->smallest.user_key()) >= 0 && - ucmp->Compare(user_key, f->largest.user_key()) <= 0) { - tmp.push_back(f); - } - } - if (!tmp.empty()) { - std::sort(tmp.begin(), tmp.end(), NewestFirst); - for (uint32_t i = 0; i < tmp.size(); i++) { - if (!(*func)(arg, 0, tmp[i])) { - return; - } - } - } - - // Search other levels. - for (int level = 1; level < config::kNumLevels; level++) { - size_t num_files = files_[level].size(); - if (num_files == 0) continue; - - // Binary search to find earliest index whose largest key >= internal_key. - uint32_t index = FindFile(vset_->icmp_, files_[level], internal_key); - if (index < num_files) { - FileMetaData* f = files_[level][index]; - if (ucmp->Compare(user_key, f->smallest.user_key()) < 0) { - // All of "f" is past any data for user_key - } else { - if (!(*func)(arg, level, f)) { - return; - } - } - } - } -} - -Status Version::Get(const ReadOptions& options, const LookupKey& k, - std::string* value, GetStats* stats) { - Slice ikey = k.internal_key(); - Slice user_key = k.user_key(); - const Comparator* ucmp = vset_->icmp_.user_comparator(); - Status s; - - stats->seek_file = nullptr; - stats->seek_file_level = -1; - FileMetaData* last_file_read = nullptr; - int last_file_read_level = -1; - - // We can search level-by-level since entries never hop across - // levels. Therefore we are guaranteed that if we find data - // in a smaller level, later levels are irrelevant. - std::vector<FileMetaData*> tmp; - FileMetaData* tmp2; - for (int level = 0; level < config::kNumLevels; level++) { - size_t num_files = files_[level].size(); - if (num_files == 0) continue; - - // Get the list of files to search in this level - FileMetaData* const* files = &files_[level][0]; - if (level == 0) { - // Level-0 files may overlap each other. Find all files that - // overlap user_key and process them in order from newest to oldest. - tmp.reserve(num_files); - for (uint32_t i = 0; i < num_files; i++) { - FileMetaData* f = files[i]; - if (ucmp->Compare(user_key, f->smallest.user_key()) >= 0 && - ucmp->Compare(user_key, f->largest.user_key()) <= 0) { - tmp.push_back(f); - } - } - if (tmp.empty()) continue; - - std::sort(tmp.begin(), tmp.end(), NewestFirst); - files = &tmp[0]; - num_files = tmp.size(); - } else { - // Binary search to find earliest index whose largest key >= ikey. - uint32_t index = FindFile(vset_->icmp_, files_[level], ikey); - if (index >= num_files) { - files = nullptr; - num_files = 0; - } else { - tmp2 = files[index]; - if (ucmp->Compare(user_key, tmp2->smallest.user_key()) < 0) { - // All of "tmp2" is past any data for user_key - files = nullptr; - num_files = 0; - } else { - files = &tmp2; - num_files = 1; - } - } - } - - for (uint32_t i = 0; i < num_files; ++i) { - if (last_file_read != nullptr && stats->seek_file == nullptr) { - // We have had more than one seek for this read. Charge the 1st file. - stats->seek_file = last_file_read; - stats->seek_file_level = last_file_read_level; - } - - FileMetaData* f = files[i]; - last_file_read = f; - last_file_read_level = level; - - Saver saver; - saver.state = kNotFound; - saver.ucmp = ucmp; - saver.user_key = user_key; - saver.value = value; - s = vset_->table_cache_->Get(options, f->number, f->file_size, ikey, - &saver, SaveValue); - if (!s.ok()) { - return s; - } - switch (saver.state) { - case kNotFound: - break; // Keep searching in other files - case kFound: - return s; - case kDeleted: - s = Status::NotFound(Slice()); // Use empty error message for speed - return s; - case kCorrupt: - s = Status::Corruption("corrupted key for ", user_key); - return s; - } - } - } - - return Status::NotFound(Slice()); // Use an empty error message for speed -} - -bool Version::UpdateStats(const GetStats& stats) { - FileMetaData* f = stats.seek_file; - if (f != nullptr) { - f->allowed_seeks--; - if (f->allowed_seeks <= 0 && file_to_compact_ == nullptr) { - file_to_compact_ = f; - file_to_compact_level_ = stats.seek_file_level; - return true; - } - } - return false; -} - -bool Version::RecordReadSample(Slice internal_key) { - ParsedInternalKey ikey; - if (!ParseInternalKey(internal_key, &ikey)) { - return false; - } - - struct State { - GetStats stats; // Holds first matching file - int matches; - - static bool Match(void* arg, int level, FileMetaData* f) { - State* state = reinterpret_cast<State*>(arg); - state->matches++; - if (state->matches == 1) { - // Remember first match. - state->stats.seek_file = f; - state->stats.seek_file_level = level; - } - // We can stop iterating once we have a second match. - return state->matches < 2; - } - }; - - State state; - state.matches = 0; - ForEachOverlapping(ikey.user_key, internal_key, &state, &State::Match); - - // Must have at least two matches since we want to merge across - // files. But what if we have a single file that contains many - // overwrites and deletions? Should we have another mechanism for - // finding such files? - if (state.matches >= 2) { - // 1MB cost is about 1 seek (see comment in Builder::Apply). - return UpdateStats(state.stats); - } - return false; -} - -void Version::Ref() { ++refs_; } - -void Version::Unref() { - assert(this != &vset_->dummy_versions_); - assert(refs_ >= 1); - --refs_; - if (refs_ == 0) { - delete this; - } -} - -bool Version::OverlapInLevel(int level, const Slice* smallest_user_key, - const Slice* largest_user_key) { - return SomeFileOverlapsRange(vset_->icmp_, (level > 0), files_[level], - smallest_user_key, largest_user_key); -} - -int Version::PickLevelForMemTableOutput(const Slice& smallest_user_key, - const Slice& largest_user_key) { - int level = 0; - if (!OverlapInLevel(0, &smallest_user_key, &largest_user_key)) { - // Push to next level if there is no overlap in next level, - // and the #bytes overlapping in the level after that are limited. - InternalKey start(smallest_user_key, kMaxSequenceNumber, kValueTypeForSeek); - InternalKey limit(largest_user_key, 0, static_cast<ValueType>(0)); - std::vector<FileMetaData*> overlaps; - while (level < config::kMaxMemCompactLevel) { - if (OverlapInLevel(level + 1, &smallest_user_key, &largest_user_key)) { - break; - } - if (level + 2 < config::kNumLevels) { - // Check that file does not overlap too many grandparent bytes. - GetOverlappingInputs(level + 2, &start, &limit, &overlaps); - const int64_t sum = TotalFileSize(overlaps); - if (sum > MaxGrandParentOverlapBytes(vset_->options_)) { - break; - } - } - level++; - } - } - return level; -} - -// Store in "*inputs" all files in "level" that overlap [begin,end] -void Version::GetOverlappingInputs(int level, const InternalKey* begin, - const InternalKey* end, - std::vector<FileMetaData*>* inputs) { - assert(level >= 0); - assert(level < config::kNumLevels); - inputs->clear(); - Slice user_begin, user_end; - if (begin != nullptr) { - user_begin = begin->user_key(); - } - if (end != nullptr) { - user_end = end->user_key(); - } - const Comparator* user_cmp = vset_->icmp_.user_comparator(); - for (size_t i = 0; i < files_[level].size();) { - FileMetaData* f = files_[level][i++]; - const Slice file_start = f->smallest.user_key(); - const Slice file_limit = f->largest.user_key(); - if (begin != nullptr && user_cmp->Compare(file_limit, user_begin) < 0) { - // "f" is completely before specified range; skip it - } else if (end != nullptr && user_cmp->Compare(file_start, user_end) > 0) { - // "f" is completely after specified range; skip it - } else { - inputs->push_back(f); - if (level == 0) { - // Level-0 files may overlap each other. So check if the newly - // added file has expanded the range. If so, restart search. - if (begin != nullptr && user_cmp->Compare(file_start, user_begin) < 0) { - user_begin = file_start; - inputs->clear(); - i = 0; - } else if (end != nullptr && - user_cmp->Compare(file_limit, user_end) > 0) { - user_end = file_limit; - inputs->clear(); - i = 0; - } - } - } - } -} - -std::string Version::DebugString() const { - std::string r; - for (int level = 0; level < config::kNumLevels; level++) { - // E.g., - // --- level 1 --- - // 17:123['a' .. 'd'] - // 20:43['e' .. 'g'] - r.append("--- level "); - AppendNumberTo(&r, level); - r.append(" ---\n"); - const std::vector<FileMetaData*>& files = files_[level]; - for (size_t i = 0; i < files.size(); i++) { - r.push_back(' '); - AppendNumberTo(&r, files[i]->number); - r.push_back(':'); - AppendNumberTo(&r, files[i]->file_size); - r.append("["); - r.append(files[i]->smallest.DebugString()); - r.append(" .. "); - r.append(files[i]->largest.DebugString()); - r.append("]\n"); - } - } - return r; -} - -// A helper class so we can efficiently apply a whole sequence -// of edits to a particular state without creating intermediate -// Versions that contain full copies of the intermediate state. -class VersionSet::Builder { - private: - // Helper to sort by v->files_[file_number].smallest - struct BySmallestKey { - const InternalKeyComparator* internal_comparator; - - bool operator()(FileMetaData* f1, FileMetaData* f2) const { - int r = internal_comparator->Compare(f1->smallest, f2->smallest); - if (r != 0) { - return (r < 0); - } else { - // Break ties by file number - return (f1->number < f2->number); - } - } - }; - - typedef std::set<FileMetaData*, BySmallestKey> FileSet; - struct LevelState { - std::set<uint64_t> deleted_files; - FileSet* added_files; - }; - - VersionSet* vset_; - Version* base_; - LevelState levels_[config::kNumLevels]; - - public: - // Initialize a builder with the files from *base and other info from *vset - Builder(VersionSet* vset, Version* base) : vset_(vset), base_(base) { - base_->Ref(); - BySmallestKey cmp; - cmp.internal_comparator = &vset_->icmp_; - for (int level = 0; level < config::kNumLevels; level++) { - levels_[level].added_files = new FileSet(cmp); - } - } - - ~Builder() { - for (int level = 0; level < config::kNumLevels; level++) { - const FileSet* added = levels_[level].added_files; - std::vector<FileMetaData*> to_unref; - to_unref.reserve(added->size()); - for (FileSet::const_iterator it = added->begin(); it != added->end(); - ++it) { - to_unref.push_back(*it); - } - delete added; - for (uint32_t i = 0; i < to_unref.size(); i++) { - FileMetaData* f = to_unref[i]; - f->refs--; - if (f->refs <= 0) { - delete f; - } - } - } - base_->Unref(); - } - - // Apply all of the edits in *edit to the current state. - void Apply(VersionEdit* edit) { - // Update compaction pointers - for (size_t i = 0; i < edit->compact_pointers_.size(); i++) { - const int level = edit->compact_pointers_[i].first; - vset_->compact_pointer_[level] = - edit->compact_pointers_[i].second.Encode().ToString(); - } - - // Delete files - const VersionEdit::DeletedFileSet& del = edit->deleted_files_; - for (VersionEdit::DeletedFileSet::const_iterator iter = del.begin(); - iter != del.end(); ++iter) { - const int level = iter->first; - const uint64_t number = iter->second; - levels_[level].deleted_files.insert(number); - } - - // Add new files - for (size_t i = 0; i < edit->new_files_.size(); i++) { - const int level = edit->new_files_[i].first; - FileMetaData* f = new FileMetaData(edit->new_files_[i].second); - f->refs = 1; - - // We arrange to automatically compact this file after - // a certain number of seeks. Let's assume: - // (1) One seek costs 10ms - // (2) Writing or reading 1MB costs 10ms (100MB/s) - // (3) A compaction of 1MB does 25MB of IO: - // 1MB read from this level - // 10-12MB read from next level (boundaries may be misaligned) - // 10-12MB written to next level - // This implies that 25 seeks cost the same as the compaction - // of 1MB of data. I.e., one seek costs approximately the - // same as the compaction of 40KB of data. We are a little - // conservative and allow approximately one seek for every 16KB - // of data before triggering a compaction. - f->allowed_seeks = static_cast<int>((f->file_size / 16384U)); - if (f->allowed_seeks < 100) f->allowed_seeks = 100; - - levels_[level].deleted_files.erase(f->number); - levels_[level].added_files->insert(f); - } - } - - // Save the current state in *v. - void SaveTo(Version* v) { - BySmallestKey cmp; - cmp.internal_comparator = &vset_->icmp_; - for (int level = 0; level < config::kNumLevels; level++) { - // Merge the set of added files with the set of pre-existing files. - // Drop any deleted files. Store the result in *v. - const std::vector<FileMetaData*>& base_files = base_->files_[level]; - std::vector<FileMetaData*>::const_iterator base_iter = base_files.begin(); - std::vector<FileMetaData*>::const_iterator base_end = base_files.end(); - const FileSet* added = levels_[level].added_files; - v->files_[level].reserve(base_files.size() + added->size()); - for (FileSet::const_iterator added_iter = added->begin(); - added_iter != added->end(); ++added_iter) { - // Add all smaller files listed in base_ - for (std::vector<FileMetaData*>::const_iterator bpos = - std::upper_bound(base_iter, base_end, *added_iter, cmp); - base_iter != bpos; ++base_iter) { - MaybeAddFile(v, level, *base_iter); - } - - MaybeAddFile(v, level, *added_iter); - } - - // Add remaining base files - for (; base_iter != base_end; ++base_iter) { - MaybeAddFile(v, level, *base_iter); - } - -#ifndef NDEBUG - // Make sure there is no overlap in levels > 0 - if (level > 0) { - for (uint32_t i = 1; i < v->files_[level].size(); i++) { - const InternalKey& prev_end = v->files_[level][i - 1]->largest; - const InternalKey& this_begin = v->files_[level][i]->smallest; - if (vset_->icmp_.Compare(prev_end, this_begin) >= 0) { - fprintf(stderr, "overlapping ranges in same level %s vs. %s\n", - prev_end.DebugString().c_str(), - this_begin.DebugString().c_str()); - abort(); - } - } - } -#endif - } - } - - void MaybeAddFile(Version* v, int level, FileMetaData* f) { - if (levels_[level].deleted_files.count(f->number) > 0) { - // File is deleted: do nothing - } else { - std::vector<FileMetaData*>* files = &v->files_[level]; - if (level > 0 && !files->empty()) { - // Must not overlap - assert(vset_->icmp_.Compare((*files)[files->size() - 1]->largest, - f->smallest) < 0); - } - f->refs++; - files->push_back(f); - } - } -}; - -VersionSet::VersionSet(const std::string& dbname, const Options* options, - TableCache* table_cache, - const InternalKeyComparator* cmp) - : env_(options->env), - dbname_(dbname), - options_(options), - table_cache_(table_cache), - icmp_(*cmp), - next_file_number_(2), - manifest_file_number_(0), // Filled by Recover() - last_sequence_(0), - log_number_(0), - prev_log_number_(0), - descriptor_file_(nullptr), - descriptor_log_(nullptr), - dummy_versions_(this), - current_(nullptr) { - AppendVersion(new Version(this)); -} - -VersionSet::~VersionSet() { - current_->Unref(); - assert(dummy_versions_.next_ == &dummy_versions_); // List must be empty - delete descriptor_log_; - delete descriptor_file_; -} - -void VersionSet::AppendVersion(Version* v) { - // Make "v" current - assert(v->refs_ == 0); - assert(v != current_); - if (current_ != nullptr) { - current_->Unref(); - } - current_ = v; - v->Ref(); - - // Append to linked list - v->prev_ = dummy_versions_.prev_; - v->next_ = &dummy_versions_; - v->prev_->next_ = v; - v->next_->prev_ = v; -} - -Status VersionSet::LogAndApply(VersionEdit* edit, port::Mutex* mu) { - if (edit->has_log_number_) { - assert(edit->log_number_ >= log_number_); - assert(edit->log_number_ < next_file_number_); - } else { - edit->SetLogNumber(log_number_); - } - - if (!edit->has_prev_log_number_) { - edit->SetPrevLogNumber(prev_log_number_); - } - - edit->SetNextFile(next_file_number_); - edit->SetLastSequence(last_sequence_); - - Version* v = new Version(this); - { - Builder builder(this, current_); - builder.Apply(edit); - builder.SaveTo(v); - } - Finalize(v); - - // Initialize new descriptor log file if necessary by creating - // a temporary file that contains a snapshot of the current version. - std::string new_manifest_file; - Status s; - if (descriptor_log_ == nullptr) { - // No reason to unlock *mu here since we only hit this path in the - // first call to LogAndApply (when opening the database). - assert(descriptor_file_ == nullptr); - new_manifest_file = DescriptorFileName(dbname_, manifest_file_number_); - edit->SetNextFile(next_file_number_); - s = env_->NewWritableFile(new_manifest_file, &descriptor_file_); - if (s.ok()) { - descriptor_log_ = new log::Writer(descriptor_file_); - s = WriteSnapshot(descriptor_log_); - } - } - - // Unlock during expensive MANIFEST log write - { - mu->Unlock(); - - // Write new record to MANIFEST log - if (s.ok()) { - std::string record; - edit->EncodeTo(&record); - s = descriptor_log_->AddRecord(record); - if (s.ok()) { - s = descriptor_file_->Sync(); - } - if (!s.ok()) { - Log(options_->info_log, "MANIFEST write: %s\n", s.ToString().c_str()); - } - } - - // If we just created a new descriptor file, install it by writing a - // new CURRENT file that points to it. - if (s.ok() && !new_manifest_file.empty()) { - s = SetCurrentFile(env_, dbname_, manifest_file_number_); - } - - mu->Lock(); - } - - // Install the new version - if (s.ok()) { - AppendVersion(v); - log_number_ = edit->log_number_; - prev_log_number_ = edit->prev_log_number_; - } else { - delete v; - if (!new_manifest_file.empty()) { - delete descriptor_log_; - delete descriptor_file_; - descriptor_log_ = nullptr; - descriptor_file_ = nullptr; - env_->DeleteFile(new_manifest_file); - } - } - - return s; -} - -Status VersionSet::Recover(bool* save_manifest) { - struct LogReporter : public log::Reader::Reporter { - Status* status; - virtual void Corruption(size_t bytes, const Status& s) { - if (this->status->ok()) *this->status = s; - } - }; - - // Read "CURRENT" file, which contains a pointer to the current manifest file - std::string current; - Status s = ReadFileToString(env_, CurrentFileName(dbname_), ¤t); - if (!s.ok()) { - return s; - } - if (current.empty() || current[current.size() - 1] != '\n') { - return Status::Corruption("CURRENT file does not end with newline"); - } - current.resize(current.size() - 1); - - std::string dscname = dbname_ + "/" + current; - SequentialFile* file; - s = env_->NewSequentialFile(dscname, &file); - if (!s.ok()) { - if (s.IsNotFound()) { - return Status::Corruption("CURRENT points to a non-existent file", - s.ToString()); - } - return s; - } - - bool have_log_number = false; - bool have_prev_log_number = false; - bool have_next_file = false; - bool have_last_sequence = false; - uint64_t next_file = 0; - uint64_t last_sequence = 0; - uint64_t log_number = 0; - uint64_t prev_log_number = 0; - Builder builder(this, current_); - - { - LogReporter reporter; - reporter.status = &s; - log::Reader reader(file, &reporter, true /*checksum*/, - 0 /*initial_offset*/); - Slice record; - std::string scratch; - while (reader.ReadRecord(&record, &scratch) && s.ok()) { - VersionEdit edit; - s = edit.DecodeFrom(record); - if (s.ok()) { - if (edit.has_comparator_ && - edit.comparator_ != icmp_.user_comparator()->Name()) { - s = Status::InvalidArgument( - edit.comparator_ + " does not match existing comparator ", - icmp_.user_comparator()->Name()); - } - } - - if (s.ok()) { - builder.Apply(&edit); - } - - if (edit.has_log_number_) { - log_number = edit.log_number_; - have_log_number = true; - } - - if (edit.has_prev_log_number_) { - prev_log_number = edit.prev_log_number_; - have_prev_log_number = true; - } - - if (edit.has_next_file_number_) { - next_file = edit.next_file_number_; - have_next_file = true; - } - - if (edit.has_last_sequence_) { - last_sequence = edit.last_sequence_; - have_last_sequence = true; - } - } - } - delete file; - file = nullptr; - - if (s.ok()) { - if (!have_next_file) { - s = Status::Corruption("no meta-nextfile entry in descriptor"); - } else if (!have_log_number) { - s = Status::Corruption("no meta-lognumber entry in descriptor"); - } else if (!have_last_sequence) { - s = Status::Corruption("no last-sequence-number entry in descriptor"); - } - - if (!have_prev_log_number) { - prev_log_number = 0; - } - - MarkFileNumberUsed(prev_log_number); - MarkFileNumberUsed(log_number); - } - - if (s.ok()) { - Version* v = new Version(this); - builder.SaveTo(v); - // Install recovered version - Finalize(v); - AppendVersion(v); - manifest_file_number_ = next_file; - next_file_number_ = next_file + 1; - last_sequence_ = last_sequence; - log_number_ = log_number; - prev_log_number_ = prev_log_number; - - // See if we can reuse the existing MANIFEST file. - if (ReuseManifest(dscname, current)) { - // No need to save new manifest - } else { - *save_manifest = true; - } - } - - return s; -} - -bool VersionSet::ReuseManifest(const std::string& dscname, - const std::string& dscbase) { - if (!options_->reuse_logs) { - return false; - } - FileType manifest_type; - uint64_t manifest_number; - uint64_t manifest_size; - if (!ParseFileName(dscbase, &manifest_number, &manifest_type) || - manifest_type != kDescriptorFile || - !env_->GetFileSize(dscname, &manifest_size).ok() || - // Make new compacted MANIFEST if old one is too big - manifest_size >= TargetFileSize(options_)) { - return false; - } - - assert(descriptor_file_ == nullptr); - assert(descriptor_log_ == nullptr); - Status r = env_->NewAppendableFile(dscname, &descriptor_file_); - if (!r.ok()) { - Log(options_->info_log, "Reuse MANIFEST: %s\n", r.ToString().c_str()); - assert(descriptor_file_ == nullptr); - return false; - } - - Log(options_->info_log, "Reusing MANIFEST %s\n", dscname.c_str()); - descriptor_log_ = new log::Writer(descriptor_file_, manifest_size); - manifest_file_number_ = manifest_number; - return true; -} - -void VersionSet::MarkFileNumberUsed(uint64_t number) { - if (next_file_number_ <= number) { - next_file_number_ = number + 1; - } -} - -void VersionSet::Finalize(Version* v) { - // Precomputed best level for next compaction - int best_level = -1; - double best_score = -1; - - for (int level = 0; level < config::kNumLevels - 1; level++) { - double score; - if (level == 0) { - // We treat level-0 specially by bounding the number of files - // instead of number of bytes for two reasons: - // - // (1) With larger write-buffer sizes, it is nice not to do too - // many level-0 compactions. - // - // (2) The files in level-0 are merged on every read and - // therefore we wish to avoid too many files when the individual - // file size is small (perhaps because of a small write-buffer - // setting, or very high compression ratios, or lots of - // overwrites/deletions). - score = v->files_[level].size() / - static_cast<double>(config::kL0_CompactionTrigger); - } else { - // Compute the ratio of current size to size limit. - const uint64_t level_bytes = TotalFileSize(v->files_[level]); - score = - static_cast<double>(level_bytes) / MaxBytesForLevel(options_, level); - } - - if (score > best_score) { - best_level = level; - best_score = score; - } - } - - v->compaction_level_ = best_level; - v->compaction_score_ = best_score; -} - -Status VersionSet::WriteSnapshot(log::Writer* log) { - // TODO: Break up into multiple records to reduce memory usage on recovery? - - // Save metadata - VersionEdit edit; - edit.SetComparatorName(icmp_.user_comparator()->Name()); - - // Save compaction pointers - for (int level = 0; level < config::kNumLevels; level++) { - if (!compact_pointer_[level].empty()) { - InternalKey key; - key.DecodeFrom(compact_pointer_[level]); - edit.SetCompactPointer(level, key); - } - } - - // Save files - for (int level = 0; level < config::kNumLevels; level++) { - const std::vector<FileMetaData*>& files = current_->files_[level]; - for (size_t i = 0; i < files.size(); i++) { - const FileMetaData* f = files[i]; - edit.AddFile(level, f->number, f->file_size, f->smallest, f->largest); - } - } - - std::string record; - edit.EncodeTo(&record); - return log->AddRecord(record); -} - -int VersionSet::NumLevelFiles(int level) const { - assert(level >= 0); - assert(level < config::kNumLevels); - return current_->files_[level].size(); -} - -const char* VersionSet::LevelSummary(LevelSummaryStorage* scratch) const { - // Update code if kNumLevels changes - static_assert(config::kNumLevels == 7, ""); - snprintf(scratch->buffer, sizeof(scratch->buffer), - "files[ %d %d %d %d %d %d %d ]", int(current_->files_[0].size()), - int(current_->files_[1].size()), int(current_->files_[2].size()), - int(current_->files_[3].size()), int(current_->files_[4].size()), - int(current_->files_[5].size()), int(current_->files_[6].size())); - return scratch->buffer; -} - -uint64_t VersionSet::ApproximateOffsetOf(Version* v, const InternalKey& ikey) { - uint64_t result = 0; - for (int level = 0; level < config::kNumLevels; level++) { - const std::vector<FileMetaData*>& files = v->files_[level]; - for (size_t i = 0; i < files.size(); i++) { - if (icmp_.Compare(files[i]->largest, ikey) <= 0) { - // Entire file is before "ikey", so just add the file size - result += files[i]->file_size; - } else if (icmp_.Compare(files[i]->smallest, ikey) > 0) { - // Entire file is after "ikey", so ignore - if (level > 0) { - // Files other than level 0 are sorted by meta->smallest, so - // no further files in this level will contain data for - // "ikey". - break; - } - } else { - // "ikey" falls in the range for this table. Add the - // approximate offset of "ikey" within the table. - Table* tableptr; - Iterator* iter = table_cache_->NewIterator( - ReadOptions(), files[i]->number, files[i]->file_size, &tableptr); - if (tableptr != nullptr) { - result += tableptr->ApproximateOffsetOf(ikey.Encode()); - } - delete iter; - } - } - } - return result; -} - -void VersionSet::AddLiveFiles(std::set<uint64_t>* live) { - for (Version* v = dummy_versions_.next_; v != &dummy_versions_; - v = v->next_) { - for (int level = 0; level < config::kNumLevels; level++) { - const std::vector<FileMetaData*>& files = v->files_[level]; - for (size_t i = 0; i < files.size(); i++) { - live->insert(files[i]->number); - } - } - } -} - -int64_t VersionSet::NumLevelBytes(int level) const { - assert(level >= 0); - assert(level < config::kNumLevels); - return TotalFileSize(current_->files_[level]); -} - -int64_t VersionSet::MaxNextLevelOverlappingBytes() { - int64_t result = 0; - std::vector<FileMetaData*> overlaps; - for (int level = 1; level < config::kNumLevels - 1; level++) { - for (size_t i = 0; i < current_->files_[level].size(); i++) { - const FileMetaData* f = current_->files_[level][i]; - current_->GetOverlappingInputs(level + 1, &f->smallest, &f->largest, - &overlaps); - const int64_t sum = TotalFileSize(overlaps); - if (sum > result) { - result = sum; - } - } - } - return result; -} - -// Stores the minimal range that covers all entries in inputs in -// *smallest, *largest. -// REQUIRES: inputs is not empty -void VersionSet::GetRange(const std::vector<FileMetaData*>& inputs, - InternalKey* smallest, InternalKey* largest) { - assert(!inputs.empty()); - smallest->Clear(); - largest->Clear(); - for (size_t i = 0; i < inputs.size(); i++) { - FileMetaData* f = inputs[i]; - if (i == 0) { - *smallest = f->smallest; - *largest = f->largest; - } else { - if (icmp_.Compare(f->smallest, *smallest) < 0) { - *smallest = f->smallest; - } - if (icmp_.Compare(f->largest, *largest) > 0) { - *largest = f->largest; - } - } - } -} - -// Stores the minimal range that covers all entries in inputs1 and inputs2 -// in *smallest, *largest. -// REQUIRES: inputs is not empty -void VersionSet::GetRange2(const std::vector<FileMetaData*>& inputs1, - const std::vector<FileMetaData*>& inputs2, - InternalKey* smallest, InternalKey* largest) { - std::vector<FileMetaData*> all = inputs1; - all.insert(all.end(), inputs2.begin(), inputs2.end()); - GetRange(all, smallest, largest); -} - -Iterator* VersionSet::MakeInputIterator(Compaction* c) { - ReadOptions options; - options.verify_checksums = options_->paranoid_checks; - options.fill_cache = false; - - // Level-0 files have to be merged together. For other levels, - // we will make a concatenating iterator per level. - // TODO(opt): use concatenating iterator for level-0 if there is no overlap - const int space = (c->level() == 0 ? c->inputs_[0].size() + 1 : 2); - Iterator** list = new Iterator*[space]; - int num = 0; - for (int which = 0; which < 2; which++) { - if (!c->inputs_[which].empty()) { - if (c->level() + which == 0) { - const std::vector<FileMetaData*>& files = c->inputs_[which]; - for (size_t i = 0; i < files.size(); i++) { - list[num++] = table_cache_->NewIterator(options, files[i]->number, - files[i]->file_size); - } - } else { - // Create concatenating iterator for the files from this level - list[num++] = NewTwoLevelIterator( - new Version::LevelFileNumIterator(icmp_, &c->inputs_[which]), - &GetFileIterator, table_cache_, options); - } - } - } - assert(num <= space); - Iterator* result = NewMergingIterator(&icmp_, list, num); - delete[] list; - return result; -} - -Compaction* VersionSet::PickCompaction() { - Compaction* c; - int level; - - // We prefer compactions triggered by too much data in a level over - // the compactions triggered by seeks. - const bool size_compaction = (current_->compaction_score_ >= 1); - const bool seek_compaction = (current_->file_to_compact_ != nullptr); - if (size_compaction) { - level = current_->compaction_level_; - assert(level >= 0); - assert(level + 1 < config::kNumLevels); - c = new Compaction(options_, level); - - // Pick the first file that comes after compact_pointer_[level] - for (size_t i = 0; i < current_->files_[level].size(); i++) { - FileMetaData* f = current_->files_[level][i]; - if (compact_pointer_[level].empty() || - icmp_.Compare(f->largest.Encode(), compact_pointer_[level]) > 0) { - c->inputs_[0].push_back(f); - break; - } - } - if (c->inputs_[0].empty()) { - // Wrap-around to the beginning of the key space - c->inputs_[0].push_back(current_->files_[level][0]); - } - } else if (seek_compaction) { - level = current_->file_to_compact_level_; - c = new Compaction(options_, level); - c->inputs_[0].push_back(current_->file_to_compact_); - } else { - return nullptr; - } - - c->input_version_ = current_; - c->input_version_->Ref(); - - // Files in level 0 may overlap each other, so pick up all overlapping ones - if (level == 0) { - InternalKey smallest, largest; - GetRange(c->inputs_[0], &smallest, &largest); - // Note that the next call will discard the file we placed in - // c->inputs_[0] earlier and replace it with an overlapping set - // which will include the picked file. - current_->GetOverlappingInputs(0, &smallest, &largest, &c->inputs_[0]); - assert(!c->inputs_[0].empty()); - } - - SetupOtherInputs(c); - - return c; -} - -// Finds the largest key in a vector of files. Returns true if files it not -// empty. -bool FindLargestKey(const InternalKeyComparator& icmp, - const std::vector<FileMetaData*>& files, - InternalKey* largest_key) { - if (files.empty()) { - return false; - } - *largest_key = files[0]->largest; - for (size_t i = 1; i < files.size(); ++i) { - FileMetaData* f = files[i]; - if (icmp.Compare(f->largest, *largest_key) > 0) { - *largest_key = f->largest; - } - } - return true; -} - -// Finds minimum file b2=(l2, u2) in level file for which l2 > u1 and -// user_key(l2) = user_key(u1) -FileMetaData* FindSmallestBoundaryFile( - const InternalKeyComparator& icmp, - const std::vector<FileMetaData*>& level_files, - const InternalKey& largest_key) { - const Comparator* user_cmp = icmp.user_comparator(); - FileMetaData* smallest_boundary_file = nullptr; - for (size_t i = 0; i < level_files.size(); ++i) { - FileMetaData* f = level_files[i]; - if (icmp.Compare(f->smallest, largest_key) > 0 && - user_cmp->Compare(f->smallest.user_key(), largest_key.user_key()) == - 0) { - if (smallest_boundary_file == nullptr || - icmp.Compare(f->smallest, smallest_boundary_file->smallest) < 0) { - smallest_boundary_file = f; - } - } - } - return smallest_boundary_file; -} - -// Extracts the largest file b1 from |compaction_files| and then searches for a -// b2 in |level_files| for which user_key(u1) = user_key(l2). If it finds such a -// file b2 (known as a boundary file) it adds it to |compaction_files| and then -// searches again using this new upper bound. -// -// If there are two blocks, b1=(l1, u1) and b2=(l2, u2) and -// user_key(u1) = user_key(l2), and if we compact b1 but not b2 then a -// subsequent get operation will yield an incorrect result because it will -// return the record from b2 in level i rather than from b1 because it searches -// level by level for records matching the supplied user key. -// -// parameters: -// in level_files: List of files to search for boundary files. -// in/out compaction_files: List of files to extend by adding boundary files. -void AddBoundaryInputs(const InternalKeyComparator& icmp, - const std::vector<FileMetaData*>& level_files, - std::vector<FileMetaData*>* compaction_files) { - InternalKey largest_key; - - // Quick return if compaction_files is empty. - if (!FindLargestKey(icmp, *compaction_files, &largest_key)) { - return; - } - - bool continue_searching = true; - while (continue_searching) { - FileMetaData* smallest_boundary_file = - FindSmallestBoundaryFile(icmp, level_files, largest_key); - - // If a boundary file was found advance largest_key, otherwise we're done. - if (smallest_boundary_file != NULL) { - compaction_files->push_back(smallest_boundary_file); - largest_key = smallest_boundary_file->largest; - } else { - continue_searching = false; - } - } -} - -void VersionSet::SetupOtherInputs(Compaction* c) { - const int level = c->level(); - InternalKey smallest, largest; - - AddBoundaryInputs(icmp_, current_->files_[level], &c->inputs_[0]); - GetRange(c->inputs_[0], &smallest, &largest); - - current_->GetOverlappingInputs(level + 1, &smallest, &largest, - &c->inputs_[1]); - - // Get entire range covered by compaction - InternalKey all_start, all_limit; - GetRange2(c->inputs_[0], c->inputs_[1], &all_start, &all_limit); - - // See if we can grow the number of inputs in "level" without - // changing the number of "level+1" files we pick up. - if (!c->inputs_[1].empty()) { - std::vector<FileMetaData*> expanded0; - current_->GetOverlappingInputs(level, &all_start, &all_limit, &expanded0); - AddBoundaryInputs(icmp_, current_->files_[level], &expanded0); - const int64_t inputs0_size = TotalFileSize(c->inputs_[0]); - const int64_t inputs1_size = TotalFileSize(c->inputs_[1]); - const int64_t expanded0_size = TotalFileSize(expanded0); - if (expanded0.size() > c->inputs_[0].size() && - inputs1_size + expanded0_size < - ExpandedCompactionByteSizeLimit(options_)) { - InternalKey new_start, new_limit; - GetRange(expanded0, &new_start, &new_limit); - std::vector<FileMetaData*> expanded1; - current_->GetOverlappingInputs(level + 1, &new_start, &new_limit, - &expanded1); - if (expanded1.size() == c->inputs_[1].size()) { - Log(options_->info_log, - "Expanding@%d %d+%d (%ld+%ld bytes) to %d+%d (%ld+%ld bytes)\n", - level, int(c->inputs_[0].size()), int(c->inputs_[1].size()), - long(inputs0_size), long(inputs1_size), int(expanded0.size()), - int(expanded1.size()), long(expanded0_size), long(inputs1_size)); - smallest = new_start; - largest = new_limit; - c->inputs_[0] = expanded0; - c->inputs_[1] = expanded1; - GetRange2(c->inputs_[0], c->inputs_[1], &all_start, &all_limit); - } - } - } - - // Compute the set of grandparent files that overlap this compaction - // (parent == level+1; grandparent == level+2) - if (level + 2 < config::kNumLevels) { - current_->GetOverlappingInputs(level + 2, &all_start, &all_limit, - &c->grandparents_); - } - - // Update the place where we will do the next compaction for this level. - // We update this immediately instead of waiting for the VersionEdit - // to be applied so that if the compaction fails, we will try a different - // key range next time. - compact_pointer_[level] = largest.Encode().ToString(); - c->edit_.SetCompactPointer(level, largest); -} - -Compaction* VersionSet::CompactRange(int level, const InternalKey* begin, - const InternalKey* end) { - std::vector<FileMetaData*> inputs; - current_->GetOverlappingInputs(level, begin, end, &inputs); - if (inputs.empty()) { - return nullptr; - } - - // Avoid compacting too much in one shot in case the range is large. - // But we cannot do this for level-0 since level-0 files can overlap - // and we must not pick one file and drop another older file if the - // two files overlap. - if (level > 0) { - const uint64_t limit = MaxFileSizeForLevel(options_, level); - uint64_t total = 0; - for (size_t i = 0; i < inputs.size(); i++) { - uint64_t s = inputs[i]->file_size; - total += s; - if (total >= limit) { - inputs.resize(i + 1); - break; - } - } - } - - Compaction* c = new Compaction(options_, level); - c->input_version_ = current_; - c->input_version_->Ref(); - c->inputs_[0] = inputs; - SetupOtherInputs(c); - return c; -} - -Compaction::Compaction(const Options* options, int level) - : level_(level), - max_output_file_size_(MaxFileSizeForLevel(options, level)), - input_version_(nullptr), - grandparent_index_(0), - seen_key_(false), - overlapped_bytes_(0) { - for (int i = 0; i < config::kNumLevels; i++) { - level_ptrs_[i] = 0; - } -} - -Compaction::~Compaction() { - if (input_version_ != nullptr) { - input_version_->Unref(); - } -} - -bool Compaction::IsTrivialMove() const { - const VersionSet* vset = input_version_->vset_; - // Avoid a move if there is lots of overlapping grandparent data. - // Otherwise, the move could create a parent file that will require - // a very expensive merge later on. - return (num_input_files(0) == 1 && num_input_files(1) == 0 && - TotalFileSize(grandparents_) <= - MaxGrandParentOverlapBytes(vset->options_)); -} - -void Compaction::AddInputDeletions(VersionEdit* edit) { - for (int which = 0; which < 2; which++) { - for (size_t i = 0; i < inputs_[which].size(); i++) { - edit->DeleteFile(level_ + which, inputs_[which][i]->number); - } - } -} - -bool Compaction::IsBaseLevelForKey(const Slice& user_key) { - // Maybe use binary search to find right entry instead of linear search? - const Comparator* user_cmp = input_version_->vset_->icmp_.user_comparator(); - for (int lvl = level_ + 2; lvl < config::kNumLevels; lvl++) { - const std::vector<FileMetaData*>& files = input_version_->files_[lvl]; - for (; level_ptrs_[lvl] < files.size();) { - FileMetaData* f = files[level_ptrs_[lvl]]; - if (user_cmp->Compare(user_key, f->largest.user_key()) <= 0) { - // We've advanced far enough - if (user_cmp->Compare(user_key, f->smallest.user_key()) >= 0) { - // Key falls in this file's range, so definitely not base level - return false; - } - break; - } - level_ptrs_[lvl]++; - } - } - return true; -} - -bool Compaction::ShouldStopBefore(const Slice& internal_key) { - const VersionSet* vset = input_version_->vset_; - // Scan to find earliest grandparent file that contains key. - const InternalKeyComparator* icmp = &vset->icmp_; - while (grandparent_index_ < grandparents_.size() && - icmp->Compare(internal_key, - grandparents_[grandparent_index_]->largest.Encode()) > - 0) { - if (seen_key_) { - overlapped_bytes_ += grandparents_[grandparent_index_]->file_size; - } - grandparent_index_++; - } - seen_key_ = true; - - if (overlapped_bytes_ > MaxGrandParentOverlapBytes(vset->options_)) { - // Too much overlap for current output; start new output - overlapped_bytes_ = 0; - return true; - } else { - return false; - } -} - -void Compaction::ReleaseInputs() { - if (input_version_ != nullptr) { - input_version_->Unref(); - input_version_ = nullptr; - } -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/db/version_set.h b/assign5/openTok/Pods/leveldb-library/db/version_set.h deleted file mode 100644 index 69f3d70..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/version_set.h +++ /dev/null @@ -1,393 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// The representation of a DBImpl consists of a set of Versions. The -// newest version is called "current". Older versions may be kept -// around to provide a consistent view to live iterators. -// -// Each Version keeps track of a set of Table files per level. The -// entire set of versions is maintained in a VersionSet. -// -// Version,VersionSet are thread-compatible, but require external -// synchronization on all accesses. - -#ifndef STORAGE_LEVELDB_DB_VERSION_SET_H_ -#define STORAGE_LEVELDB_DB_VERSION_SET_H_ - -#include <map> -#include <set> -#include <vector> - -#include "db/dbformat.h" -#include "db/version_edit.h" -#include "port/port.h" -#include "port/thread_annotations.h" - -namespace leveldb { - -namespace log { -class Writer; -} - -class Compaction; -class Iterator; -class MemTable; -class TableBuilder; -class TableCache; -class Version; -class VersionSet; -class WritableFile; - -// Return the smallest index i such that files[i]->largest >= key. -// Return files.size() if there is no such file. -// REQUIRES: "files" contains a sorted list of non-overlapping files. -int FindFile(const InternalKeyComparator& icmp, - const std::vector<FileMetaData*>& files, const Slice& key); - -// Returns true iff some file in "files" overlaps the user key range -// [*smallest,*largest]. -// smallest==nullptr represents a key smaller than all keys in the DB. -// largest==nullptr represents a key largest than all keys in the DB. -// REQUIRES: If disjoint_sorted_files, files[] contains disjoint ranges -// in sorted order. -bool SomeFileOverlapsRange(const InternalKeyComparator& icmp, - bool disjoint_sorted_files, - const std::vector<FileMetaData*>& files, - const Slice* smallest_user_key, - const Slice* largest_user_key); - -class Version { - public: - // Lookup the value for key. If found, store it in *val and - // return OK. Else return a non-OK status. Fills *stats. - // REQUIRES: lock is not held - struct GetStats { - FileMetaData* seek_file; - int seek_file_level; - }; - - // Append to *iters a sequence of iterators that will - // yield the contents of this Version when merged together. - // REQUIRES: This version has been saved (see VersionSet::SaveTo) - void AddIterators(const ReadOptions&, std::vector<Iterator*>* iters); - - Status Get(const ReadOptions&, const LookupKey& key, std::string* val, - GetStats* stats); - - // Adds "stats" into the current state. Returns true if a new - // compaction may need to be triggered, false otherwise. - // REQUIRES: lock is held - bool UpdateStats(const GetStats& stats); - - // Record a sample of bytes read at the specified internal key. - // Samples are taken approximately once every config::kReadBytesPeriod - // bytes. Returns true if a new compaction may need to be triggered. - // REQUIRES: lock is held - bool RecordReadSample(Slice key); - - // Reference count management (so Versions do not disappear out from - // under live iterators) - void Ref(); - void Unref(); - - void GetOverlappingInputs( - int level, - const InternalKey* begin, // nullptr means before all keys - const InternalKey* end, // nullptr means after all keys - std::vector<FileMetaData*>* inputs); - - // Returns true iff some file in the specified level overlaps - // some part of [*smallest_user_key,*largest_user_key]. - // smallest_user_key==nullptr represents a key smaller than all the DB's keys. - // largest_user_key==nullptr represents a key largest than all the DB's keys. - bool OverlapInLevel(int level, const Slice* smallest_user_key, - const Slice* largest_user_key); - - // Return the level at which we should place a new memtable compaction - // result that covers the range [smallest_user_key,largest_user_key]. - int PickLevelForMemTableOutput(const Slice& smallest_user_key, - const Slice& largest_user_key); - - int NumFiles(int level) const { return files_[level].size(); } - - // Return a human readable string that describes this version's contents. - std::string DebugString() const; - - private: - friend class Compaction; - friend class VersionSet; - - class LevelFileNumIterator; - - explicit Version(VersionSet* vset) - : vset_(vset), - next_(this), - prev_(this), - refs_(0), - file_to_compact_(nullptr), - file_to_compact_level_(-1), - compaction_score_(-1), - compaction_level_(-1) {} - - Version(const Version&) = delete; - Version& operator=(const Version&) = delete; - - ~Version(); - - Iterator* NewConcatenatingIterator(const ReadOptions&, int level) const; - - // Call func(arg, level, f) for every file that overlaps user_key in - // order from newest to oldest. If an invocation of func returns - // false, makes no more calls. - // - // REQUIRES: user portion of internal_key == user_key. - void ForEachOverlapping(Slice user_key, Slice internal_key, void* arg, - bool (*func)(void*, int, FileMetaData*)); - - VersionSet* vset_; // VersionSet to which this Version belongs - Version* next_; // Next version in linked list - Version* prev_; // Previous version in linked list - int refs_; // Number of live refs to this version - - // List of files per level - std::vector<FileMetaData*> files_[config::kNumLevels]; - - // Next file to compact based on seek stats. - FileMetaData* file_to_compact_; - int file_to_compact_level_; - - // Level that should be compacted next and its compaction score. - // Score < 1 means compaction is not strictly needed. These fields - // are initialized by Finalize(). - double compaction_score_; - int compaction_level_; -}; - -class VersionSet { - public: - VersionSet(const std::string& dbname, const Options* options, - TableCache* table_cache, const InternalKeyComparator*); - VersionSet(const VersionSet&) = delete; - VersionSet& operator=(const VersionSet&) = delete; - - ~VersionSet(); - - // Apply *edit to the current version to form a new descriptor that - // is both saved to persistent state and installed as the new - // current version. Will release *mu while actually writing to the file. - // REQUIRES: *mu is held on entry. - // REQUIRES: no other thread concurrently calls LogAndApply() - Status LogAndApply(VersionEdit* edit, port::Mutex* mu) - EXCLUSIVE_LOCKS_REQUIRED(mu); - - // Recover the last saved descriptor from persistent storage. - Status Recover(bool* save_manifest); - - // Return the current version. - Version* current() const { return current_; } - - // Return the current manifest file number - uint64_t ManifestFileNumber() const { return manifest_file_number_; } - - // Allocate and return a new file number - uint64_t NewFileNumber() { return next_file_number_++; } - - // Arrange to reuse "file_number" unless a newer file number has - // already been allocated. - // REQUIRES: "file_number" was returned by a call to NewFileNumber(). - void ReuseFileNumber(uint64_t file_number) { - if (next_file_number_ == file_number + 1) { - next_file_number_ = file_number; - } - } - - // Return the number of Table files at the specified level. - int NumLevelFiles(int level) const; - - // Return the combined file size of all files at the specified level. - int64_t NumLevelBytes(int level) const; - - // Return the last sequence number. - uint64_t LastSequence() const { return last_sequence_; } - - // Set the last sequence number to s. - void SetLastSequence(uint64_t s) { - assert(s >= last_sequence_); - last_sequence_ = s; - } - - // Mark the specified file number as used. - void MarkFileNumberUsed(uint64_t number); - - // Return the current log file number. - uint64_t LogNumber() const { return log_number_; } - - // Return the log file number for the log file that is currently - // being compacted, or zero if there is no such log file. - uint64_t PrevLogNumber() const { return prev_log_number_; } - - // Pick level and inputs for a new compaction. - // Returns nullptr if there is no compaction to be done. - // Otherwise returns a pointer to a heap-allocated object that - // describes the compaction. Caller should delete the result. - Compaction* PickCompaction(); - - // Return a compaction object for compacting the range [begin,end] in - // the specified level. Returns nullptr if there is nothing in that - // level that overlaps the specified range. Caller should delete - // the result. - Compaction* CompactRange(int level, const InternalKey* begin, - const InternalKey* end); - - // Return the maximum overlapping data (in bytes) at next level for any - // file at a level >= 1. - int64_t MaxNextLevelOverlappingBytes(); - - // Create an iterator that reads over the compaction inputs for "*c". - // The caller should delete the iterator when no longer needed. - Iterator* MakeInputIterator(Compaction* c); - - // Returns true iff some level needs a compaction. - bool NeedsCompaction() const { - Version* v = current_; - return (v->compaction_score_ >= 1) || (v->file_to_compact_ != nullptr); - } - - // Add all files listed in any live version to *live. - // May also mutate some internal state. - void AddLiveFiles(std::set<uint64_t>* live); - - // Return the approximate offset in the database of the data for - // "key" as of version "v". - uint64_t ApproximateOffsetOf(Version* v, const InternalKey& key); - - // Return a human-readable short (single-line) summary of the number - // of files per level. Uses *scratch as backing store. - struct LevelSummaryStorage { - char buffer[100]; - }; - const char* LevelSummary(LevelSummaryStorage* scratch) const; - - private: - class Builder; - - friend class Compaction; - friend class Version; - - bool ReuseManifest(const std::string& dscname, const std::string& dscbase); - - void Finalize(Version* v); - - void GetRange(const std::vector<FileMetaData*>& inputs, InternalKey* smallest, - InternalKey* largest); - - void GetRange2(const std::vector<FileMetaData*>& inputs1, - const std::vector<FileMetaData*>& inputs2, - InternalKey* smallest, InternalKey* largest); - - void SetupOtherInputs(Compaction* c); - - // Save current contents to *log - Status WriteSnapshot(log::Writer* log); - - void AppendVersion(Version* v); - - Env* const env_; - const std::string dbname_; - const Options* const options_; - TableCache* const table_cache_; - const InternalKeyComparator icmp_; - uint64_t next_file_number_; - uint64_t manifest_file_number_; - uint64_t last_sequence_; - uint64_t log_number_; - uint64_t prev_log_number_; // 0 or backing store for memtable being compacted - - // Opened lazily - WritableFile* descriptor_file_; - log::Writer* descriptor_log_; - Version dummy_versions_; // Head of circular doubly-linked list of versions. - Version* current_; // == dummy_versions_.prev_ - - // Per-level key at which the next compaction at that level should start. - // Either an empty string, or a valid InternalKey. - std::string compact_pointer_[config::kNumLevels]; -}; - -// A Compaction encapsulates information about a compaction. -class Compaction { - public: - ~Compaction(); - - // Return the level that is being compacted. Inputs from "level" - // and "level+1" will be merged to produce a set of "level+1" files. - int level() const { return level_; } - - // Return the object that holds the edits to the descriptor done - // by this compaction. - VersionEdit* edit() { return &edit_; } - - // "which" must be either 0 or 1 - int num_input_files(int which) const { return inputs_[which].size(); } - - // Return the ith input file at "level()+which" ("which" must be 0 or 1). - FileMetaData* input(int which, int i) const { return inputs_[which][i]; } - - // Maximum size of files to build during this compaction. - uint64_t MaxOutputFileSize() const { return max_output_file_size_; } - - // Is this a trivial compaction that can be implemented by just - // moving a single input file to the next level (no merging or splitting) - bool IsTrivialMove() const; - - // Add all inputs to this compaction as delete operations to *edit. - void AddInputDeletions(VersionEdit* edit); - - // Returns true if the information we have available guarantees that - // the compaction is producing data in "level+1" for which no data exists - // in levels greater than "level+1". - bool IsBaseLevelForKey(const Slice& user_key); - - // Returns true iff we should stop building the current output - // before processing "internal_key". - bool ShouldStopBefore(const Slice& internal_key); - - // Release the input version for the compaction, once the compaction - // is successful. - void ReleaseInputs(); - - private: - friend class Version; - friend class VersionSet; - - Compaction(const Options* options, int level); - - int level_; - uint64_t max_output_file_size_; - Version* input_version_; - VersionEdit edit_; - - // Each compaction reads inputs from "level_" and "level_+1" - std::vector<FileMetaData*> inputs_[2]; // The two sets of inputs - - // State used to check for number of overlapping grandparent files - // (parent == level_ + 1, grandparent == level_ + 2) - std::vector<FileMetaData*> grandparents_; - size_t grandparent_index_; // Index in grandparent_starts_ - bool seen_key_; // Some output key has been seen - int64_t overlapped_bytes_; // Bytes of overlap between current output - // and grandparent files - - // State for implementing IsBaseLevelForKey - - // level_ptrs_ holds indices into input_version_->levels_: our state - // is that we are positioned at one of the file ranges for each - // higher level than the ones involved in this compaction (i.e. for - // all L >= level_ + 2). - size_t level_ptrs_[config::kNumLevels]; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_VERSION_SET_H_ diff --git a/assign5/openTok/Pods/leveldb-library/db/write_batch.cc b/assign5/openTok/Pods/leveldb-library/db/write_batch.cc deleted file mode 100644 index 2dec642..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/write_batch.cc +++ /dev/null @@ -1,150 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// WriteBatch::rep_ := -// sequence: fixed64 -// count: fixed32 -// data: record[count] -// record := -// kTypeValue varstring varstring | -// kTypeDeletion varstring -// varstring := -// len: varint32 -// data: uint8[len] - -#include "leveldb/write_batch.h" - -#include "db/dbformat.h" -#include "db/memtable.h" -#include "db/write_batch_internal.h" -#include "leveldb/db.h" -#include "util/coding.h" - -namespace leveldb { - -// WriteBatch header has an 8-byte sequence number followed by a 4-byte count. -static const size_t kHeader = 12; - -WriteBatch::WriteBatch() { Clear(); } - -WriteBatch::~WriteBatch() {} - -WriteBatch::Handler::~Handler() {} - -void WriteBatch::Clear() { - rep_.clear(); - rep_.resize(kHeader); -} - -size_t WriteBatch::ApproximateSize() const { return rep_.size(); } - -Status WriteBatch::Iterate(Handler* handler) const { - Slice input(rep_); - if (input.size() < kHeader) { - return Status::Corruption("malformed WriteBatch (too small)"); - } - - input.remove_prefix(kHeader); - Slice key, value; - int found = 0; - while (!input.empty()) { - found++; - char tag = input[0]; - input.remove_prefix(1); - switch (tag) { - case kTypeValue: - if (GetLengthPrefixedSlice(&input, &key) && - GetLengthPrefixedSlice(&input, &value)) { - handler->Put(key, value); - } else { - return Status::Corruption("bad WriteBatch Put"); - } - break; - case kTypeDeletion: - if (GetLengthPrefixedSlice(&input, &key)) { - handler->Delete(key); - } else { - return Status::Corruption("bad WriteBatch Delete"); - } - break; - default: - return Status::Corruption("unknown WriteBatch tag"); - } - } - if (found != WriteBatchInternal::Count(this)) { - return Status::Corruption("WriteBatch has wrong count"); - } else { - return Status::OK(); - } -} - -int WriteBatchInternal::Count(const WriteBatch* b) { - return DecodeFixed32(b->rep_.data() + 8); -} - -void WriteBatchInternal::SetCount(WriteBatch* b, int n) { - EncodeFixed32(&b->rep_[8], n); -} - -SequenceNumber WriteBatchInternal::Sequence(const WriteBatch* b) { - return SequenceNumber(DecodeFixed64(b->rep_.data())); -} - -void WriteBatchInternal::SetSequence(WriteBatch* b, SequenceNumber seq) { - EncodeFixed64(&b->rep_[0], seq); -} - -void WriteBatch::Put(const Slice& key, const Slice& value) { - WriteBatchInternal::SetCount(this, WriteBatchInternal::Count(this) + 1); - rep_.push_back(static_cast<char>(kTypeValue)); - PutLengthPrefixedSlice(&rep_, key); - PutLengthPrefixedSlice(&rep_, value); -} - -void WriteBatch::Delete(const Slice& key) { - WriteBatchInternal::SetCount(this, WriteBatchInternal::Count(this) + 1); - rep_.push_back(static_cast<char>(kTypeDeletion)); - PutLengthPrefixedSlice(&rep_, key); -} - -void WriteBatch::Append(const WriteBatch& source) { - WriteBatchInternal::Append(this, &source); -} - -namespace { -class MemTableInserter : public WriteBatch::Handler { - public: - SequenceNumber sequence_; - MemTable* mem_; - - virtual void Put(const Slice& key, const Slice& value) { - mem_->Add(sequence_, kTypeValue, key, value); - sequence_++; - } - virtual void Delete(const Slice& key) { - mem_->Add(sequence_, kTypeDeletion, key, Slice()); - sequence_++; - } -}; -} // namespace - -Status WriteBatchInternal::InsertInto(const WriteBatch* b, MemTable* memtable) { - MemTableInserter inserter; - inserter.sequence_ = WriteBatchInternal::Sequence(b); - inserter.mem_ = memtable; - return b->Iterate(&inserter); -} - -void WriteBatchInternal::SetContents(WriteBatch* b, const Slice& contents) { - assert(contents.size() >= kHeader); - b->rep_.assign(contents.data(), contents.size()); -} - -void WriteBatchInternal::Append(WriteBatch* dst, const WriteBatch* src) { - SetCount(dst, Count(dst) + Count(src)); - assert(src->rep_.size() >= kHeader); - dst->rep_.append(src->rep_.data() + kHeader, src->rep_.size() - kHeader); -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/db/write_batch_internal.h b/assign5/openTok/Pods/leveldb-library/db/write_batch_internal.h deleted file mode 100644 index fce86e3..0000000 --- a/assign5/openTok/Pods/leveldb-library/db/write_batch_internal.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_WRITE_BATCH_INTERNAL_H_ -#define STORAGE_LEVELDB_DB_WRITE_BATCH_INTERNAL_H_ - -#include "db/dbformat.h" -#include "leveldb/write_batch.h" - -namespace leveldb { - -class MemTable; - -// WriteBatchInternal provides static methods for manipulating a -// WriteBatch that we don't want in the public WriteBatch interface. -class WriteBatchInternal { - public: - // Return the number of entries in the batch. - static int Count(const WriteBatch* batch); - - // Set the count for the number of entries in the batch. - static void SetCount(WriteBatch* batch, int n); - - // Return the sequence number for the start of this batch. - static SequenceNumber Sequence(const WriteBatch* batch); - - // Store the specified number as the sequence number for the start of - // this batch. - static void SetSequence(WriteBatch* batch, SequenceNumber seq); - - static Slice Contents(const WriteBatch* batch) { return Slice(batch->rep_); } - - static size_t ByteSize(const WriteBatch* batch) { return batch->rep_.size(); } - - static void SetContents(WriteBatch* batch, const Slice& contents); - - static Status InsertInto(const WriteBatch* batch, MemTable* memtable); - - static void Append(WriteBatch* dst, const WriteBatch* src); -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_WRITE_BATCH_INTERNAL_H_ diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/c.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/c.h deleted file mode 100644 index 8e0d592..0000000 --- a/assign5/openTok/Pods/leveldb-library/include/leveldb/c.h +++ /dev/null @@ -1,270 +0,0 @@ -/* Copyright (c) 2011 The LevelDB Authors. All rights reserved. - Use of this source code is governed by a BSD-style license that can be - found in the LICENSE file. See the AUTHORS file for names of contributors. - - C bindings for leveldb. May be useful as a stable ABI that can be - used by programs that keep leveldb in a shared library, or for - a JNI api. - - Does not support: - . getters for the option types - . custom comparators that implement key shortening - . custom iter, db, env, cache implementations using just the C bindings - - Some conventions: - - (1) We expose just opaque struct pointers and functions to clients. - This allows us to change internal representations without having to - recompile clients. - - (2) For simplicity, there is no equivalent to the Slice type. Instead, - the caller has to pass the pointer and length as separate - arguments. - - (3) Errors are represented by a null-terminated c string. NULL - means no error. All operations that can raise an error are passed - a "char** errptr" as the last argument. One of the following must - be true on entry: - *errptr == NULL - *errptr points to a malloc()ed null-terminated error message - (On Windows, *errptr must have been malloc()-ed by this library.) - On success, a leveldb routine leaves *errptr unchanged. - On failure, leveldb frees the old value of *errptr and - set *errptr to a malloc()ed error message. - - (4) Bools have the type unsigned char (0 == false; rest == true) - - (5) All of the pointer arguments must be non-NULL. -*/ - -#ifndef STORAGE_LEVELDB_INCLUDE_C_H_ -#define STORAGE_LEVELDB_INCLUDE_C_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include <stdarg.h> -#include <stddef.h> -#include <stdint.h> - -#include "leveldb/export.h" - -/* Exported types */ - -typedef struct leveldb_t leveldb_t; -typedef struct leveldb_cache_t leveldb_cache_t; -typedef struct leveldb_comparator_t leveldb_comparator_t; -typedef struct leveldb_env_t leveldb_env_t; -typedef struct leveldb_filelock_t leveldb_filelock_t; -typedef struct leveldb_filterpolicy_t leveldb_filterpolicy_t; -typedef struct leveldb_iterator_t leveldb_iterator_t; -typedef struct leveldb_logger_t leveldb_logger_t; -typedef struct leveldb_options_t leveldb_options_t; -typedef struct leveldb_randomfile_t leveldb_randomfile_t; -typedef struct leveldb_readoptions_t leveldb_readoptions_t; -typedef struct leveldb_seqfile_t leveldb_seqfile_t; -typedef struct leveldb_snapshot_t leveldb_snapshot_t; -typedef struct leveldb_writablefile_t leveldb_writablefile_t; -typedef struct leveldb_writebatch_t leveldb_writebatch_t; -typedef struct leveldb_writeoptions_t leveldb_writeoptions_t; - -/* DB operations */ - -LEVELDB_EXPORT leveldb_t* leveldb_open(const leveldb_options_t* options, - const char* name, char** errptr); - -LEVELDB_EXPORT void leveldb_close(leveldb_t* db); - -LEVELDB_EXPORT void leveldb_put(leveldb_t* db, - const leveldb_writeoptions_t* options, - const char* key, size_t keylen, const char* val, - size_t vallen, char** errptr); - -LEVELDB_EXPORT void leveldb_delete(leveldb_t* db, - const leveldb_writeoptions_t* options, - const char* key, size_t keylen, - char** errptr); - -LEVELDB_EXPORT void leveldb_write(leveldb_t* db, - const leveldb_writeoptions_t* options, - leveldb_writebatch_t* batch, char** errptr); - -/* Returns NULL if not found. A malloc()ed array otherwise. - Stores the length of the array in *vallen. */ -LEVELDB_EXPORT char* leveldb_get(leveldb_t* db, - const leveldb_readoptions_t* options, - const char* key, size_t keylen, size_t* vallen, - char** errptr); - -LEVELDB_EXPORT leveldb_iterator_t* leveldb_create_iterator( - leveldb_t* db, const leveldb_readoptions_t* options); - -LEVELDB_EXPORT const leveldb_snapshot_t* leveldb_create_snapshot(leveldb_t* db); - -LEVELDB_EXPORT void leveldb_release_snapshot( - leveldb_t* db, const leveldb_snapshot_t* snapshot); - -/* Returns NULL if property name is unknown. - Else returns a pointer to a malloc()-ed null-terminated value. */ -LEVELDB_EXPORT char* leveldb_property_value(leveldb_t* db, - const char* propname); - -LEVELDB_EXPORT void leveldb_approximate_sizes( - leveldb_t* db, int num_ranges, const char* const* range_start_key, - const size_t* range_start_key_len, const char* const* range_limit_key, - const size_t* range_limit_key_len, uint64_t* sizes); - -LEVELDB_EXPORT void leveldb_compact_range(leveldb_t* db, const char* start_key, - size_t start_key_len, - const char* limit_key, - size_t limit_key_len); - -/* Management operations */ - -LEVELDB_EXPORT void leveldb_destroy_db(const leveldb_options_t* options, - const char* name, char** errptr); - -LEVELDB_EXPORT void leveldb_repair_db(const leveldb_options_t* options, - const char* name, char** errptr); - -/* Iterator */ - -LEVELDB_EXPORT void leveldb_iter_destroy(leveldb_iterator_t*); -LEVELDB_EXPORT unsigned char leveldb_iter_valid(const leveldb_iterator_t*); -LEVELDB_EXPORT void leveldb_iter_seek_to_first(leveldb_iterator_t*); -LEVELDB_EXPORT void leveldb_iter_seek_to_last(leveldb_iterator_t*); -LEVELDB_EXPORT void leveldb_iter_seek(leveldb_iterator_t*, const char* k, - size_t klen); -LEVELDB_EXPORT void leveldb_iter_next(leveldb_iterator_t*); -LEVELDB_EXPORT void leveldb_iter_prev(leveldb_iterator_t*); -LEVELDB_EXPORT const char* leveldb_iter_key(const leveldb_iterator_t*, - size_t* klen); -LEVELDB_EXPORT const char* leveldb_iter_value(const leveldb_iterator_t*, - size_t* vlen); -LEVELDB_EXPORT void leveldb_iter_get_error(const leveldb_iterator_t*, - char** errptr); - -/* Write batch */ - -LEVELDB_EXPORT leveldb_writebatch_t* leveldb_writebatch_create(); -LEVELDB_EXPORT void leveldb_writebatch_destroy(leveldb_writebatch_t*); -LEVELDB_EXPORT void leveldb_writebatch_clear(leveldb_writebatch_t*); -LEVELDB_EXPORT void leveldb_writebatch_put(leveldb_writebatch_t*, - const char* key, size_t klen, - const char* val, size_t vlen); -LEVELDB_EXPORT void leveldb_writebatch_delete(leveldb_writebatch_t*, - const char* key, size_t klen); -LEVELDB_EXPORT void leveldb_writebatch_iterate( - const leveldb_writebatch_t*, void* state, - void (*put)(void*, const char* k, size_t klen, const char* v, size_t vlen), - void (*deleted)(void*, const char* k, size_t klen)); -LEVELDB_EXPORT void leveldb_writebatch_append( - leveldb_writebatch_t* destination, const leveldb_writebatch_t* source); - -/* Options */ - -LEVELDB_EXPORT leveldb_options_t* leveldb_options_create(); -LEVELDB_EXPORT void leveldb_options_destroy(leveldb_options_t*); -LEVELDB_EXPORT void leveldb_options_set_comparator(leveldb_options_t*, - leveldb_comparator_t*); -LEVELDB_EXPORT void leveldb_options_set_filter_policy(leveldb_options_t*, - leveldb_filterpolicy_t*); -LEVELDB_EXPORT void leveldb_options_set_create_if_missing(leveldb_options_t*, - unsigned char); -LEVELDB_EXPORT void leveldb_options_set_error_if_exists(leveldb_options_t*, - unsigned char); -LEVELDB_EXPORT void leveldb_options_set_paranoid_checks(leveldb_options_t*, - unsigned char); -LEVELDB_EXPORT void leveldb_options_set_env(leveldb_options_t*, leveldb_env_t*); -LEVELDB_EXPORT void leveldb_options_set_info_log(leveldb_options_t*, - leveldb_logger_t*); -LEVELDB_EXPORT void leveldb_options_set_write_buffer_size(leveldb_options_t*, - size_t); -LEVELDB_EXPORT void leveldb_options_set_max_open_files(leveldb_options_t*, int); -LEVELDB_EXPORT void leveldb_options_set_cache(leveldb_options_t*, - leveldb_cache_t*); -LEVELDB_EXPORT void leveldb_options_set_block_size(leveldb_options_t*, size_t); -LEVELDB_EXPORT void leveldb_options_set_block_restart_interval( - leveldb_options_t*, int); -LEVELDB_EXPORT void leveldb_options_set_max_file_size(leveldb_options_t*, - size_t); - -enum { leveldb_no_compression = 0, leveldb_snappy_compression = 1 }; -LEVELDB_EXPORT void leveldb_options_set_compression(leveldb_options_t*, int); - -/* Comparator */ - -LEVELDB_EXPORT leveldb_comparator_t* leveldb_comparator_create( - void* state, void (*destructor)(void*), - int (*compare)(void*, const char* a, size_t alen, const char* b, - size_t blen), - const char* (*name)(void*)); -LEVELDB_EXPORT void leveldb_comparator_destroy(leveldb_comparator_t*); - -/* Filter policy */ - -LEVELDB_EXPORT leveldb_filterpolicy_t* leveldb_filterpolicy_create( - void* state, void (*destructor)(void*), - char* (*create_filter)(void*, const char* const* key_array, - const size_t* key_length_array, int num_keys, - size_t* filter_length), - unsigned char (*key_may_match)(void*, const char* key, size_t length, - const char* filter, size_t filter_length), - const char* (*name)(void*)); -LEVELDB_EXPORT void leveldb_filterpolicy_destroy(leveldb_filterpolicy_t*); - -LEVELDB_EXPORT leveldb_filterpolicy_t* leveldb_filterpolicy_create_bloom( - int bits_per_key); - -/* Read options */ - -LEVELDB_EXPORT leveldb_readoptions_t* leveldb_readoptions_create(); -LEVELDB_EXPORT void leveldb_readoptions_destroy(leveldb_readoptions_t*); -LEVELDB_EXPORT void leveldb_readoptions_set_verify_checksums( - leveldb_readoptions_t*, unsigned char); -LEVELDB_EXPORT void leveldb_readoptions_set_fill_cache(leveldb_readoptions_t*, - unsigned char); -LEVELDB_EXPORT void leveldb_readoptions_set_snapshot(leveldb_readoptions_t*, - const leveldb_snapshot_t*); - -/* Write options */ - -LEVELDB_EXPORT leveldb_writeoptions_t* leveldb_writeoptions_create(); -LEVELDB_EXPORT void leveldb_writeoptions_destroy(leveldb_writeoptions_t*); -LEVELDB_EXPORT void leveldb_writeoptions_set_sync(leveldb_writeoptions_t*, - unsigned char); - -/* Cache */ - -LEVELDB_EXPORT leveldb_cache_t* leveldb_cache_create_lru(size_t capacity); -LEVELDB_EXPORT void leveldb_cache_destroy(leveldb_cache_t* cache); - -/* Env */ - -LEVELDB_EXPORT leveldb_env_t* leveldb_create_default_env(); -LEVELDB_EXPORT void leveldb_env_destroy(leveldb_env_t*); - -/* If not NULL, the returned buffer must be released using leveldb_free(). */ -LEVELDB_EXPORT char* leveldb_env_get_test_directory(leveldb_env_t*); - -/* Utility */ - -/* Calls free(ptr). - REQUIRES: ptr was malloc()-ed and returned by one of the routines - in this file. Note that in certain cases (typically on Windows), you - may need to call this routine instead of free(ptr) to dispose of - malloc()-ed memory returned by this library. */ -LEVELDB_EXPORT void leveldb_free(void* ptr); - -/* Return the major version number for this release. */ -LEVELDB_EXPORT int leveldb_major_version(); - -/* Return the minor version number for this release. */ -LEVELDB_EXPORT int leveldb_minor_version(); - -#ifdef __cplusplus -} /* end extern "C" */ -#endif - -#endif /* STORAGE_LEVELDB_INCLUDE_C_H_ */ diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/cache.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/cache.h deleted file mode 100644 index 7d1a221..0000000 --- a/assign5/openTok/Pods/leveldb-library/include/leveldb/cache.h +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// A Cache is an interface that maps keys to values. It has internal -// synchronization and may be safely accessed concurrently from -// multiple threads. It may automatically evict entries to make room -// for new entries. Values have a specified charge against the cache -// capacity. For example, a cache where the values are variable -// length strings, may use the length of the string as the charge for -// the string. -// -// A builtin cache implementation with a least-recently-used eviction -// policy is provided. Clients may use their own implementations if -// they want something more sophisticated (like scan-resistance, a -// custom eviction policy, variable cache sizing, etc.) - -#ifndef STORAGE_LEVELDB_INCLUDE_CACHE_H_ -#define STORAGE_LEVELDB_INCLUDE_CACHE_H_ - -#include <stdint.h> - -#include "leveldb/export.h" -#include "leveldb/slice.h" - -namespace leveldb { - -class LEVELDB_EXPORT Cache; - -// Create a new cache with a fixed size capacity. This implementation -// of Cache uses a least-recently-used eviction policy. -LEVELDB_EXPORT Cache* NewLRUCache(size_t capacity); - -class LEVELDB_EXPORT Cache { - public: - Cache() = default; - - Cache(const Cache&) = delete; - Cache& operator=(const Cache&) = delete; - - // Destroys all existing entries by calling the "deleter" - // function that was passed to the constructor. - virtual ~Cache(); - - // Opaque handle to an entry stored in the cache. - struct Handle {}; - - // Insert a mapping from key->value into the cache and assign it - // the specified charge against the total cache capacity. - // - // Returns a handle that corresponds to the mapping. The caller - // must call this->Release(handle) when the returned mapping is no - // longer needed. - // - // When the inserted entry is no longer needed, the key and - // value will be passed to "deleter". - virtual Handle* Insert(const Slice& key, void* value, size_t charge, - void (*deleter)(const Slice& key, void* value)) = 0; - - // If the cache has no mapping for "key", returns nullptr. - // - // Else return a handle that corresponds to the mapping. The caller - // must call this->Release(handle) when the returned mapping is no - // longer needed. - virtual Handle* Lookup(const Slice& key) = 0; - - // Release a mapping returned by a previous Lookup(). - // REQUIRES: handle must not have been released yet. - // REQUIRES: handle must have been returned by a method on *this. - virtual void Release(Handle* handle) = 0; - - // Return the value encapsulated in a handle returned by a - // successful Lookup(). - // REQUIRES: handle must not have been released yet. - // REQUIRES: handle must have been returned by a method on *this. - virtual void* Value(Handle* handle) = 0; - - // If the cache contains entry for key, erase it. Note that the - // underlying entry will be kept around until all existing handles - // to it have been released. - virtual void Erase(const Slice& key) = 0; - - // Return a new numeric id. May be used by multiple clients who are - // sharing the same cache to partition the key space. Typically the - // client will allocate a new id at startup and prepend the id to - // its cache keys. - virtual uint64_t NewId() = 0; - - // Remove all cache entries that are not actively in use. Memory-constrained - // applications may wish to call this method to reduce memory usage. - // Default implementation of Prune() does nothing. Subclasses are strongly - // encouraged to override the default implementation. A future release of - // leveldb may change Prune() to a pure abstract method. - virtual void Prune() {} - - // Return an estimate of the combined charges of all elements stored in the - // cache. - virtual size_t TotalCharge() const = 0; - - private: - void LRU_Remove(Handle* e); - void LRU_Append(Handle* e); - void Unref(Handle* e); - - struct Rep; - Rep* rep_; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_CACHE_H_ diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/comparator.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/comparator.h deleted file mode 100644 index a85b51e..0000000 --- a/assign5/openTok/Pods/leveldb-library/include/leveldb/comparator.h +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_INCLUDE_COMPARATOR_H_ -#define STORAGE_LEVELDB_INCLUDE_COMPARATOR_H_ - -#include <string> - -#include "leveldb/export.h" - -namespace leveldb { - -class Slice; - -// A Comparator object provides a total order across slices that are -// used as keys in an sstable or a database. A Comparator implementation -// must be thread-safe since leveldb may invoke its methods concurrently -// from multiple threads. -class LEVELDB_EXPORT Comparator { - public: - virtual ~Comparator(); - - // Three-way comparison. Returns value: - // < 0 iff "a" < "b", - // == 0 iff "a" == "b", - // > 0 iff "a" > "b" - virtual int Compare(const Slice& a, const Slice& b) const = 0; - - // The name of the comparator. Used to check for comparator - // mismatches (i.e., a DB created with one comparator is - // accessed using a different comparator. - // - // The client of this package should switch to a new name whenever - // the comparator implementation changes in a way that will cause - // the relative ordering of any two keys to change. - // - // Names starting with "leveldb." are reserved and should not be used - // by any clients of this package. - virtual const char* Name() const = 0; - - // Advanced functions: these are used to reduce the space requirements - // for internal data structures like index blocks. - - // If *start < limit, changes *start to a short string in [start,limit). - // Simple comparator implementations may return with *start unchanged, - // i.e., an implementation of this method that does nothing is correct. - virtual void FindShortestSeparator(std::string* start, - const Slice& limit) const = 0; - - // Changes *key to a short string >= *key. - // Simple comparator implementations may return with *key unchanged, - // i.e., an implementation of this method that does nothing is correct. - virtual void FindShortSuccessor(std::string* key) const = 0; -}; - -// Return a builtin comparator that uses lexicographic byte-wise -// ordering. The result remains the property of this module and -// must not be deleted. -LEVELDB_EXPORT const Comparator* BytewiseComparator(); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_COMPARATOR_H_ diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/db.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/db.h deleted file mode 100644 index ea3d9e5..0000000 --- a/assign5/openTok/Pods/leveldb-library/include/leveldb/db.h +++ /dev/null @@ -1,167 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_INCLUDE_DB_H_ -#define STORAGE_LEVELDB_INCLUDE_DB_H_ - -#include <stdint.h> -#include <stdio.h> - -#include "leveldb/export.h" -#include "leveldb/iterator.h" -#include "leveldb/options.h" - -namespace leveldb { - -// Update CMakeLists.txt if you change these -static const int kMajorVersion = 1; -static const int kMinorVersion = 22; - -struct Options; -struct ReadOptions; -struct WriteOptions; -class WriteBatch; - -// Abstract handle to particular state of a DB. -// A Snapshot is an immutable object and can therefore be safely -// accessed from multiple threads without any external synchronization. -class LEVELDB_EXPORT Snapshot { - protected: - virtual ~Snapshot(); -}; - -// A range of keys -struct LEVELDB_EXPORT Range { - Range() {} - Range(const Slice& s, const Slice& l) : start(s), limit(l) {} - - Slice start; // Included in the range - Slice limit; // Not included in the range -}; - -// A DB is a persistent ordered map from keys to values. -// A DB is safe for concurrent access from multiple threads without -// any external synchronization. -class LEVELDB_EXPORT DB { - public: - // Open the database with the specified "name". - // Stores a pointer to a heap-allocated database in *dbptr and returns - // OK on success. - // Stores nullptr in *dbptr and returns a non-OK status on error. - // Caller should delete *dbptr when it is no longer needed. - static Status Open(const Options& options, const std::string& name, - DB** dbptr); - - DB() = default; - - DB(const DB&) = delete; - DB& operator=(const DB&) = delete; - - virtual ~DB(); - - // Set the database entry for "key" to "value". Returns OK on success, - // and a non-OK status on error. - // Note: consider setting options.sync = true. - virtual Status Put(const WriteOptions& options, const Slice& key, - const Slice& value) = 0; - - // Remove the database entry (if any) for "key". Returns OK on - // success, and a non-OK status on error. It is not an error if "key" - // did not exist in the database. - // Note: consider setting options.sync = true. - virtual Status Delete(const WriteOptions& options, const Slice& key) = 0; - - // Apply the specified updates to the database. - // Returns OK on success, non-OK on failure. - // Note: consider setting options.sync = true. - virtual Status Write(const WriteOptions& options, WriteBatch* updates) = 0; - - // If the database contains an entry for "key" store the - // corresponding value in *value and return OK. - // - // If there is no entry for "key" leave *value unchanged and return - // a status for which Status::IsNotFound() returns true. - // - // May return some other Status on an error. - virtual Status Get(const ReadOptions& options, const Slice& key, - std::string* value) = 0; - - // Return a heap-allocated iterator over the contents of the database. - // The result of NewIterator() is initially invalid (caller must - // call one of the Seek methods on the iterator before using it). - // - // Caller should delete the iterator when it is no longer needed. - // The returned iterator should be deleted before this db is deleted. - virtual Iterator* NewIterator(const ReadOptions& options) = 0; - - // Return a handle to the current DB state. Iterators created with - // this handle will all observe a stable snapshot of the current DB - // state. The caller must call ReleaseSnapshot(result) when the - // snapshot is no longer needed. - virtual const Snapshot* GetSnapshot() = 0; - - // Release a previously acquired snapshot. The caller must not - // use "snapshot" after this call. - virtual void ReleaseSnapshot(const Snapshot* snapshot) = 0; - - // DB implementations can export properties about their state - // via this method. If "property" is a valid property understood by this - // DB implementation, fills "*value" with its current value and returns - // true. Otherwise returns false. - // - // - // Valid property names include: - // - // "leveldb.num-files-at-level<N>" - return the number of files at level <N>, - // where <N> is an ASCII representation of a level number (e.g. "0"). - // "leveldb.stats" - returns a multi-line string that describes statistics - // about the internal operation of the DB. - // "leveldb.sstables" - returns a multi-line string that describes all - // of the sstables that make up the db contents. - // "leveldb.approximate-memory-usage" - returns the approximate number of - // bytes of memory in use by the DB. - virtual bool GetProperty(const Slice& property, std::string* value) = 0; - - // For each i in [0,n-1], store in "sizes[i]", the approximate - // file system space used by keys in "[range[i].start .. range[i].limit)". - // - // Note that the returned sizes measure file system space usage, so - // if the user data compresses by a factor of ten, the returned - // sizes will be one-tenth the size of the corresponding user data size. - // - // The results may not include the sizes of recently written data. - virtual void GetApproximateSizes(const Range* range, int n, - uint64_t* sizes) = 0; - - // Compact the underlying storage for the key range [*begin,*end]. - // In particular, deleted and overwritten versions are discarded, - // and the data is rearranged to reduce the cost of operations - // needed to access the data. This operation should typically only - // be invoked by users who understand the underlying implementation. - // - // begin==nullptr is treated as a key before all keys in the database. - // end==nullptr is treated as a key after all keys in the database. - // Therefore the following call will compact the entire database: - // db->CompactRange(nullptr, nullptr); - virtual void CompactRange(const Slice* begin, const Slice* end) = 0; -}; - -// Destroy the contents of the specified database. -// Be very careful using this method. -// -// Note: For backwards compatibility, if DestroyDB is unable to list the -// database files, Status::OK() will still be returned masking this failure. -LEVELDB_EXPORT Status DestroyDB(const std::string& name, - const Options& options); - -// If a DB cannot be opened, you may attempt to call this method to -// resurrect as much of the contents of the database as possible. -// Some data may be lost, so be careful when calling this function -// on a database that contains important information. -LEVELDB_EXPORT Status RepairDB(const std::string& dbname, - const Options& options); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_DB_H_ diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/dumpfile.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/dumpfile.h deleted file mode 100644 index a58bc6b..0000000 --- a/assign5/openTok/Pods/leveldb-library/include/leveldb/dumpfile.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) 2014 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_INCLUDE_DUMPFILE_H_ -#define STORAGE_LEVELDB_INCLUDE_DUMPFILE_H_ - -#include <string> - -#include "leveldb/env.h" -#include "leveldb/export.h" -#include "leveldb/status.h" - -namespace leveldb { - -// Dump the contents of the file named by fname in text format to -// *dst. Makes a sequence of dst->Append() calls; each call is passed -// the newline-terminated text corresponding to a single item found -// in the file. -// -// Returns a non-OK result if fname does not name a leveldb storage -// file, or if the file cannot be read. -LEVELDB_EXPORT Status DumpFile(Env* env, const std::string& fname, - WritableFile* dst); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_DUMPFILE_H_ diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/env.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/env.h deleted file mode 100644 index 112fe96..0000000 --- a/assign5/openTok/Pods/leveldb-library/include/leveldb/env.h +++ /dev/null @@ -1,387 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// An Env is an interface used by the leveldb implementation to access -// operating system functionality like the filesystem etc. Callers -// may wish to provide a custom Env object when opening a database to -// get fine gain control; e.g., to rate limit file system operations. -// -// All Env implementations are safe for concurrent access from -// multiple threads without any external synchronization. - -#ifndef STORAGE_LEVELDB_INCLUDE_ENV_H_ -#define STORAGE_LEVELDB_INCLUDE_ENV_H_ - -#include <stdarg.h> -#include <stdint.h> - -#include <string> -#include <vector> - -#include "leveldb/export.h" -#include "leveldb/status.h" - -#if defined(_WIN32) -// The leveldb::Env class below contains a DeleteFile method. -// At the same time, <windows.h>, a fairly popular header -// file for Windows applications, defines a DeleteFile macro. -// -// Without any intervention on our part, the result of this -// unfortunate coincidence is that the name of the -// leveldb::Env::DeleteFile method seen by the compiler depends on -// whether <windows.h> was included before or after the LevelDB -// headers. -// -// To avoid headaches, we undefined DeleteFile (if defined) and -// redefine it at the bottom of this file. This way <windows.h> -// can be included before this file (or not at all) and the -// exported method will always be leveldb::Env::DeleteFile. -#if defined(DeleteFile) -#undef DeleteFile -#define LEVELDB_DELETEFILE_UNDEFINED -#endif // defined(DeleteFile) -#endif // defined(_WIN32) - -namespace leveldb { - -class FileLock; -class Logger; -class RandomAccessFile; -class SequentialFile; -class Slice; -class WritableFile; - -class LEVELDB_EXPORT Env { - public: - Env() = default; - - Env(const Env&) = delete; - Env& operator=(const Env&) = delete; - - virtual ~Env(); - - // Return a default environment suitable for the current operating - // system. Sophisticated users may wish to provide their own Env - // implementation instead of relying on this default environment. - // - // The result of Default() belongs to leveldb and must never be deleted. - static Env* Default(); - - // Create an object that sequentially reads the file with the specified name. - // On success, stores a pointer to the new file in *result and returns OK. - // On failure stores nullptr in *result and returns non-OK. If the file does - // not exist, returns a non-OK status. Implementations should return a - // NotFound status when the file does not exist. - // - // The returned file will only be accessed by one thread at a time. - virtual Status NewSequentialFile(const std::string& fname, - SequentialFile** result) = 0; - - // Create an object supporting random-access reads from the file with the - // specified name. On success, stores a pointer to the new file in - // *result and returns OK. On failure stores nullptr in *result and - // returns non-OK. If the file does not exist, returns a non-OK - // status. Implementations should return a NotFound status when the file does - // not exist. - // - // The returned file may be concurrently accessed by multiple threads. - virtual Status NewRandomAccessFile(const std::string& fname, - RandomAccessFile** result) = 0; - - // Create an object that writes to a new file with the specified - // name. Deletes any existing file with the same name and creates a - // new file. On success, stores a pointer to the new file in - // *result and returns OK. On failure stores nullptr in *result and - // returns non-OK. - // - // The returned file will only be accessed by one thread at a time. - virtual Status NewWritableFile(const std::string& fname, - WritableFile** result) = 0; - - // Create an object that either appends to an existing file, or - // writes to a new file (if the file does not exist to begin with). - // On success, stores a pointer to the new file in *result and - // returns OK. On failure stores nullptr in *result and returns - // non-OK. - // - // The returned file will only be accessed by one thread at a time. - // - // May return an IsNotSupportedError error if this Env does - // not allow appending to an existing file. Users of Env (including - // the leveldb implementation) must be prepared to deal with - // an Env that does not support appending. - virtual Status NewAppendableFile(const std::string& fname, - WritableFile** result); - - // Returns true iff the named file exists. - virtual bool FileExists(const std::string& fname) = 0; - - // Store in *result the names of the children of the specified directory. - // The names are relative to "dir". - // Original contents of *results are dropped. - virtual Status GetChildren(const std::string& dir, - std::vector<std::string>* result) = 0; - - // Delete the named file. - virtual Status DeleteFile(const std::string& fname) = 0; - - // Create the specified directory. - virtual Status CreateDir(const std::string& dirname) = 0; - - // Delete the specified directory. - virtual Status DeleteDir(const std::string& dirname) = 0; - - // Store the size of fname in *file_size. - virtual Status GetFileSize(const std::string& fname, uint64_t* file_size) = 0; - - // Rename file src to target. - virtual Status RenameFile(const std::string& src, - const std::string& target) = 0; - - // Lock the specified file. Used to prevent concurrent access to - // the same db by multiple processes. On failure, stores nullptr in - // *lock and returns non-OK. - // - // On success, stores a pointer to the object that represents the - // acquired lock in *lock and returns OK. The caller should call - // UnlockFile(*lock) to release the lock. If the process exits, - // the lock will be automatically released. - // - // If somebody else already holds the lock, finishes immediately - // with a failure. I.e., this call does not wait for existing locks - // to go away. - // - // May create the named file if it does not already exist. - virtual Status LockFile(const std::string& fname, FileLock** lock) = 0; - - // Release the lock acquired by a previous successful call to LockFile. - // REQUIRES: lock was returned by a successful LockFile() call - // REQUIRES: lock has not already been unlocked. - virtual Status UnlockFile(FileLock* lock) = 0; - - // Arrange to run "(*function)(arg)" once in a background thread. - // - // "function" may run in an unspecified thread. Multiple functions - // added to the same Env may run concurrently in different threads. - // I.e., the caller may not assume that background work items are - // serialized. - virtual void Schedule(void (*function)(void* arg), void* arg) = 0; - - // Start a new thread, invoking "function(arg)" within the new thread. - // When "function(arg)" returns, the thread will be destroyed. - virtual void StartThread(void (*function)(void* arg), void* arg) = 0; - - // *path is set to a temporary directory that can be used for testing. It may - // or may not have just been created. The directory may or may not differ - // between runs of the same process, but subsequent calls will return the - // same directory. - virtual Status GetTestDirectory(std::string* path) = 0; - - // Create and return a log file for storing informational messages. - virtual Status NewLogger(const std::string& fname, Logger** result) = 0; - - // Returns the number of micro-seconds since some fixed point in time. Only - // useful for computing deltas of time. - virtual uint64_t NowMicros() = 0; - - // Sleep/delay the thread for the prescribed number of micro-seconds. - virtual void SleepForMicroseconds(int micros) = 0; -}; - -// A file abstraction for reading sequentially through a file -class LEVELDB_EXPORT SequentialFile { - public: - SequentialFile() = default; - - SequentialFile(const SequentialFile&) = delete; - SequentialFile& operator=(const SequentialFile&) = delete; - - virtual ~SequentialFile(); - - // Read up to "n" bytes from the file. "scratch[0..n-1]" may be - // written by this routine. Sets "*result" to the data that was - // read (including if fewer than "n" bytes were successfully read). - // May set "*result" to point at data in "scratch[0..n-1]", so - // "scratch[0..n-1]" must be live when "*result" is used. - // If an error was encountered, returns a non-OK status. - // - // REQUIRES: External synchronization - virtual Status Read(size_t n, Slice* result, char* scratch) = 0; - - // Skip "n" bytes from the file. This is guaranteed to be no - // slower that reading the same data, but may be faster. - // - // If end of file is reached, skipping will stop at the end of the - // file, and Skip will return OK. - // - // REQUIRES: External synchronization - virtual Status Skip(uint64_t n) = 0; -}; - -// A file abstraction for randomly reading the contents of a file. -class LEVELDB_EXPORT RandomAccessFile { - public: - RandomAccessFile() = default; - - RandomAccessFile(const RandomAccessFile&) = delete; - RandomAccessFile& operator=(const RandomAccessFile&) = delete; - - virtual ~RandomAccessFile(); - - // Read up to "n" bytes from the file starting at "offset". - // "scratch[0..n-1]" may be written by this routine. Sets "*result" - // to the data that was read (including if fewer than "n" bytes were - // successfully read). May set "*result" to point at data in - // "scratch[0..n-1]", so "scratch[0..n-1]" must be live when - // "*result" is used. If an error was encountered, returns a non-OK - // status. - // - // Safe for concurrent use by multiple threads. - virtual Status Read(uint64_t offset, size_t n, Slice* result, - char* scratch) const = 0; -}; - -// A file abstraction for sequential writing. The implementation -// must provide buffering since callers may append small fragments -// at a time to the file. -class LEVELDB_EXPORT WritableFile { - public: - WritableFile() = default; - - WritableFile(const WritableFile&) = delete; - WritableFile& operator=(const WritableFile&) = delete; - - virtual ~WritableFile(); - - virtual Status Append(const Slice& data) = 0; - virtual Status Close() = 0; - virtual Status Flush() = 0; - virtual Status Sync() = 0; -}; - -// An interface for writing log messages. -class LEVELDB_EXPORT Logger { - public: - Logger() = default; - - Logger(const Logger&) = delete; - Logger& operator=(const Logger&) = delete; - - virtual ~Logger(); - - // Write an entry to the log file with the specified format. - virtual void Logv(const char* format, va_list ap) = 0; -}; - -// Identifies a locked file. -class LEVELDB_EXPORT FileLock { - public: - FileLock() = default; - - FileLock(const FileLock&) = delete; - FileLock& operator=(const FileLock&) = delete; - - virtual ~FileLock(); -}; - -// Log the specified data to *info_log if info_log is non-null. -void Log(Logger* info_log, const char* format, ...) -#if defined(__GNUC__) || defined(__clang__) - __attribute__((__format__(__printf__, 2, 3))) -#endif - ; - -// A utility routine: write "data" to the named file. -LEVELDB_EXPORT Status WriteStringToFile(Env* env, const Slice& data, - const std::string& fname); - -// A utility routine: read contents of named file into *data -LEVELDB_EXPORT Status ReadFileToString(Env* env, const std::string& fname, - std::string* data); - -// An implementation of Env that forwards all calls to another Env. -// May be useful to clients who wish to override just part of the -// functionality of another Env. -class LEVELDB_EXPORT EnvWrapper : public Env { - public: - // Initialize an EnvWrapper that delegates all calls to *t. - explicit EnvWrapper(Env* t) : target_(t) {} - virtual ~EnvWrapper(); - - // Return the target to which this Env forwards all calls. - Env* target() const { return target_; } - - // The following text is boilerplate that forwards all methods to target(). - Status NewSequentialFile(const std::string& f, SequentialFile** r) override { - return target_->NewSequentialFile(f, r); - } - Status NewRandomAccessFile(const std::string& f, - RandomAccessFile** r) override { - return target_->NewRandomAccessFile(f, r); - } - Status NewWritableFile(const std::string& f, WritableFile** r) override { - return target_->NewWritableFile(f, r); - } - Status NewAppendableFile(const std::string& f, WritableFile** r) override { - return target_->NewAppendableFile(f, r); - } - bool FileExists(const std::string& f) override { - return target_->FileExists(f); - } - Status GetChildren(const std::string& dir, - std::vector<std::string>* r) override { - return target_->GetChildren(dir, r); - } - Status DeleteFile(const std::string& f) override { - return target_->DeleteFile(f); - } - Status CreateDir(const std::string& d) override { - return target_->CreateDir(d); - } - Status DeleteDir(const std::string& d) override { - return target_->DeleteDir(d); - } - Status GetFileSize(const std::string& f, uint64_t* s) override { - return target_->GetFileSize(f, s); - } - Status RenameFile(const std::string& s, const std::string& t) override { - return target_->RenameFile(s, t); - } - Status LockFile(const std::string& f, FileLock** l) override { - return target_->LockFile(f, l); - } - Status UnlockFile(FileLock* l) override { return target_->UnlockFile(l); } - void Schedule(void (*f)(void*), void* a) override { - return target_->Schedule(f, a); - } - void StartThread(void (*f)(void*), void* a) override { - return target_->StartThread(f, a); - } - Status GetTestDirectory(std::string* path) override { - return target_->GetTestDirectory(path); - } - Status NewLogger(const std::string& fname, Logger** result) override { - return target_->NewLogger(fname, result); - } - uint64_t NowMicros() override { return target_->NowMicros(); } - void SleepForMicroseconds(int micros) override { - target_->SleepForMicroseconds(micros); - } - - private: - Env* target_; -}; - -} // namespace leveldb - -// Redefine DeleteFile if necessary. -#if defined(_WIN32) && defined(LEVELDB_DELETEFILE_UNDEFINED) -#if defined(UNICODE) -#define DeleteFile DeleteFileW -#else -#define DeleteFile DeleteFileA -#endif // defined(UNICODE) -#endif // defined(_WIN32) && defined(LEVELDB_DELETEFILE_UNDEFINED) - -#endif // STORAGE_LEVELDB_INCLUDE_ENV_H_ diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/export.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/export.h deleted file mode 100644 index 6ba9b18..0000000 --- a/assign5/openTok/Pods/leveldb-library/include/leveldb/export.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2017 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_INCLUDE_EXPORT_H_ -#define STORAGE_LEVELDB_INCLUDE_EXPORT_H_ - -#if !defined(LEVELDB_EXPORT) - -#if defined(LEVELDB_SHARED_LIBRARY) -#if defined(_WIN32) - -#if defined(LEVELDB_COMPILE_LIBRARY) -#define LEVELDB_EXPORT __declspec(dllexport) -#else -#define LEVELDB_EXPORT __declspec(dllimport) -#endif // defined(LEVELDB_COMPILE_LIBRARY) - -#else // defined(_WIN32) -#if defined(LEVELDB_COMPILE_LIBRARY) -#define LEVELDB_EXPORT __attribute__((visibility("default"))) -#else -#define LEVELDB_EXPORT -#endif -#endif // defined(_WIN32) - -#else // defined(LEVELDB_SHARED_LIBRARY) -#define LEVELDB_EXPORT -#endif - -#endif // !defined(LEVELDB_EXPORT) - -#endif // STORAGE_LEVELDB_INCLUDE_EXPORT_H_ diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/filter_policy.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/filter_policy.h deleted file mode 100644 index 49c8eda..0000000 --- a/assign5/openTok/Pods/leveldb-library/include/leveldb/filter_policy.h +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// A database can be configured with a custom FilterPolicy object. -// This object is responsible for creating a small filter from a set -// of keys. These filters are stored in leveldb and are consulted -// automatically by leveldb to decide whether or not to read some -// information from disk. In many cases, a filter can cut down the -// number of disk seeks form a handful to a single disk seek per -// DB::Get() call. -// -// Most people will want to use the builtin bloom filter support (see -// NewBloomFilterPolicy() below). - -#ifndef STORAGE_LEVELDB_INCLUDE_FILTER_POLICY_H_ -#define STORAGE_LEVELDB_INCLUDE_FILTER_POLICY_H_ - -#include <string> - -#include "leveldb/export.h" - -namespace leveldb { - -class Slice; - -class LEVELDB_EXPORT FilterPolicy { - public: - virtual ~FilterPolicy(); - - // Return the name of this policy. Note that if the filter encoding - // changes in an incompatible way, the name returned by this method - // must be changed. Otherwise, old incompatible filters may be - // passed to methods of this type. - virtual const char* Name() const = 0; - - // keys[0,n-1] contains a list of keys (potentially with duplicates) - // that are ordered according to the user supplied comparator. - // Append a filter that summarizes keys[0,n-1] to *dst. - // - // Warning: do not change the initial contents of *dst. Instead, - // append the newly constructed filter to *dst. - virtual void CreateFilter(const Slice* keys, int n, - std::string* dst) const = 0; - - // "filter" contains the data appended by a preceding call to - // CreateFilter() on this class. This method must return true if - // the key was in the list of keys passed to CreateFilter(). - // This method may return true or false if the key was not on the - // list, but it should aim to return false with a high probability. - virtual bool KeyMayMatch(const Slice& key, const Slice& filter) const = 0; -}; - -// Return a new filter policy that uses a bloom filter with approximately -// the specified number of bits per key. A good value for bits_per_key -// is 10, which yields a filter with ~ 1% false positive rate. -// -// Callers must delete the result after any database that is using the -// result has been closed. -// -// Note: if you are using a custom comparator that ignores some parts -// of the keys being compared, you must not use NewBloomFilterPolicy() -// and must provide your own FilterPolicy that also ignores the -// corresponding parts of the keys. For example, if the comparator -// ignores trailing spaces, it would be incorrect to use a -// FilterPolicy (like NewBloomFilterPolicy) that does not ignore -// trailing spaces in keys. -LEVELDB_EXPORT const FilterPolicy* NewBloomFilterPolicy(int bits_per_key); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_FILTER_POLICY_H_ diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/iterator.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/iterator.h deleted file mode 100644 index bb9a5df..0000000 --- a/assign5/openTok/Pods/leveldb-library/include/leveldb/iterator.h +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// An iterator yields a sequence of key/value pairs from a source. -// The following class defines the interface. Multiple implementations -// are provided by this library. In particular, iterators are provided -// to access the contents of a Table or a DB. -// -// Multiple threads can invoke const methods on an Iterator without -// external synchronization, but if any of the threads may call a -// non-const method, all threads accessing the same Iterator must use -// external synchronization. - -#ifndef STORAGE_LEVELDB_INCLUDE_ITERATOR_H_ -#define STORAGE_LEVELDB_INCLUDE_ITERATOR_H_ - -#include "leveldb/export.h" -#include "leveldb/slice.h" -#include "leveldb/status.h" - -namespace leveldb { - -class LEVELDB_EXPORT Iterator { - public: - Iterator(); - - Iterator(const Iterator&) = delete; - Iterator& operator=(const Iterator&) = delete; - - virtual ~Iterator(); - - // An iterator is either positioned at a key/value pair, or - // not valid. This method returns true iff the iterator is valid. - virtual bool Valid() const = 0; - - // Position at the first key in the source. The iterator is Valid() - // after this call iff the source is not empty. - virtual void SeekToFirst() = 0; - - // Position at the last key in the source. The iterator is - // Valid() after this call iff the source is not empty. - virtual void SeekToLast() = 0; - - // Position at the first key in the source that is at or past target. - // The iterator is Valid() after this call iff the source contains - // an entry that comes at or past target. - virtual void Seek(const Slice& target) = 0; - - // Moves to the next entry in the source. After this call, Valid() is - // true iff the iterator was not positioned at the last entry in the source. - // REQUIRES: Valid() - virtual void Next() = 0; - - // Moves to the previous entry in the source. After this call, Valid() is - // true iff the iterator was not positioned at the first entry in source. - // REQUIRES: Valid() - virtual void Prev() = 0; - - // Return the key for the current entry. The underlying storage for - // the returned slice is valid only until the next modification of - // the iterator. - // REQUIRES: Valid() - virtual Slice key() const = 0; - - // Return the value for the current entry. The underlying storage for - // the returned slice is valid only until the next modification of - // the iterator. - // REQUIRES: Valid() - virtual Slice value() const = 0; - - // If an error has occurred, return it. Else return an ok status. - virtual Status status() const = 0; - - // Clients are allowed to register function/arg1/arg2 triples that - // will be invoked when this iterator is destroyed. - // - // Note that unlike all of the preceding methods, this method is - // not abstract and therefore clients should not override it. - using CleanupFunction = void (*)(void* arg1, void* arg2); - void RegisterCleanup(CleanupFunction function, void* arg1, void* arg2); - - private: - // Cleanup functions are stored in a single-linked list. - // The list's head node is inlined in the iterator. - struct CleanupNode { - // True if the node is not used. Only head nodes might be unused. - bool IsEmpty() const { return function == nullptr; } - // Invokes the cleanup function. - void Run() { - assert(function != nullptr); - (*function)(arg1, arg2); - } - - // The head node is used if the function pointer is not null. - CleanupFunction function; - void* arg1; - void* arg2; - CleanupNode* next; - }; - CleanupNode cleanup_head_; -}; - -// Return an empty iterator (yields nothing). -LEVELDB_EXPORT Iterator* NewEmptyIterator(); - -// Return an empty iterator with the specified status. -LEVELDB_EXPORT Iterator* NewErrorIterator(const Status& status); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_ITERATOR_H_ diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/options.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/options.h deleted file mode 100644 index b748772..0000000 --- a/assign5/openTok/Pods/leveldb-library/include/leveldb/options.h +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_INCLUDE_OPTIONS_H_ -#define STORAGE_LEVELDB_INCLUDE_OPTIONS_H_ - -#include <stddef.h> - -#include "leveldb/export.h" - -namespace leveldb { - -class Cache; -class Comparator; -class Env; -class FilterPolicy; -class Logger; -class Snapshot; - -// DB contents are stored in a set of blocks, each of which holds a -// sequence of key,value pairs. Each block may be compressed before -// being stored in a file. The following enum describes which -// compression method (if any) is used to compress a block. -enum CompressionType { - // NOTE: do not change the values of existing entries, as these are - // part of the persistent format on disk. - kNoCompression = 0x0, - kSnappyCompression = 0x1 -}; - -// Options to control the behavior of a database (passed to DB::Open) -struct LEVELDB_EXPORT Options { - // Create an Options object with default values for all fields. - Options(); - - // ------------------- - // Parameters that affect behavior - - // Comparator used to define the order of keys in the table. - // Default: a comparator that uses lexicographic byte-wise ordering - // - // REQUIRES: The client must ensure that the comparator supplied - // here has the same name and orders keys *exactly* the same as the - // comparator provided to previous open calls on the same DB. - const Comparator* comparator; - - // If true, the database will be created if it is missing. - bool create_if_missing = false; - - // If true, an error is raised if the database already exists. - bool error_if_exists = false; - - // If true, the implementation will do aggressive checking of the - // data it is processing and will stop early if it detects any - // errors. This may have unforeseen ramifications: for example, a - // corruption of one DB entry may cause a large number of entries to - // become unreadable or for the entire DB to become unopenable. - bool paranoid_checks = false; - - // Use the specified object to interact with the environment, - // e.g. to read/write files, schedule background work, etc. - // Default: Env::Default() - Env* env; - - // Any internal progress/error information generated by the db will - // be written to info_log if it is non-null, or to a file stored - // in the same directory as the DB contents if info_log is null. - Logger* info_log = nullptr; - - // ------------------- - // Parameters that affect performance - - // Amount of data to build up in memory (backed by an unsorted log - // on disk) before converting to a sorted on-disk file. - // - // Larger values increase performance, especially during bulk loads. - // Up to two write buffers may be held in memory at the same time, - // so you may wish to adjust this parameter to control memory usage. - // Also, a larger write buffer will result in a longer recovery time - // the next time the database is opened. - size_t write_buffer_size = 4 * 1024 * 1024; - - // Number of open files that can be used by the DB. You may need to - // increase this if your database has a large working set (budget - // one open file per 2MB of working set). - int max_open_files = 1000; - - // Control over blocks (user data is stored in a set of blocks, and - // a block is the unit of reading from disk). - - // If non-null, use the specified cache for blocks. - // If null, leveldb will automatically create and use an 8MB internal cache. - Cache* block_cache = nullptr; - - // Approximate size of user data packed per block. Note that the - // block size specified here corresponds to uncompressed data. The - // actual size of the unit read from disk may be smaller if - // compression is enabled. This parameter can be changed dynamically. - size_t block_size = 4 * 1024; - - // Number of keys between restart points for delta encoding of keys. - // This parameter can be changed dynamically. Most clients should - // leave this parameter alone. - int block_restart_interval = 16; - - // Leveldb will write up to this amount of bytes to a file before - // switching to a new one. - // Most clients should leave this parameter alone. However if your - // filesystem is more efficient with larger files, you could - // consider increasing the value. The downside will be longer - // compactions and hence longer latency/performance hiccups. - // Another reason to increase this parameter might be when you are - // initially populating a large database. - size_t max_file_size = 2 * 1024 * 1024; - - // Compress blocks using the specified compression algorithm. This - // parameter can be changed dynamically. - // - // Default: kSnappyCompression, which gives lightweight but fast - // compression. - // - // Typical speeds of kSnappyCompression on an Intel(R) Core(TM)2 2.4GHz: - // ~200-500MB/s compression - // ~400-800MB/s decompression - // Note that these speeds are significantly faster than most - // persistent storage speeds, and therefore it is typically never - // worth switching to kNoCompression. Even if the input data is - // incompressible, the kSnappyCompression implementation will - // efficiently detect that and will switch to uncompressed mode. - CompressionType compression = kSnappyCompression; - - // EXPERIMENTAL: If true, append to existing MANIFEST and log files - // when a database is opened. This can significantly speed up open. - // - // Default: currently false, but may become true later. - bool reuse_logs = false; - - // If non-null, use the specified filter policy to reduce disk reads. - // Many applications will benefit from passing the result of - // NewBloomFilterPolicy() here. - const FilterPolicy* filter_policy = nullptr; -}; - -// Options that control read operations -struct LEVELDB_EXPORT ReadOptions { - ReadOptions() = default; - - // If true, all data read from underlying storage will be - // verified against corresponding checksums. - bool verify_checksums = false; - - // Should the data read for this iteration be cached in memory? - // Callers may wish to set this field to false for bulk scans. - bool fill_cache = true; - - // If "snapshot" is non-null, read as of the supplied snapshot - // (which must belong to the DB that is being read and which must - // not have been released). If "snapshot" is null, use an implicit - // snapshot of the state at the beginning of this read operation. - const Snapshot* snapshot = nullptr; -}; - -// Options that control write operations -struct LEVELDB_EXPORT WriteOptions { - WriteOptions() = default; - - // If true, the write will be flushed from the operating system - // buffer cache (by calling WritableFile::Sync()) before the write - // is considered complete. If this flag is true, writes will be - // slower. - // - // If this flag is false, and the machine crashes, some recent - // writes may be lost. Note that if it is just the process that - // crashes (i.e., the machine does not reboot), no writes will be - // lost even if sync==false. - // - // In other words, a DB write with sync==false has similar - // crash semantics as the "write()" system call. A DB write - // with sync==true has similar crash semantics to a "write()" - // system call followed by "fsync()". - bool sync = false; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_OPTIONS_H_ diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/slice.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/slice.h deleted file mode 100644 index 2df417d..0000000 --- a/assign5/openTok/Pods/leveldb-library/include/leveldb/slice.h +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Slice is a simple structure containing a pointer into some external -// storage and a size. The user of a Slice must ensure that the slice -// is not used after the corresponding external storage has been -// deallocated. -// -// Multiple threads can invoke const methods on a Slice without -// external synchronization, but if any of the threads may call a -// non-const method, all threads accessing the same Slice must use -// external synchronization. - -#ifndef STORAGE_LEVELDB_INCLUDE_SLICE_H_ -#define STORAGE_LEVELDB_INCLUDE_SLICE_H_ - -#include <assert.h> -#include <stddef.h> -#include <string.h> - -#include <string> - -#include "leveldb/export.h" - -namespace leveldb { - -class LEVELDB_EXPORT Slice { - public: - // Create an empty slice. - Slice() : data_(""), size_(0) {} - - // Create a slice that refers to d[0,n-1]. - Slice(const char* d, size_t n) : data_(d), size_(n) {} - - // Create a slice that refers to the contents of "s" - Slice(const std::string& s) : data_(s.data()), size_(s.size()) {} - - // Create a slice that refers to s[0,strlen(s)-1] - Slice(const char* s) : data_(s), size_(strlen(s)) {} - - // Intentionally copyable. - Slice(const Slice&) = default; - Slice& operator=(const Slice&) = default; - - // Return a pointer to the beginning of the referenced data - const char* data() const { return data_; } - - // Return the length (in bytes) of the referenced data - size_t size() const { return size_; } - - // Return true iff the length of the referenced data is zero - bool empty() const { return size_ == 0; } - - // Return the ith byte in the referenced data. - // REQUIRES: n < size() - char operator[](size_t n) const { - assert(n < size()); - return data_[n]; - } - - // Change this slice to refer to an empty array - void clear() { - data_ = ""; - size_ = 0; - } - - // Drop the first "n" bytes from this slice. - void remove_prefix(size_t n) { - assert(n <= size()); - data_ += n; - size_ -= n; - } - - // Return a string that contains the copy of the referenced data. - std::string ToString() const { return std::string(data_, size_); } - - // Three-way comparison. Returns value: - // < 0 iff "*this" < "b", - // == 0 iff "*this" == "b", - // > 0 iff "*this" > "b" - int compare(const Slice& b) const; - - // Return true iff "x" is a prefix of "*this" - bool starts_with(const Slice& x) const { - return ((size_ >= x.size_) && (memcmp(data_, x.data_, x.size_) == 0)); - } - - private: - const char* data_; - size_t size_; -}; - -inline bool operator==(const Slice& x, const Slice& y) { - return ((x.size() == y.size()) && - (memcmp(x.data(), y.data(), x.size()) == 0)); -} - -inline bool operator!=(const Slice& x, const Slice& y) { return !(x == y); } - -inline int Slice::compare(const Slice& b) const { - const size_t min_len = (size_ < b.size_) ? size_ : b.size_; - int r = memcmp(data_, b.data_, min_len); - if (r == 0) { - if (size_ < b.size_) - r = -1; - else if (size_ > b.size_) - r = +1; - } - return r; -} - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_SLICE_H_ diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/status.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/status.h deleted file mode 100644 index e327314..0000000 --- a/assign5/openTok/Pods/leveldb-library/include/leveldb/status.h +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// A Status encapsulates the result of an operation. It may indicate success, -// or it may indicate an error with an associated error message. -// -// Multiple threads can invoke const methods on a Status without -// external synchronization, but if any of the threads may call a -// non-const method, all threads accessing the same Status must use -// external synchronization. - -#ifndef STORAGE_LEVELDB_INCLUDE_STATUS_H_ -#define STORAGE_LEVELDB_INCLUDE_STATUS_H_ - -#include <algorithm> -#include <string> - -#include "leveldb/export.h" -#include "leveldb/slice.h" - -namespace leveldb { - -class LEVELDB_EXPORT Status { - public: - // Create a success status. - Status() noexcept : state_(nullptr) {} - ~Status() { delete[] state_; } - - Status(const Status& rhs); - Status& operator=(const Status& rhs); - - Status(Status&& rhs) noexcept : state_(rhs.state_) { rhs.state_ = nullptr; } - Status& operator=(Status&& rhs) noexcept; - - // Return a success status. - static Status OK() { return Status(); } - - // Return error status of an appropriate type. - static Status NotFound(const Slice& msg, const Slice& msg2 = Slice()) { - return Status(kNotFound, msg, msg2); - } - static Status Corruption(const Slice& msg, const Slice& msg2 = Slice()) { - return Status(kCorruption, msg, msg2); - } - static Status NotSupported(const Slice& msg, const Slice& msg2 = Slice()) { - return Status(kNotSupported, msg, msg2); - } - static Status InvalidArgument(const Slice& msg, const Slice& msg2 = Slice()) { - return Status(kInvalidArgument, msg, msg2); - } - static Status IOError(const Slice& msg, const Slice& msg2 = Slice()) { - return Status(kIOError, msg, msg2); - } - - // Returns true iff the status indicates success. - bool ok() const { return (state_ == nullptr); } - - // Returns true iff the status indicates a NotFound error. - bool IsNotFound() const { return code() == kNotFound; } - - // Returns true iff the status indicates a Corruption error. - bool IsCorruption() const { return code() == kCorruption; } - - // Returns true iff the status indicates an IOError. - bool IsIOError() const { return code() == kIOError; } - - // Returns true iff the status indicates a NotSupportedError. - bool IsNotSupportedError() const { return code() == kNotSupported; } - - // Returns true iff the status indicates an InvalidArgument. - bool IsInvalidArgument() const { return code() == kInvalidArgument; } - - // Return a string representation of this status suitable for printing. - // Returns the string "OK" for success. - std::string ToString() const; - - private: - enum Code { - kOk = 0, - kNotFound = 1, - kCorruption = 2, - kNotSupported = 3, - kInvalidArgument = 4, - kIOError = 5 - }; - - Code code() const { - return (state_ == nullptr) ? kOk : static_cast<Code>(state_[4]); - } - - Status(Code code, const Slice& msg, const Slice& msg2); - static const char* CopyState(const char* s); - - // OK status has a null state_. Otherwise, state_ is a new[] array - // of the following form: - // state_[0..3] == length of message - // state_[4] == code - // state_[5..] == message - const char* state_; -}; - -inline Status::Status(const Status& rhs) { - state_ = (rhs.state_ == nullptr) ? nullptr : CopyState(rhs.state_); -} -inline Status& Status::operator=(const Status& rhs) { - // The following condition catches both aliasing (when this == &rhs), - // and the common case where both rhs and *this are ok. - if (state_ != rhs.state_) { - delete[] state_; - state_ = (rhs.state_ == nullptr) ? nullptr : CopyState(rhs.state_); - } - return *this; -} -inline Status& Status::operator=(Status&& rhs) noexcept { - std::swap(state_, rhs.state_); - return *this; -} - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_STATUS_H_ diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/table.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/table.h deleted file mode 100644 index 25c6013..0000000 --- a/assign5/openTok/Pods/leveldb-library/include/leveldb/table.h +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_INCLUDE_TABLE_H_ -#define STORAGE_LEVELDB_INCLUDE_TABLE_H_ - -#include <stdint.h> - -#include "leveldb/export.h" -#include "leveldb/iterator.h" - -namespace leveldb { - -class Block; -class BlockHandle; -class Footer; -struct Options; -class RandomAccessFile; -struct ReadOptions; -class TableCache; - -// A Table is a sorted map from strings to strings. Tables are -// immutable and persistent. A Table may be safely accessed from -// multiple threads without external synchronization. -class LEVELDB_EXPORT Table { - public: - // Attempt to open the table that is stored in bytes [0..file_size) - // of "file", and read the metadata entries necessary to allow - // retrieving data from the table. - // - // If successful, returns ok and sets "*table" to the newly opened - // table. The client should delete "*table" when no longer needed. - // If there was an error while initializing the table, sets "*table" - // to nullptr and returns a non-ok status. Does not take ownership of - // "*source", but the client must ensure that "source" remains live - // for the duration of the returned table's lifetime. - // - // *file must remain live while this Table is in use. - static Status Open(const Options& options, RandomAccessFile* file, - uint64_t file_size, Table** table); - - Table(const Table&) = delete; - Table& operator=(const Table&) = delete; - - ~Table(); - - // Returns a new iterator over the table contents. - // The result of NewIterator() is initially invalid (caller must - // call one of the Seek methods on the iterator before using it). - Iterator* NewIterator(const ReadOptions&) const; - - // Given a key, return an approximate byte offset in the file where - // the data for that key begins (or would begin if the key were - // present in the file). The returned value is in terms of file - // bytes, and so includes effects like compression of the underlying data. - // E.g., the approximate offset of the last key in the table will - // be close to the file length. - uint64_t ApproximateOffsetOf(const Slice& key) const; - - private: - friend class TableCache; - struct Rep; - - static Iterator* BlockReader(void*, const ReadOptions&, const Slice&); - - explicit Table(Rep* rep) : rep_(rep) {} - - // Calls (*handle_result)(arg, ...) with the entry found after a call - // to Seek(key). May not make such a call if filter policy says - // that key is not present. - Status InternalGet(const ReadOptions&, const Slice& key, void* arg, - void (*handle_result)(void* arg, const Slice& k, - const Slice& v)); - - void ReadMeta(const Footer& footer); - void ReadFilter(const Slice& filter_handle_value); - - Rep* const rep_; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_TABLE_H_ diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/table_builder.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/table_builder.h deleted file mode 100644 index 7d8896b..0000000 --- a/assign5/openTok/Pods/leveldb-library/include/leveldb/table_builder.h +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// TableBuilder provides the interface used to build a Table -// (an immutable and sorted map from keys to values). -// -// Multiple threads can invoke const methods on a TableBuilder without -// external synchronization, but if any of the threads may call a -// non-const method, all threads accessing the same TableBuilder must use -// external synchronization. - -#ifndef STORAGE_LEVELDB_INCLUDE_TABLE_BUILDER_H_ -#define STORAGE_LEVELDB_INCLUDE_TABLE_BUILDER_H_ - -#include <stdint.h> - -#include "leveldb/export.h" -#include "leveldb/options.h" -#include "leveldb/status.h" - -namespace leveldb { - -class BlockBuilder; -class BlockHandle; -class WritableFile; - -class LEVELDB_EXPORT TableBuilder { - public: - // Create a builder that will store the contents of the table it is - // building in *file. Does not close the file. It is up to the - // caller to close the file after calling Finish(). - TableBuilder(const Options& options, WritableFile* file); - - TableBuilder(const TableBuilder&) = delete; - TableBuilder& operator=(const TableBuilder&) = delete; - - // REQUIRES: Either Finish() or Abandon() has been called. - ~TableBuilder(); - - // Change the options used by this builder. Note: only some of the - // option fields can be changed after construction. If a field is - // not allowed to change dynamically and its value in the structure - // passed to the constructor is different from its value in the - // structure passed to this method, this method will return an error - // without changing any fields. - Status ChangeOptions(const Options& options); - - // Add key,value to the table being constructed. - // REQUIRES: key is after any previously added key according to comparator. - // REQUIRES: Finish(), Abandon() have not been called - void Add(const Slice& key, const Slice& value); - - // Advanced operation: flush any buffered key/value pairs to file. - // Can be used to ensure that two adjacent entries never live in - // the same data block. Most clients should not need to use this method. - // REQUIRES: Finish(), Abandon() have not been called - void Flush(); - - // Return non-ok iff some error has been detected. - Status status() const; - - // Finish building the table. Stops using the file passed to the - // constructor after this function returns. - // REQUIRES: Finish(), Abandon() have not been called - Status Finish(); - - // Indicate that the contents of this builder should be abandoned. Stops - // using the file passed to the constructor after this function returns. - // If the caller is not going to call Finish(), it must call Abandon() - // before destroying this builder. - // REQUIRES: Finish(), Abandon() have not been called - void Abandon(); - - // Number of calls to Add() so far. - uint64_t NumEntries() const; - - // Size of the file generated so far. If invoked after a successful - // Finish() call, returns the size of the final generated file. - uint64_t FileSize() const; - - private: - bool ok() const { return status().ok(); } - void WriteBlock(BlockBuilder* block, BlockHandle* handle); - void WriteRawBlock(const Slice& data, CompressionType, BlockHandle* handle); - - struct Rep; - Rep* rep_; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_TABLE_BUILDER_H_ diff --git a/assign5/openTok/Pods/leveldb-library/include/leveldb/write_batch.h b/assign5/openTok/Pods/leveldb-library/include/leveldb/write_batch.h deleted file mode 100644 index 94d4115..0000000 --- a/assign5/openTok/Pods/leveldb-library/include/leveldb/write_batch.h +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// WriteBatch holds a collection of updates to apply atomically to a DB. -// -// The updates are applied in the order in which they are added -// to the WriteBatch. For example, the value of "key" will be "v3" -// after the following batch is written: -// -// batch.Put("key", "v1"); -// batch.Delete("key"); -// batch.Put("key", "v2"); -// batch.Put("key", "v3"); -// -// Multiple threads can invoke const methods on a WriteBatch without -// external synchronization, but if any of the threads may call a -// non-const method, all threads accessing the same WriteBatch must use -// external synchronization. - -#ifndef STORAGE_LEVELDB_INCLUDE_WRITE_BATCH_H_ -#define STORAGE_LEVELDB_INCLUDE_WRITE_BATCH_H_ - -#include <string> - -#include "leveldb/export.h" -#include "leveldb/status.h" - -namespace leveldb { - -class Slice; - -class LEVELDB_EXPORT WriteBatch { - public: - class LEVELDB_EXPORT Handler { - public: - virtual ~Handler(); - virtual void Put(const Slice& key, const Slice& value) = 0; - virtual void Delete(const Slice& key) = 0; - }; - - WriteBatch(); - - // Intentionally copyable. - WriteBatch(const WriteBatch&) = default; - WriteBatch& operator=(const WriteBatch&) = default; - - ~WriteBatch(); - - // Store the mapping "key->value" in the database. - void Put(const Slice& key, const Slice& value); - - // If the database contains a mapping for "key", erase it. Else do nothing. - void Delete(const Slice& key); - - // Clear all updates buffered in this batch. - void Clear(); - - // The size of the database changes caused by this batch. - // - // This number is tied to implementation details, and may change across - // releases. It is intended for LevelDB usage metrics. - size_t ApproximateSize() const; - - // Copies the operations in "source" to this batch. - // - // This runs in O(source size) time. However, the constant factor is better - // than calling Iterate() over the source batch with a Handler that replicates - // the operations into this batch. - void Append(const WriteBatch& source); - - // Support for iterating over the contents of a batch. - Status Iterate(Handler* handler) const; - - private: - friend class WriteBatchInternal; - - std::string rep_; // See comment in write_batch.cc for the format of rep_ -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_WRITE_BATCH_H_ diff --git a/assign5/openTok/Pods/leveldb-library/port/port.h b/assign5/openTok/Pods/leveldb-library/port/port.h deleted file mode 100644 index 4b247f7..0000000 --- a/assign5/openTok/Pods/leveldb-library/port/port.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_PORT_PORT_H_ -#define STORAGE_LEVELDB_PORT_PORT_H_ - -#include <string.h> - -// Include the appropriate platform specific file below. If you are -// porting to a new platform, see "port_example.h" for documentation -// of what the new port_<platform>.h file must provide. -#if defined(LEVELDB_PLATFORM_POSIX) || defined(LEVELDB_PLATFORM_WINDOWS) -#include "port/port_stdcxx.h" -#elif defined(LEVELDB_PLATFORM_CHROMIUM) -#include "port/port_chromium.h" -#endif - -#endif // STORAGE_LEVELDB_PORT_PORT_H_ diff --git a/assign5/openTok/Pods/leveldb-library/port/port_example.h b/assign5/openTok/Pods/leveldb-library/port/port_example.h deleted file mode 100644 index 1a8fca2..0000000 --- a/assign5/openTok/Pods/leveldb-library/port/port_example.h +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// This file contains the specification, but not the implementations, -// of the types/operations/etc. that should be defined by a platform -// specific port_<platform>.h file. Use this file as a reference for -// how to port this package to a new platform. - -#ifndef STORAGE_LEVELDB_PORT_PORT_EXAMPLE_H_ -#define STORAGE_LEVELDB_PORT_PORT_EXAMPLE_H_ - -#include "port/thread_annotations.h" - -namespace leveldb { -namespace port { - -// TODO(jorlow): Many of these belong more in the environment class rather than -// here. We should try moving them and see if it affects perf. - -// The following boolean constant must be true on a little-endian machine -// and false otherwise. -static const bool kLittleEndian = true /* or some other expression */; - -// ------------------ Threading ------------------- - -// A Mutex represents an exclusive lock. -class LOCKABLE Mutex { - public: - Mutex(); - ~Mutex(); - - // Lock the mutex. Waits until other lockers have exited. - // Will deadlock if the mutex is already locked by this thread. - void Lock() EXCLUSIVE_LOCK_FUNCTION(); - - // Unlock the mutex. - // REQUIRES: This mutex was locked by this thread. - void Unlock() UNLOCK_FUNCTION(); - - // Optionally crash if this thread does not hold this mutex. - // The implementation must be fast, especially if NDEBUG is - // defined. The implementation is allowed to skip all checks. - void AssertHeld() ASSERT_EXCLUSIVE_LOCK(); -}; - -class CondVar { - public: - explicit CondVar(Mutex* mu); - ~CondVar(); - - // Atomically release *mu and block on this condition variable until - // either a call to SignalAll(), or a call to Signal() that picks - // this thread to wakeup. - // REQUIRES: this thread holds *mu - void Wait(); - - // If there are some threads waiting, wake up at least one of them. - void Signal(); - - // Wake up all waiting threads. - void SignallAll(); -}; - -// ------------------ Compression ------------------- - -// Store the snappy compression of "input[0,input_length-1]" in *output. -// Returns false if snappy is not supported by this port. -bool Snappy_Compress(const char* input, size_t input_length, - std::string* output); - -// If input[0,input_length-1] looks like a valid snappy compressed -// buffer, store the size of the uncompressed data in *result and -// return true. Else return false. -bool Snappy_GetUncompressedLength(const char* input, size_t length, - size_t* result); - -// Attempt to snappy uncompress input[0,input_length-1] into *output. -// Returns true if successful, false if the input is invalid lightweight -// compressed data. -// -// REQUIRES: at least the first "n" bytes of output[] must be writable -// where "n" is the result of a successful call to -// Snappy_GetUncompressedLength. -bool Snappy_Uncompress(const char* input_data, size_t input_length, - char* output); - -// ------------------ Miscellaneous ------------------- - -// If heap profiling is not supported, returns false. -// Else repeatedly calls (*func)(arg, data, n) and then returns true. -// The concatenation of all "data[0,n-1]" fragments is the heap profile. -bool GetHeapProfile(void (*func)(void*, const char*, int), void* arg); - -// Extend the CRC to include the first n bytes of buf. -// -// Returns zero if the CRC cannot be extended using acceleration, else returns -// the newly extended CRC value (which may also be zero). -uint32_t AcceleratedCRC32C(uint32_t crc, const char* buf, size_t size); - -} // namespace port -} // namespace leveldb - -#endif // STORAGE_LEVELDB_PORT_PORT_EXAMPLE_H_ diff --git a/assign5/openTok/Pods/leveldb-library/port/port_stdcxx.h b/assign5/openTok/Pods/leveldb-library/port/port_stdcxx.h deleted file mode 100644 index e9cb0e5..0000000 --- a/assign5/openTok/Pods/leveldb-library/port/port_stdcxx.h +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright (c) 2018 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_PORT_PORT_STDCXX_H_ -#define STORAGE_LEVELDB_PORT_PORT_STDCXX_H_ - -// port/port_config.h availability is automatically detected via __has_include -// in newer compilers. If LEVELDB_HAS_PORT_CONFIG_H is defined, it overrides the -// configuration detection. -#if defined(LEVELDB_HAS_PORT_CONFIG_H) - -#if LEVELDB_HAS_PORT_CONFIG_H -#include "port/port_config.h" -#endif // LEVELDB_HAS_PORT_CONFIG_H - -#elif defined(__has_include) - -#if __has_include("port/port_config.h") -#include "port/port_config.h" -#endif // __has_include("port/port_config.h") - -#endif // defined(LEVELDB_HAS_PORT_CONFIG_H) - -#if HAVE_CRC32C -#include <crc32c/crc32c.h> -#endif // HAVE_CRC32C -#if HAVE_SNAPPY -#include <snappy.h> -#endif // HAVE_SNAPPY - -#include <cassert> -#include <condition_variable> // NOLINT -#include <cstddef> -#include <cstdint> -#include <mutex> // NOLINT -#include <string> - -#include "port/thread_annotations.h" - -namespace leveldb { -namespace port { - -static const bool kLittleEndian = !LEVELDB_IS_BIG_ENDIAN; - -class CondVar; - -// Thinly wraps std::mutex. -class LOCKABLE Mutex { - public: - Mutex() = default; - ~Mutex() = default; - - Mutex(const Mutex&) = delete; - Mutex& operator=(const Mutex&) = delete; - - void Lock() EXCLUSIVE_LOCK_FUNCTION() { mu_.lock(); } - void Unlock() UNLOCK_FUNCTION() { mu_.unlock(); } - void AssertHeld() ASSERT_EXCLUSIVE_LOCK() {} - - private: - friend class CondVar; - std::mutex mu_; -}; - -// Thinly wraps std::condition_variable. -class CondVar { - public: - explicit CondVar(Mutex* mu) : mu_(mu) { assert(mu != nullptr); } - ~CondVar() = default; - - CondVar(const CondVar&) = delete; - CondVar& operator=(const CondVar&) = delete; - - void Wait() { - std::unique_lock<std::mutex> lock(mu_->mu_, std::adopt_lock); - cv_.wait(lock); - lock.release(); - } - void Signal() { cv_.notify_one(); } - void SignalAll() { cv_.notify_all(); } - - private: - std::condition_variable cv_; - Mutex* const mu_; -}; - -inline bool Snappy_Compress(const char* input, size_t length, - std::string* output) { -#if HAVE_SNAPPY - output->resize(snappy::MaxCompressedLength(length)); - size_t outlen; - snappy::RawCompress(input, length, &(*output)[0], &outlen); - output->resize(outlen); - return true; -#else - // Silence compiler warnings about unused arguments. - (void)input; - (void)length; - (void)output; -#endif // HAVE_SNAPPY - - return false; -} - -inline bool Snappy_GetUncompressedLength(const char* input, size_t length, - size_t* result) { -#if HAVE_SNAPPY - return snappy::GetUncompressedLength(input, length, result); -#else - // Silence compiler warnings about unused arguments. - (void)input; - (void)length; - (void)result; - return false; -#endif // HAVE_SNAPPY -} - -inline bool Snappy_Uncompress(const char* input, size_t length, char* output) { -#if HAVE_SNAPPY - return snappy::RawUncompress(input, length, output); -#else - // Silence compiler warnings about unused arguments. - (void)input; - (void)length; - (void)output; - return false; -#endif // HAVE_SNAPPY -} - -inline bool GetHeapProfile(void (*func)(void*, const char*, int), void* arg) { - // Silence compiler warnings about unused arguments. - (void)func; - (void)arg; - return false; -} - -inline uint32_t AcceleratedCRC32C(uint32_t crc, const char* buf, size_t size) { -#if HAVE_CRC32C - return ::crc32c::Extend(crc, reinterpret_cast<const uint8_t*>(buf), size); -#else - // Silence compiler warnings about unused arguments. - (void)crc; - (void)buf; - (void)size; - return 0; -#endif // HAVE_CRC32C -} - -} // namespace port -} // namespace leveldb - -#endif // STORAGE_LEVELDB_PORT_PORT_STDCXX_H_ diff --git a/assign5/openTok/Pods/leveldb-library/port/thread_annotations.h b/assign5/openTok/Pods/leveldb-library/port/thread_annotations.h deleted file mode 100644 index 1547df9..0000000 --- a/assign5/openTok/Pods/leveldb-library/port/thread_annotations.h +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_PORT_THREAD_ANNOTATIONS_H_ -#define STORAGE_LEVELDB_PORT_THREAD_ANNOTATIONS_H_ - -// Use Clang's thread safety analysis annotations when available. In other -// environments, the macros receive empty definitions. -// Usage documentation: https://clang.llvm.org/docs/ThreadSafetyAnalysis.html - -#if !defined(THREAD_ANNOTATION_ATTRIBUTE__) - -#if defined(__clang__) - -#define THREAD_ANNOTATION_ATTRIBUTE__(x) __attribute__((x)) -#else -#define THREAD_ANNOTATION_ATTRIBUTE__(x) // no-op -#endif - -#endif // !defined(THREAD_ANNOTATION_ATTRIBUTE__) - -#ifndef GUARDED_BY -#define GUARDED_BY(x) THREAD_ANNOTATION_ATTRIBUTE__(guarded_by(x)) -#endif - -#ifndef PT_GUARDED_BY -#define PT_GUARDED_BY(x) THREAD_ANNOTATION_ATTRIBUTE__(pt_guarded_by(x)) -#endif - -#ifndef ACQUIRED_AFTER -#define ACQUIRED_AFTER(...) \ - THREAD_ANNOTATION_ATTRIBUTE__(acquired_after(__VA_ARGS__)) -#endif - -#ifndef ACQUIRED_BEFORE -#define ACQUIRED_BEFORE(...) \ - THREAD_ANNOTATION_ATTRIBUTE__(acquired_before(__VA_ARGS__)) -#endif - -#ifndef EXCLUSIVE_LOCKS_REQUIRED -#define EXCLUSIVE_LOCKS_REQUIRED(...) \ - THREAD_ANNOTATION_ATTRIBUTE__(exclusive_locks_required(__VA_ARGS__)) -#endif - -#ifndef SHARED_LOCKS_REQUIRED -#define SHARED_LOCKS_REQUIRED(...) \ - THREAD_ANNOTATION_ATTRIBUTE__(shared_locks_required(__VA_ARGS__)) -#endif - -#ifndef LOCKS_EXCLUDED -#define LOCKS_EXCLUDED(...) \ - THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(__VA_ARGS__)) -#endif - -#ifndef LOCK_RETURNED -#define LOCK_RETURNED(x) THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x)) -#endif - -#ifndef LOCKABLE -#define LOCKABLE THREAD_ANNOTATION_ATTRIBUTE__(lockable) -#endif - -#ifndef SCOPED_LOCKABLE -#define SCOPED_LOCKABLE THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable) -#endif - -#ifndef EXCLUSIVE_LOCK_FUNCTION -#define EXCLUSIVE_LOCK_FUNCTION(...) \ - THREAD_ANNOTATION_ATTRIBUTE__(exclusive_lock_function(__VA_ARGS__)) -#endif - -#ifndef SHARED_LOCK_FUNCTION -#define SHARED_LOCK_FUNCTION(...) \ - THREAD_ANNOTATION_ATTRIBUTE__(shared_lock_function(__VA_ARGS__)) -#endif - -#ifndef EXCLUSIVE_TRYLOCK_FUNCTION -#define EXCLUSIVE_TRYLOCK_FUNCTION(...) \ - THREAD_ANNOTATION_ATTRIBUTE__(exclusive_trylock_function(__VA_ARGS__)) -#endif - -#ifndef SHARED_TRYLOCK_FUNCTION -#define SHARED_TRYLOCK_FUNCTION(...) \ - THREAD_ANNOTATION_ATTRIBUTE__(shared_trylock_function(__VA_ARGS__)) -#endif - -#ifndef UNLOCK_FUNCTION -#define UNLOCK_FUNCTION(...) \ - THREAD_ANNOTATION_ATTRIBUTE__(unlock_function(__VA_ARGS__)) -#endif - -#ifndef NO_THREAD_SAFETY_ANALYSIS -#define NO_THREAD_SAFETY_ANALYSIS \ - THREAD_ANNOTATION_ATTRIBUTE__(no_thread_safety_analysis) -#endif - -#ifndef ASSERT_EXCLUSIVE_LOCK -#define ASSERT_EXCLUSIVE_LOCK(...) \ - THREAD_ANNOTATION_ATTRIBUTE__(assert_exclusive_lock(__VA_ARGS__)) -#endif - -#ifndef ASSERT_SHARED_LOCK -#define ASSERT_SHARED_LOCK(...) \ - THREAD_ANNOTATION_ATTRIBUTE__(assert_shared_lock(__VA_ARGS__)) -#endif - -#endif // STORAGE_LEVELDB_PORT_THREAD_ANNOTATIONS_H_ diff --git a/assign5/openTok/Pods/leveldb-library/table/block.cc b/assign5/openTok/Pods/leveldb-library/table/block.cc deleted file mode 100644 index ad0ee98..0000000 --- a/assign5/openTok/Pods/leveldb-library/table/block.cc +++ /dev/null @@ -1,266 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Decodes the blocks generated by block_builder.cc. - -#include "table/block.h" - -#include <algorithm> -#include <vector> - -#include "leveldb/comparator.h" -#include "table/format.h" -#include "util/coding.h" -#include "util/logging.h" - -namespace leveldb { - -inline uint32_t Block::NumRestarts() const { - assert(size_ >= sizeof(uint32_t)); - return DecodeFixed32(data_ + size_ - sizeof(uint32_t)); -} - -Block::Block(const BlockContents& contents) - : data_(contents.data.data()), - size_(contents.data.size()), - owned_(contents.heap_allocated) { - if (size_ < sizeof(uint32_t)) { - size_ = 0; // Error marker - } else { - size_t max_restarts_allowed = (size_ - sizeof(uint32_t)) / sizeof(uint32_t); - if (NumRestarts() > max_restarts_allowed) { - // The size is too small for NumRestarts() - size_ = 0; - } else { - restart_offset_ = size_ - (1 + NumRestarts()) * sizeof(uint32_t); - } - } -} - -Block::~Block() { - if (owned_) { - delete[] data_; - } -} - -// Helper routine: decode the next block entry starting at "p", -// storing the number of shared key bytes, non_shared key bytes, -// and the length of the value in "*shared", "*non_shared", and -// "*value_length", respectively. Will not dereference past "limit". -// -// If any errors are detected, returns nullptr. Otherwise, returns a -// pointer to the key delta (just past the three decoded values). -static inline const char* DecodeEntry(const char* p, const char* limit, - uint32_t* shared, uint32_t* non_shared, - uint32_t* value_length) { - if (limit - p < 3) return nullptr; - *shared = reinterpret_cast<const unsigned char*>(p)[0]; - *non_shared = reinterpret_cast<const unsigned char*>(p)[1]; - *value_length = reinterpret_cast<const unsigned char*>(p)[2]; - if ((*shared | *non_shared | *value_length) < 128) { - // Fast path: all three values are encoded in one byte each - p += 3; - } else { - if ((p = GetVarint32Ptr(p, limit, shared)) == nullptr) return nullptr; - if ((p = GetVarint32Ptr(p, limit, non_shared)) == nullptr) return nullptr; - if ((p = GetVarint32Ptr(p, limit, value_length)) == nullptr) return nullptr; - } - - if (static_cast<uint32_t>(limit - p) < (*non_shared + *value_length)) { - return nullptr; - } - return p; -} - -class Block::Iter : public Iterator { - private: - const Comparator* const comparator_; - const char* const data_; // underlying block contents - uint32_t const restarts_; // Offset of restart array (list of fixed32) - uint32_t const num_restarts_; // Number of uint32_t entries in restart array - - // current_ is offset in data_ of current entry. >= restarts_ if !Valid - uint32_t current_; - uint32_t restart_index_; // Index of restart block in which current_ falls - std::string key_; - Slice value_; - Status status_; - - inline int Compare(const Slice& a, const Slice& b) const { - return comparator_->Compare(a, b); - } - - // Return the offset in data_ just past the end of the current entry. - inline uint32_t NextEntryOffset() const { - return (value_.data() + value_.size()) - data_; - } - - uint32_t GetRestartPoint(uint32_t index) { - assert(index < num_restarts_); - return DecodeFixed32(data_ + restarts_ + index * sizeof(uint32_t)); - } - - void SeekToRestartPoint(uint32_t index) { - key_.clear(); - restart_index_ = index; - // current_ will be fixed by ParseNextKey(); - - // ParseNextKey() starts at the end of value_, so set value_ accordingly - uint32_t offset = GetRestartPoint(index); - value_ = Slice(data_ + offset, 0); - } - - public: - Iter(const Comparator* comparator, const char* data, uint32_t restarts, - uint32_t num_restarts) - : comparator_(comparator), - data_(data), - restarts_(restarts), - num_restarts_(num_restarts), - current_(restarts_), - restart_index_(num_restarts_) { - assert(num_restarts_ > 0); - } - - virtual bool Valid() const { return current_ < restarts_; } - virtual Status status() const { return status_; } - virtual Slice key() const { - assert(Valid()); - return key_; - } - virtual Slice value() const { - assert(Valid()); - return value_; - } - - virtual void Next() { - assert(Valid()); - ParseNextKey(); - } - - virtual void Prev() { - assert(Valid()); - - // Scan backwards to a restart point before current_ - const uint32_t original = current_; - while (GetRestartPoint(restart_index_) >= original) { - if (restart_index_ == 0) { - // No more entries - current_ = restarts_; - restart_index_ = num_restarts_; - return; - } - restart_index_--; - } - - SeekToRestartPoint(restart_index_); - do { - // Loop until end of current entry hits the start of original entry - } while (ParseNextKey() && NextEntryOffset() < original); - } - - virtual void Seek(const Slice& target) { - // Binary search in restart array to find the last restart point - // with a key < target - uint32_t left = 0; - uint32_t right = num_restarts_ - 1; - while (left < right) { - uint32_t mid = (left + right + 1) / 2; - uint32_t region_offset = GetRestartPoint(mid); - uint32_t shared, non_shared, value_length; - const char* key_ptr = - DecodeEntry(data_ + region_offset, data_ + restarts_, &shared, - &non_shared, &value_length); - if (key_ptr == nullptr || (shared != 0)) { - CorruptionError(); - return; - } - Slice mid_key(key_ptr, non_shared); - if (Compare(mid_key, target) < 0) { - // Key at "mid" is smaller than "target". Therefore all - // blocks before "mid" are uninteresting. - left = mid; - } else { - // Key at "mid" is >= "target". Therefore all blocks at or - // after "mid" are uninteresting. - right = mid - 1; - } - } - - // Linear search (within restart block) for first key >= target - SeekToRestartPoint(left); - while (true) { - if (!ParseNextKey()) { - return; - } - if (Compare(key_, target) >= 0) { - return; - } - } - } - - virtual void SeekToFirst() { - SeekToRestartPoint(0); - ParseNextKey(); - } - - virtual void SeekToLast() { - SeekToRestartPoint(num_restarts_ - 1); - while (ParseNextKey() && NextEntryOffset() < restarts_) { - // Keep skipping - } - } - - private: - void CorruptionError() { - current_ = restarts_; - restart_index_ = num_restarts_; - status_ = Status::Corruption("bad entry in block"); - key_.clear(); - value_.clear(); - } - - bool ParseNextKey() { - current_ = NextEntryOffset(); - const char* p = data_ + current_; - const char* limit = data_ + restarts_; // Restarts come right after data - if (p >= limit) { - // No more entries to return. Mark as invalid. - current_ = restarts_; - restart_index_ = num_restarts_; - return false; - } - - // Decode next entry - uint32_t shared, non_shared, value_length; - p = DecodeEntry(p, limit, &shared, &non_shared, &value_length); - if (p == nullptr || key_.size() < shared) { - CorruptionError(); - return false; - } else { - key_.resize(shared); - key_.append(p, non_shared); - value_ = Slice(p + non_shared, value_length); - while (restart_index_ + 1 < num_restarts_ && - GetRestartPoint(restart_index_ + 1) < current_) { - ++restart_index_; - } - return true; - } - } -}; - -Iterator* Block::NewIterator(const Comparator* comparator) { - if (size_ < sizeof(uint32_t)) { - return NewErrorIterator(Status::Corruption("bad block contents")); - } - const uint32_t num_restarts = NumRestarts(); - if (num_restarts == 0) { - return NewEmptyIterator(); - } else { - return new Iter(comparator, data_, restart_offset_, num_restarts); - } -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/table/block.h b/assign5/openTok/Pods/leveldb-library/table/block.h deleted file mode 100644 index c8f1f7b..0000000 --- a/assign5/openTok/Pods/leveldb-library/table/block.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_TABLE_BLOCK_H_ -#define STORAGE_LEVELDB_TABLE_BLOCK_H_ - -#include <stddef.h> -#include <stdint.h> - -#include "leveldb/iterator.h" - -namespace leveldb { - -struct BlockContents; -class Comparator; - -class Block { - public: - // Initialize the block with the specified contents. - explicit Block(const BlockContents& contents); - - Block(const Block&) = delete; - Block& operator=(const Block&) = delete; - - ~Block(); - - size_t size() const { return size_; } - Iterator* NewIterator(const Comparator* comparator); - - private: - class Iter; - - uint32_t NumRestarts() const; - - const char* data_; - size_t size_; - uint32_t restart_offset_; // Offset in data_ of restart array - bool owned_; // Block owns data_[] -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_TABLE_BLOCK_H_ diff --git a/assign5/openTok/Pods/leveldb-library/table/block_builder.cc b/assign5/openTok/Pods/leveldb-library/table/block_builder.cc deleted file mode 100644 index f7cb1b0..0000000 --- a/assign5/openTok/Pods/leveldb-library/table/block_builder.cc +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// BlockBuilder generates blocks where keys are prefix-compressed: -// -// When we store a key, we drop the prefix shared with the previous -// string. This helps reduce the space requirement significantly. -// Furthermore, once every K keys, we do not apply the prefix -// compression and store the entire key. We call this a "restart -// point". The tail end of the block stores the offsets of all of the -// restart points, and can be used to do a binary search when looking -// for a particular key. Values are stored as-is (without compression) -// immediately following the corresponding key. -// -// An entry for a particular key-value pair has the form: -// shared_bytes: varint32 -// unshared_bytes: varint32 -// value_length: varint32 -// key_delta: char[unshared_bytes] -// value: char[value_length] -// shared_bytes == 0 for restart points. -// -// The trailer of the block has the form: -// restarts: uint32[num_restarts] -// num_restarts: uint32 -// restarts[i] contains the offset within the block of the ith restart point. - -#include "table/block_builder.h" - -#include <assert.h> - -#include <algorithm> - -#include "leveldb/comparator.h" -#include "leveldb/table_builder.h" -#include "util/coding.h" - -namespace leveldb { - -BlockBuilder::BlockBuilder(const Options* options) - : options_(options), restarts_(), counter_(0), finished_(false) { - assert(options->block_restart_interval >= 1); - restarts_.push_back(0); // First restart point is at offset 0 -} - -void BlockBuilder::Reset() { - buffer_.clear(); - restarts_.clear(); - restarts_.push_back(0); // First restart point is at offset 0 - counter_ = 0; - finished_ = false; - last_key_.clear(); -} - -size_t BlockBuilder::CurrentSizeEstimate() const { - return (buffer_.size() + // Raw data buffer - restarts_.size() * sizeof(uint32_t) + // Restart array - sizeof(uint32_t)); // Restart array length -} - -Slice BlockBuilder::Finish() { - // Append restart array - for (size_t i = 0; i < restarts_.size(); i++) { - PutFixed32(&buffer_, restarts_[i]); - } - PutFixed32(&buffer_, restarts_.size()); - finished_ = true; - return Slice(buffer_); -} - -void BlockBuilder::Add(const Slice& key, const Slice& value) { - Slice last_key_piece(last_key_); - assert(!finished_); - assert(counter_ <= options_->block_restart_interval); - assert(buffer_.empty() // No values yet? - || options_->comparator->Compare(key, last_key_piece) > 0); - size_t shared = 0; - if (counter_ < options_->block_restart_interval) { - // See how much sharing to do with previous string - const size_t min_length = std::min(last_key_piece.size(), key.size()); - while ((shared < min_length) && (last_key_piece[shared] == key[shared])) { - shared++; - } - } else { - // Restart compression - restarts_.push_back(buffer_.size()); - counter_ = 0; - } - const size_t non_shared = key.size() - shared; - - // Add "<shared><non_shared><value_size>" to buffer_ - PutVarint32(&buffer_, shared); - PutVarint32(&buffer_, non_shared); - PutVarint32(&buffer_, value.size()); - - // Add string delta to buffer_ followed by value - buffer_.append(key.data() + shared, non_shared); - buffer_.append(value.data(), value.size()); - - // Update state - last_key_.resize(shared); - last_key_.append(key.data() + shared, non_shared); - assert(Slice(last_key_) == key); - counter_++; -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/table/block_builder.h b/assign5/openTok/Pods/leveldb-library/table/block_builder.h deleted file mode 100644 index f91f5e6..0000000 --- a/assign5/openTok/Pods/leveldb-library/table/block_builder.h +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_TABLE_BLOCK_BUILDER_H_ -#define STORAGE_LEVELDB_TABLE_BLOCK_BUILDER_H_ - -#include <stdint.h> - -#include <vector> - -#include "leveldb/slice.h" - -namespace leveldb { - -struct Options; - -class BlockBuilder { - public: - explicit BlockBuilder(const Options* options); - - BlockBuilder(const BlockBuilder&) = delete; - BlockBuilder& operator=(const BlockBuilder&) = delete; - - // Reset the contents as if the BlockBuilder was just constructed. - void Reset(); - - // REQUIRES: Finish() has not been called since the last call to Reset(). - // REQUIRES: key is larger than any previously added key - void Add(const Slice& key, const Slice& value); - - // Finish building the block and return a slice that refers to the - // block contents. The returned slice will remain valid for the - // lifetime of this builder or until Reset() is called. - Slice Finish(); - - // Returns an estimate of the current (uncompressed) size of the block - // we are building. - size_t CurrentSizeEstimate() const; - - // Return true iff no entries have been added since the last Reset() - bool empty() const { return buffer_.empty(); } - - private: - const Options* options_; - std::string buffer_; // Destination buffer - std::vector<uint32_t> restarts_; // Restart points - int counter_; // Number of entries emitted since restart - bool finished_; // Has Finish() been called? - std::string last_key_; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_TABLE_BLOCK_BUILDER_H_ diff --git a/assign5/openTok/Pods/leveldb-library/table/filter_block.cc b/assign5/openTok/Pods/leveldb-library/table/filter_block.cc deleted file mode 100644 index 09ec009..0000000 --- a/assign5/openTok/Pods/leveldb-library/table/filter_block.cc +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "table/filter_block.h" - -#include "leveldb/filter_policy.h" -#include "util/coding.h" - -namespace leveldb { - -// See doc/table_format.md for an explanation of the filter block format. - -// Generate new filter every 2KB of data -static const size_t kFilterBaseLg = 11; -static const size_t kFilterBase = 1 << kFilterBaseLg; - -FilterBlockBuilder::FilterBlockBuilder(const FilterPolicy* policy) - : policy_(policy) {} - -void FilterBlockBuilder::StartBlock(uint64_t block_offset) { - uint64_t filter_index = (block_offset / kFilterBase); - assert(filter_index >= filter_offsets_.size()); - while (filter_index > filter_offsets_.size()) { - GenerateFilter(); - } -} - -void FilterBlockBuilder::AddKey(const Slice& key) { - Slice k = key; - start_.push_back(keys_.size()); - keys_.append(k.data(), k.size()); -} - -Slice FilterBlockBuilder::Finish() { - if (!start_.empty()) { - GenerateFilter(); - } - - // Append array of per-filter offsets - const uint32_t array_offset = result_.size(); - for (size_t i = 0; i < filter_offsets_.size(); i++) { - PutFixed32(&result_, filter_offsets_[i]); - } - - PutFixed32(&result_, array_offset); - result_.push_back(kFilterBaseLg); // Save encoding parameter in result - return Slice(result_); -} - -void FilterBlockBuilder::GenerateFilter() { - const size_t num_keys = start_.size(); - if (num_keys == 0) { - // Fast path if there are no keys for this filter - filter_offsets_.push_back(result_.size()); - return; - } - - // Make list of keys from flattened key structure - start_.push_back(keys_.size()); // Simplify length computation - tmp_keys_.resize(num_keys); - for (size_t i = 0; i < num_keys; i++) { - const char* base = keys_.data() + start_[i]; - size_t length = start_[i + 1] - start_[i]; - tmp_keys_[i] = Slice(base, length); - } - - // Generate filter for current set of keys and append to result_. - filter_offsets_.push_back(result_.size()); - policy_->CreateFilter(&tmp_keys_[0], static_cast<int>(num_keys), &result_); - - tmp_keys_.clear(); - keys_.clear(); - start_.clear(); -} - -FilterBlockReader::FilterBlockReader(const FilterPolicy* policy, - const Slice& contents) - : policy_(policy), data_(nullptr), offset_(nullptr), num_(0), base_lg_(0) { - size_t n = contents.size(); - if (n < 5) return; // 1 byte for base_lg_ and 4 for start of offset array - base_lg_ = contents[n - 1]; - uint32_t last_word = DecodeFixed32(contents.data() + n - 5); - if (last_word > n - 5) return; - data_ = contents.data(); - offset_ = data_ + last_word; - num_ = (n - 5 - last_word) / 4; -} - -bool FilterBlockReader::KeyMayMatch(uint64_t block_offset, const Slice& key) { - uint64_t index = block_offset >> base_lg_; - if (index < num_) { - uint32_t start = DecodeFixed32(offset_ + index * 4); - uint32_t limit = DecodeFixed32(offset_ + index * 4 + 4); - if (start <= limit && limit <= static_cast<size_t>(offset_ - data_)) { - Slice filter = Slice(data_ + start, limit - start); - return policy_->KeyMayMatch(key, filter); - } else if (start == limit) { - // Empty filters do not match any keys - return false; - } - } - return true; // Errors are treated as potential matches -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/table/filter_block.h b/assign5/openTok/Pods/leveldb-library/table/filter_block.h deleted file mode 100644 index 73b5399..0000000 --- a/assign5/openTok/Pods/leveldb-library/table/filter_block.h +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// A filter block is stored near the end of a Table file. It contains -// filters (e.g., bloom filters) for all data blocks in the table combined -// into a single filter block. - -#ifndef STORAGE_LEVELDB_TABLE_FILTER_BLOCK_H_ -#define STORAGE_LEVELDB_TABLE_FILTER_BLOCK_H_ - -#include <stddef.h> -#include <stdint.h> - -#include <string> -#include <vector> - -#include "leveldb/slice.h" -#include "util/hash.h" - -namespace leveldb { - -class FilterPolicy; - -// A FilterBlockBuilder is used to construct all of the filters for a -// particular Table. It generates a single string which is stored as -// a special block in the Table. -// -// The sequence of calls to FilterBlockBuilder must match the regexp: -// (StartBlock AddKey*)* Finish -class FilterBlockBuilder { - public: - explicit FilterBlockBuilder(const FilterPolicy*); - - FilterBlockBuilder(const FilterBlockBuilder&) = delete; - FilterBlockBuilder& operator=(const FilterBlockBuilder&) = delete; - - void StartBlock(uint64_t block_offset); - void AddKey(const Slice& key); - Slice Finish(); - - private: - void GenerateFilter(); - - const FilterPolicy* policy_; - std::string keys_; // Flattened key contents - std::vector<size_t> start_; // Starting index in keys_ of each key - std::string result_; // Filter data computed so far - std::vector<Slice> tmp_keys_; // policy_->CreateFilter() argument - std::vector<uint32_t> filter_offsets_; -}; - -class FilterBlockReader { - public: - // REQUIRES: "contents" and *policy must stay live while *this is live. - FilterBlockReader(const FilterPolicy* policy, const Slice& contents); - bool KeyMayMatch(uint64_t block_offset, const Slice& key); - - private: - const FilterPolicy* policy_; - const char* data_; // Pointer to filter data (at block-start) - const char* offset_; // Pointer to beginning of offset array (at block-end) - size_t num_; // Number of entries in offset array - size_t base_lg_; // Encoding parameter (see kFilterBaseLg in .cc file) -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_TABLE_FILTER_BLOCK_H_ diff --git a/assign5/openTok/Pods/leveldb-library/table/format.cc b/assign5/openTok/Pods/leveldb-library/table/format.cc deleted file mode 100644 index e183977..0000000 --- a/assign5/openTok/Pods/leveldb-library/table/format.cc +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "table/format.h" - -#include "leveldb/env.h" -#include "port/port.h" -#include "table/block.h" -#include "util/coding.h" -#include "util/crc32c.h" - -namespace leveldb { - -void BlockHandle::EncodeTo(std::string* dst) const { - // Sanity check that all fields have been set - assert(offset_ != ~static_cast<uint64_t>(0)); - assert(size_ != ~static_cast<uint64_t>(0)); - PutVarint64(dst, offset_); - PutVarint64(dst, size_); -} - -Status BlockHandle::DecodeFrom(Slice* input) { - if (GetVarint64(input, &offset_) && GetVarint64(input, &size_)) { - return Status::OK(); - } else { - return Status::Corruption("bad block handle"); - } -} - -void Footer::EncodeTo(std::string* dst) const { - const size_t original_size = dst->size(); - metaindex_handle_.EncodeTo(dst); - index_handle_.EncodeTo(dst); - dst->resize(2 * BlockHandle::kMaxEncodedLength); // Padding - PutFixed32(dst, static_cast<uint32_t>(kTableMagicNumber & 0xffffffffu)); - PutFixed32(dst, static_cast<uint32_t>(kTableMagicNumber >> 32)); - assert(dst->size() == original_size + kEncodedLength); - (void)original_size; // Disable unused variable warning. -} - -Status Footer::DecodeFrom(Slice* input) { - const char* magic_ptr = input->data() + kEncodedLength - 8; - const uint32_t magic_lo = DecodeFixed32(magic_ptr); - const uint32_t magic_hi = DecodeFixed32(magic_ptr + 4); - const uint64_t magic = ((static_cast<uint64_t>(magic_hi) << 32) | - (static_cast<uint64_t>(magic_lo))); - if (magic != kTableMagicNumber) { - return Status::Corruption("not an sstable (bad magic number)"); - } - - Status result = metaindex_handle_.DecodeFrom(input); - if (result.ok()) { - result = index_handle_.DecodeFrom(input); - } - if (result.ok()) { - // We skip over any leftover data (just padding for now) in "input" - const char* end = magic_ptr + 8; - *input = Slice(end, input->data() + input->size() - end); - } - return result; -} - -Status ReadBlock(RandomAccessFile* file, const ReadOptions& options, - const BlockHandle& handle, BlockContents* result) { - result->data = Slice(); - result->cachable = false; - result->heap_allocated = false; - - // Read the block contents as well as the type/crc footer. - // See table_builder.cc for the code that built this structure. - size_t n = static_cast<size_t>(handle.size()); - char* buf = new char[n + kBlockTrailerSize]; - Slice contents; - Status s = file->Read(handle.offset(), n + kBlockTrailerSize, &contents, buf); - if (!s.ok()) { - delete[] buf; - return s; - } - if (contents.size() != n + kBlockTrailerSize) { - delete[] buf; - return Status::Corruption("truncated block read"); - } - - // Check the crc of the type and the block contents - const char* data = contents.data(); // Pointer to where Read put the data - if (options.verify_checksums) { - const uint32_t crc = crc32c::Unmask(DecodeFixed32(data + n + 1)); - const uint32_t actual = crc32c::Value(data, n + 1); - if (actual != crc) { - delete[] buf; - s = Status::Corruption("block checksum mismatch"); - return s; - } - } - - switch (data[n]) { - case kNoCompression: - if (data != buf) { - // File implementation gave us pointer to some other data. - // Use it directly under the assumption that it will be live - // while the file is open. - delete[] buf; - result->data = Slice(data, n); - result->heap_allocated = false; - result->cachable = false; // Do not double-cache - } else { - result->data = Slice(buf, n); - result->heap_allocated = true; - result->cachable = true; - } - - // Ok - break; - case kSnappyCompression: { - size_t ulength = 0; - if (!port::Snappy_GetUncompressedLength(data, n, &ulength)) { - delete[] buf; - return Status::Corruption("corrupted compressed block contents"); - } - char* ubuf = new char[ulength]; - if (!port::Snappy_Uncompress(data, n, ubuf)) { - delete[] buf; - delete[] ubuf; - return Status::Corruption("corrupted compressed block contents"); - } - delete[] buf; - result->data = Slice(ubuf, ulength); - result->heap_allocated = true; - result->cachable = true; - break; - } - default: - delete[] buf; - return Status::Corruption("bad block type"); - } - - return Status::OK(); -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/table/format.h b/assign5/openTok/Pods/leveldb-library/table/format.h deleted file mode 100644 index 2ad145c..0000000 --- a/assign5/openTok/Pods/leveldb-library/table/format.h +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_TABLE_FORMAT_H_ -#define STORAGE_LEVELDB_TABLE_FORMAT_H_ - -#include <stdint.h> - -#include <string> - -#include "leveldb/slice.h" -#include "leveldb/status.h" -#include "leveldb/table_builder.h" - -namespace leveldb { - -class Block; -class RandomAccessFile; -struct ReadOptions; - -// BlockHandle is a pointer to the extent of a file that stores a data -// block or a meta block. -class BlockHandle { - public: - // Maximum encoding length of a BlockHandle - enum { kMaxEncodedLength = 10 + 10 }; - - BlockHandle(); - - // The offset of the block in the file. - uint64_t offset() const { return offset_; } - void set_offset(uint64_t offset) { offset_ = offset; } - - // The size of the stored block - uint64_t size() const { return size_; } - void set_size(uint64_t size) { size_ = size; } - - void EncodeTo(std::string* dst) const; - Status DecodeFrom(Slice* input); - - private: - uint64_t offset_; - uint64_t size_; -}; - -// Footer encapsulates the fixed information stored at the tail -// end of every table file. -class Footer { - public: - // Encoded length of a Footer. Note that the serialization of a - // Footer will always occupy exactly this many bytes. It consists - // of two block handles and a magic number. - enum { kEncodedLength = 2 * BlockHandle::kMaxEncodedLength + 8 }; - - Footer() {} - - // The block handle for the metaindex block of the table - const BlockHandle& metaindex_handle() const { return metaindex_handle_; } - void set_metaindex_handle(const BlockHandle& h) { metaindex_handle_ = h; } - - // The block handle for the index block of the table - const BlockHandle& index_handle() const { return index_handle_; } - void set_index_handle(const BlockHandle& h) { index_handle_ = h; } - - void EncodeTo(std::string* dst) const; - Status DecodeFrom(Slice* input); - - private: - BlockHandle metaindex_handle_; - BlockHandle index_handle_; -}; - -// kTableMagicNumber was picked by running -// echo http://code.google.com/p/leveldb/ | sha1sum -// and taking the leading 64 bits. -static const uint64_t kTableMagicNumber = 0xdb4775248b80fb57ull; - -// 1-byte type + 32-bit crc -static const size_t kBlockTrailerSize = 5; - -struct BlockContents { - Slice data; // Actual contents of data - bool cachable; // True iff data can be cached - bool heap_allocated; // True iff caller should delete[] data.data() -}; - -// Read the block identified by "handle" from "file". On failure -// return non-OK. On success fill *result and return OK. -Status ReadBlock(RandomAccessFile* file, const ReadOptions& options, - const BlockHandle& handle, BlockContents* result); - -// Implementation details follow. Clients should ignore, - -inline BlockHandle::BlockHandle() - : offset_(~static_cast<uint64_t>(0)), size_(~static_cast<uint64_t>(0)) {} - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_TABLE_FORMAT_H_ diff --git a/assign5/openTok/Pods/leveldb-library/table/iterator.cc b/assign5/openTok/Pods/leveldb-library/table/iterator.cc deleted file mode 100644 index dfef083..0000000 --- a/assign5/openTok/Pods/leveldb-library/table/iterator.cc +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/iterator.h" - -namespace leveldb { - -Iterator::Iterator() { - cleanup_head_.function = nullptr; - cleanup_head_.next = nullptr; -} - -Iterator::~Iterator() { - if (!cleanup_head_.IsEmpty()) { - cleanup_head_.Run(); - for (CleanupNode* node = cleanup_head_.next; node != nullptr;) { - node->Run(); - CleanupNode* next_node = node->next; - delete node; - node = next_node; - } - } -} - -void Iterator::RegisterCleanup(CleanupFunction func, void* arg1, void* arg2) { - assert(func != nullptr); - CleanupNode* node; - if (cleanup_head_.IsEmpty()) { - node = &cleanup_head_; - } else { - node = new CleanupNode(); - node->next = cleanup_head_.next; - cleanup_head_.next = node; - } - node->function = func; - node->arg1 = arg1; - node->arg2 = arg2; -} - -namespace { - -class EmptyIterator : public Iterator { - public: - EmptyIterator(const Status& s) : status_(s) {} - ~EmptyIterator() override = default; - - bool Valid() const override { return false; } - void Seek(const Slice& target) override {} - void SeekToFirst() override {} - void SeekToLast() override {} - void Next() override { assert(false); } - void Prev() override { assert(false); } - Slice key() const override { - assert(false); - return Slice(); - } - Slice value() const override { - assert(false); - return Slice(); - } - Status status() const override { return status_; } - - private: - Status status_; -}; - -} // anonymous namespace - -Iterator* NewEmptyIterator() { return new EmptyIterator(Status::OK()); } - -Iterator* NewErrorIterator(const Status& status) { - return new EmptyIterator(status); -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/table/iterator_wrapper.h b/assign5/openTok/Pods/leveldb-library/table/iterator_wrapper.h deleted file mode 100644 index c230572..0000000 --- a/assign5/openTok/Pods/leveldb-library/table/iterator_wrapper.h +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_TABLE_ITERATOR_WRAPPER_H_ -#define STORAGE_LEVELDB_TABLE_ITERATOR_WRAPPER_H_ - -#include "leveldb/iterator.h" -#include "leveldb/slice.h" - -namespace leveldb { - -// A internal wrapper class with an interface similar to Iterator that -// caches the valid() and key() results for an underlying iterator. -// This can help avoid virtual function calls and also gives better -// cache locality. -class IteratorWrapper { - public: - IteratorWrapper() : iter_(nullptr), valid_(false) {} - explicit IteratorWrapper(Iterator* iter) : iter_(nullptr) { Set(iter); } - ~IteratorWrapper() { delete iter_; } - Iterator* iter() const { return iter_; } - - // Takes ownership of "iter" and will delete it when destroyed, or - // when Set() is invoked again. - void Set(Iterator* iter) { - delete iter_; - iter_ = iter; - if (iter_ == nullptr) { - valid_ = false; - } else { - Update(); - } - } - - // Iterator interface methods - bool Valid() const { return valid_; } - Slice key() const { - assert(Valid()); - return key_; - } - Slice value() const { - assert(Valid()); - return iter_->value(); - } - // Methods below require iter() != nullptr - Status status() const { - assert(iter_); - return iter_->status(); - } - void Next() { - assert(iter_); - iter_->Next(); - Update(); - } - void Prev() { - assert(iter_); - iter_->Prev(); - Update(); - } - void Seek(const Slice& k) { - assert(iter_); - iter_->Seek(k); - Update(); - } - void SeekToFirst() { - assert(iter_); - iter_->SeekToFirst(); - Update(); - } - void SeekToLast() { - assert(iter_); - iter_->SeekToLast(); - Update(); - } - - private: - void Update() { - valid_ = iter_->Valid(); - if (valid_) { - key_ = iter_->key(); - } - } - - Iterator* iter_; - bool valid_; - Slice key_; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_TABLE_ITERATOR_WRAPPER_H_ diff --git a/assign5/openTok/Pods/leveldb-library/table/merger.cc b/assign5/openTok/Pods/leveldb-library/table/merger.cc deleted file mode 100644 index 1bbc6cf..0000000 --- a/assign5/openTok/Pods/leveldb-library/table/merger.cc +++ /dev/null @@ -1,191 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "table/merger.h" - -#include "leveldb/comparator.h" -#include "leveldb/iterator.h" -#include "table/iterator_wrapper.h" - -namespace leveldb { - -namespace { -class MergingIterator : public Iterator { - public: - MergingIterator(const Comparator* comparator, Iterator** children, int n) - : comparator_(comparator), - children_(new IteratorWrapper[n]), - n_(n), - current_(nullptr), - direction_(kForward) { - for (int i = 0; i < n; i++) { - children_[i].Set(children[i]); - } - } - - virtual ~MergingIterator() { delete[] children_; } - - virtual bool Valid() const { return (current_ != nullptr); } - - virtual void SeekToFirst() { - for (int i = 0; i < n_; i++) { - children_[i].SeekToFirst(); - } - FindSmallest(); - direction_ = kForward; - } - - virtual void SeekToLast() { - for (int i = 0; i < n_; i++) { - children_[i].SeekToLast(); - } - FindLargest(); - direction_ = kReverse; - } - - virtual void Seek(const Slice& target) { - for (int i = 0; i < n_; i++) { - children_[i].Seek(target); - } - FindSmallest(); - direction_ = kForward; - } - - virtual void Next() { - assert(Valid()); - - // Ensure that all children are positioned after key(). - // If we are moving in the forward direction, it is already - // true for all of the non-current_ children since current_ is - // the smallest child and key() == current_->key(). Otherwise, - // we explicitly position the non-current_ children. - if (direction_ != kForward) { - for (int i = 0; i < n_; i++) { - IteratorWrapper* child = &children_[i]; - if (child != current_) { - child->Seek(key()); - if (child->Valid() && - comparator_->Compare(key(), child->key()) == 0) { - child->Next(); - } - } - } - direction_ = kForward; - } - - current_->Next(); - FindSmallest(); - } - - virtual void Prev() { - assert(Valid()); - - // Ensure that all children are positioned before key(). - // If we are moving in the reverse direction, it is already - // true for all of the non-current_ children since current_ is - // the largest child and key() == current_->key(). Otherwise, - // we explicitly position the non-current_ children. - if (direction_ != kReverse) { - for (int i = 0; i < n_; i++) { - IteratorWrapper* child = &children_[i]; - if (child != current_) { - child->Seek(key()); - if (child->Valid()) { - // Child is at first entry >= key(). Step back one to be < key() - child->Prev(); - } else { - // Child has no entries >= key(). Position at last entry. - child->SeekToLast(); - } - } - } - direction_ = kReverse; - } - - current_->Prev(); - FindLargest(); - } - - virtual Slice key() const { - assert(Valid()); - return current_->key(); - } - - virtual Slice value() const { - assert(Valid()); - return current_->value(); - } - - virtual Status status() const { - Status status; - for (int i = 0; i < n_; i++) { - status = children_[i].status(); - if (!status.ok()) { - break; - } - } - return status; - } - - private: - // Which direction is the iterator moving? - enum Direction { kForward, kReverse }; - - void FindSmallest(); - void FindLargest(); - - // We might want to use a heap in case there are lots of children. - // For now we use a simple array since we expect a very small number - // of children in leveldb. - const Comparator* comparator_; - IteratorWrapper* children_; - int n_; - IteratorWrapper* current_; - Direction direction_; -}; - -void MergingIterator::FindSmallest() { - IteratorWrapper* smallest = nullptr; - for (int i = 0; i < n_; i++) { - IteratorWrapper* child = &children_[i]; - if (child->Valid()) { - if (smallest == nullptr) { - smallest = child; - } else if (comparator_->Compare(child->key(), smallest->key()) < 0) { - smallest = child; - } - } - } - current_ = smallest; -} - -void MergingIterator::FindLargest() { - IteratorWrapper* largest = nullptr; - for (int i = n_ - 1; i >= 0; i--) { - IteratorWrapper* child = &children_[i]; - if (child->Valid()) { - if (largest == nullptr) { - largest = child; - } else if (comparator_->Compare(child->key(), largest->key()) > 0) { - largest = child; - } - } - } - current_ = largest; -} -} // namespace - -Iterator* NewMergingIterator(const Comparator* comparator, Iterator** children, - int n) { - assert(n >= 0); - if (n == 0) { - return NewEmptyIterator(); - } else if (n == 1) { - return children[0]; - } else { - return new MergingIterator(comparator, children, n); - } -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/table/merger.h b/assign5/openTok/Pods/leveldb-library/table/merger.h deleted file mode 100644 index 41cedc5..0000000 --- a/assign5/openTok/Pods/leveldb-library/table/merger.h +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_TABLE_MERGER_H_ -#define STORAGE_LEVELDB_TABLE_MERGER_H_ - -namespace leveldb { - -class Comparator; -class Iterator; - -// Return an iterator that provided the union of the data in -// children[0,n-1]. Takes ownership of the child iterators and -// will delete them when the result iterator is deleted. -// -// The result does no duplicate suppression. I.e., if a particular -// key is present in K child iterators, it will be yielded K times. -// -// REQUIRES: n >= 0 -Iterator* NewMergingIterator(const Comparator* comparator, Iterator** children, - int n); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_TABLE_MERGER_H_ diff --git a/assign5/openTok/Pods/leveldb-library/table/table.cc b/assign5/openTok/Pods/leveldb-library/table/table.cc deleted file mode 100644 index b07bc88..0000000 --- a/assign5/openTok/Pods/leveldb-library/table/table.cc +++ /dev/null @@ -1,273 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/table.h" - -#include "leveldb/cache.h" -#include "leveldb/comparator.h" -#include "leveldb/env.h" -#include "leveldb/filter_policy.h" -#include "leveldb/options.h" -#include "table/block.h" -#include "table/filter_block.h" -#include "table/format.h" -#include "table/two_level_iterator.h" -#include "util/coding.h" - -namespace leveldb { - -struct Table::Rep { - ~Rep() { - delete filter; - delete[] filter_data; - delete index_block; - } - - Options options; - Status status; - RandomAccessFile* file; - uint64_t cache_id; - FilterBlockReader* filter; - const char* filter_data; - - BlockHandle metaindex_handle; // Handle to metaindex_block: saved from footer - Block* index_block; -}; - -Status Table::Open(const Options& options, RandomAccessFile* file, - uint64_t size, Table** table) { - *table = nullptr; - if (size < Footer::kEncodedLength) { - return Status::Corruption("file is too short to be an sstable"); - } - - char footer_space[Footer::kEncodedLength]; - Slice footer_input; - Status s = file->Read(size - Footer::kEncodedLength, Footer::kEncodedLength, - &footer_input, footer_space); - if (!s.ok()) return s; - - Footer footer; - s = footer.DecodeFrom(&footer_input); - if (!s.ok()) return s; - - // Read the index block - BlockContents index_block_contents; - if (s.ok()) { - ReadOptions opt; - if (options.paranoid_checks) { - opt.verify_checksums = true; - } - s = ReadBlock(file, opt, footer.index_handle(), &index_block_contents); - } - - if (s.ok()) { - // We've successfully read the footer and the index block: we're - // ready to serve requests. - Block* index_block = new Block(index_block_contents); - Rep* rep = new Table::Rep; - rep->options = options; - rep->file = file; - rep->metaindex_handle = footer.metaindex_handle(); - rep->index_block = index_block; - rep->cache_id = (options.block_cache ? options.block_cache->NewId() : 0); - rep->filter_data = nullptr; - rep->filter = nullptr; - *table = new Table(rep); - (*table)->ReadMeta(footer); - } - - return s; -} - -void Table::ReadMeta(const Footer& footer) { - if (rep_->options.filter_policy == nullptr) { - return; // Do not need any metadata - } - - // TODO(sanjay): Skip this if footer.metaindex_handle() size indicates - // it is an empty block. - ReadOptions opt; - if (rep_->options.paranoid_checks) { - opt.verify_checksums = true; - } - BlockContents contents; - if (!ReadBlock(rep_->file, opt, footer.metaindex_handle(), &contents).ok()) { - // Do not propagate errors since meta info is not needed for operation - return; - } - Block* meta = new Block(contents); - - Iterator* iter = meta->NewIterator(BytewiseComparator()); - std::string key = "filter."; - key.append(rep_->options.filter_policy->Name()); - iter->Seek(key); - if (iter->Valid() && iter->key() == Slice(key)) { - ReadFilter(iter->value()); - } - delete iter; - delete meta; -} - -void Table::ReadFilter(const Slice& filter_handle_value) { - Slice v = filter_handle_value; - BlockHandle filter_handle; - if (!filter_handle.DecodeFrom(&v).ok()) { - return; - } - - // We might want to unify with ReadBlock() if we start - // requiring checksum verification in Table::Open. - ReadOptions opt; - if (rep_->options.paranoid_checks) { - opt.verify_checksums = true; - } - BlockContents block; - if (!ReadBlock(rep_->file, opt, filter_handle, &block).ok()) { - return; - } - if (block.heap_allocated) { - rep_->filter_data = block.data.data(); // Will need to delete later - } - rep_->filter = new FilterBlockReader(rep_->options.filter_policy, block.data); -} - -Table::~Table() { delete rep_; } - -static void DeleteBlock(void* arg, void* ignored) { - delete reinterpret_cast<Block*>(arg); -} - -static void DeleteCachedBlock(const Slice& key, void* value) { - Block* block = reinterpret_cast<Block*>(value); - delete block; -} - -static void ReleaseBlock(void* arg, void* h) { - Cache* cache = reinterpret_cast<Cache*>(arg); - Cache::Handle* handle = reinterpret_cast<Cache::Handle*>(h); - cache->Release(handle); -} - -// Convert an index iterator value (i.e., an encoded BlockHandle) -// into an iterator over the contents of the corresponding block. -Iterator* Table::BlockReader(void* arg, const ReadOptions& options, - const Slice& index_value) { - Table* table = reinterpret_cast<Table*>(arg); - Cache* block_cache = table->rep_->options.block_cache; - Block* block = nullptr; - Cache::Handle* cache_handle = nullptr; - - BlockHandle handle; - Slice input = index_value; - Status s = handle.DecodeFrom(&input); - // We intentionally allow extra stuff in index_value so that we - // can add more features in the future. - - if (s.ok()) { - BlockContents contents; - if (block_cache != nullptr) { - char cache_key_buffer[16]; - EncodeFixed64(cache_key_buffer, table->rep_->cache_id); - EncodeFixed64(cache_key_buffer + 8, handle.offset()); - Slice key(cache_key_buffer, sizeof(cache_key_buffer)); - cache_handle = block_cache->Lookup(key); - if (cache_handle != nullptr) { - block = reinterpret_cast<Block*>(block_cache->Value(cache_handle)); - } else { - s = ReadBlock(table->rep_->file, options, handle, &contents); - if (s.ok()) { - block = new Block(contents); - if (contents.cachable && options.fill_cache) { - cache_handle = block_cache->Insert(key, block, block->size(), - &DeleteCachedBlock); - } - } - } - } else { - s = ReadBlock(table->rep_->file, options, handle, &contents); - if (s.ok()) { - block = new Block(contents); - } - } - } - - Iterator* iter; - if (block != nullptr) { - iter = block->NewIterator(table->rep_->options.comparator); - if (cache_handle == nullptr) { - iter->RegisterCleanup(&DeleteBlock, block, nullptr); - } else { - iter->RegisterCleanup(&ReleaseBlock, block_cache, cache_handle); - } - } else { - iter = NewErrorIterator(s); - } - return iter; -} - -Iterator* Table::NewIterator(const ReadOptions& options) const { - return NewTwoLevelIterator( - rep_->index_block->NewIterator(rep_->options.comparator), - &Table::BlockReader, const_cast<Table*>(this), options); -} - -Status Table::InternalGet(const ReadOptions& options, const Slice& k, void* arg, - void (*handle_result)(void*, const Slice&, - const Slice&)) { - Status s; - Iterator* iiter = rep_->index_block->NewIterator(rep_->options.comparator); - iiter->Seek(k); - if (iiter->Valid()) { - Slice handle_value = iiter->value(); - FilterBlockReader* filter = rep_->filter; - BlockHandle handle; - if (filter != nullptr && handle.DecodeFrom(&handle_value).ok() && - !filter->KeyMayMatch(handle.offset(), k)) { - // Not found - } else { - Iterator* block_iter = BlockReader(this, options, iiter->value()); - block_iter->Seek(k); - if (block_iter->Valid()) { - (*handle_result)(arg, block_iter->key(), block_iter->value()); - } - s = block_iter->status(); - delete block_iter; - } - } - if (s.ok()) { - s = iiter->status(); - } - delete iiter; - return s; -} - -uint64_t Table::ApproximateOffsetOf(const Slice& key) const { - Iterator* index_iter = - rep_->index_block->NewIterator(rep_->options.comparator); - index_iter->Seek(key); - uint64_t result; - if (index_iter->Valid()) { - BlockHandle handle; - Slice input = index_iter->value(); - Status s = handle.DecodeFrom(&input); - if (s.ok()) { - result = handle.offset(); - } else { - // Strange: we can't decode the block handle in the index block. - // We'll just return the offset of the metaindex block, which is - // close to the whole file size for this case. - result = rep_->metaindex_handle.offset(); - } - } else { - // key is past the last key in the file. Approximate the offset - // by returning the offset of the metaindex block (which is - // right near the end of the file). - result = rep_->metaindex_handle.offset(); - } - delete index_iter; - return result; -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/table/table_builder.cc b/assign5/openTok/Pods/leveldb-library/table/table_builder.cc deleted file mode 100644 index 278febf..0000000 --- a/assign5/openTok/Pods/leveldb-library/table/table_builder.cc +++ /dev/null @@ -1,265 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/table_builder.h" - -#include <assert.h> - -#include "leveldb/comparator.h" -#include "leveldb/env.h" -#include "leveldb/filter_policy.h" -#include "leveldb/options.h" -#include "table/block_builder.h" -#include "table/filter_block.h" -#include "table/format.h" -#include "util/coding.h" -#include "util/crc32c.h" - -namespace leveldb { - -struct TableBuilder::Rep { - Rep(const Options& opt, WritableFile* f) - : options(opt), - index_block_options(opt), - file(f), - offset(0), - data_block(&options), - index_block(&index_block_options), - num_entries(0), - closed(false), - filter_block(opt.filter_policy == nullptr - ? nullptr - : new FilterBlockBuilder(opt.filter_policy)), - pending_index_entry(false) { - index_block_options.block_restart_interval = 1; - } - - Options options; - Options index_block_options; - WritableFile* file; - uint64_t offset; - Status status; - BlockBuilder data_block; - BlockBuilder index_block; - std::string last_key; - int64_t num_entries; - bool closed; // Either Finish() or Abandon() has been called. - FilterBlockBuilder* filter_block; - - // We do not emit the index entry for a block until we have seen the - // first key for the next data block. This allows us to use shorter - // keys in the index block. For example, consider a block boundary - // between the keys "the quick brown fox" and "the who". We can use - // "the r" as the key for the index block entry since it is >= all - // entries in the first block and < all entries in subsequent - // blocks. - // - // Invariant: r->pending_index_entry is true only if data_block is empty. - bool pending_index_entry; - BlockHandle pending_handle; // Handle to add to index block - - std::string compressed_output; -}; - -TableBuilder::TableBuilder(const Options& options, WritableFile* file) - : rep_(new Rep(options, file)) { - if (rep_->filter_block != nullptr) { - rep_->filter_block->StartBlock(0); - } -} - -TableBuilder::~TableBuilder() { - assert(rep_->closed); // Catch errors where caller forgot to call Finish() - delete rep_->filter_block; - delete rep_; -} - -Status TableBuilder::ChangeOptions(const Options& options) { - // Note: if more fields are added to Options, update - // this function to catch changes that should not be allowed to - // change in the middle of building a Table. - if (options.comparator != rep_->options.comparator) { - return Status::InvalidArgument("changing comparator while building table"); - } - - // Note that any live BlockBuilders point to rep_->options and therefore - // will automatically pick up the updated options. - rep_->options = options; - rep_->index_block_options = options; - rep_->index_block_options.block_restart_interval = 1; - return Status::OK(); -} - -void TableBuilder::Add(const Slice& key, const Slice& value) { - Rep* r = rep_; - assert(!r->closed); - if (!ok()) return; - if (r->num_entries > 0) { - assert(r->options.comparator->Compare(key, Slice(r->last_key)) > 0); - } - - if (r->pending_index_entry) { - assert(r->data_block.empty()); - r->options.comparator->FindShortestSeparator(&r->last_key, key); - std::string handle_encoding; - r->pending_handle.EncodeTo(&handle_encoding); - r->index_block.Add(r->last_key, Slice(handle_encoding)); - r->pending_index_entry = false; - } - - if (r->filter_block != nullptr) { - r->filter_block->AddKey(key); - } - - r->last_key.assign(key.data(), key.size()); - r->num_entries++; - r->data_block.Add(key, value); - - const size_t estimated_block_size = r->data_block.CurrentSizeEstimate(); - if (estimated_block_size >= r->options.block_size) { - Flush(); - } -} - -void TableBuilder::Flush() { - Rep* r = rep_; - assert(!r->closed); - if (!ok()) return; - if (r->data_block.empty()) return; - assert(!r->pending_index_entry); - WriteBlock(&r->data_block, &r->pending_handle); - if (ok()) { - r->pending_index_entry = true; - r->status = r->file->Flush(); - } - if (r->filter_block != nullptr) { - r->filter_block->StartBlock(r->offset); - } -} - -void TableBuilder::WriteBlock(BlockBuilder* block, BlockHandle* handle) { - // File format contains a sequence of blocks where each block has: - // block_data: uint8[n] - // type: uint8 - // crc: uint32 - assert(ok()); - Rep* r = rep_; - Slice raw = block->Finish(); - - Slice block_contents; - CompressionType type = r->options.compression; - // TODO(postrelease): Support more compression options: zlib? - switch (type) { - case kNoCompression: - block_contents = raw; - break; - - case kSnappyCompression: { - std::string* compressed = &r->compressed_output; - if (port::Snappy_Compress(raw.data(), raw.size(), compressed) && - compressed->size() < raw.size() - (raw.size() / 8u)) { - block_contents = *compressed; - } else { - // Snappy not supported, or compressed less than 12.5%, so just - // store uncompressed form - block_contents = raw; - type = kNoCompression; - } - break; - } - } - WriteRawBlock(block_contents, type, handle); - r->compressed_output.clear(); - block->Reset(); -} - -void TableBuilder::WriteRawBlock(const Slice& block_contents, - CompressionType type, BlockHandle* handle) { - Rep* r = rep_; - handle->set_offset(r->offset); - handle->set_size(block_contents.size()); - r->status = r->file->Append(block_contents); - if (r->status.ok()) { - char trailer[kBlockTrailerSize]; - trailer[0] = type; - uint32_t crc = crc32c::Value(block_contents.data(), block_contents.size()); - crc = crc32c::Extend(crc, trailer, 1); // Extend crc to cover block type - EncodeFixed32(trailer + 1, crc32c::Mask(crc)); - r->status = r->file->Append(Slice(trailer, kBlockTrailerSize)); - if (r->status.ok()) { - r->offset += block_contents.size() + kBlockTrailerSize; - } - } -} - -Status TableBuilder::status() const { return rep_->status; } - -Status TableBuilder::Finish() { - Rep* r = rep_; - Flush(); - assert(!r->closed); - r->closed = true; - - BlockHandle filter_block_handle, metaindex_block_handle, index_block_handle; - - // Write filter block - if (ok() && r->filter_block != nullptr) { - WriteRawBlock(r->filter_block->Finish(), kNoCompression, - &filter_block_handle); - } - - // Write metaindex block - if (ok()) { - BlockBuilder meta_index_block(&r->options); - if (r->filter_block != nullptr) { - // Add mapping from "filter.Name" to location of filter data - std::string key = "filter."; - key.append(r->options.filter_policy->Name()); - std::string handle_encoding; - filter_block_handle.EncodeTo(&handle_encoding); - meta_index_block.Add(key, handle_encoding); - } - - // TODO(postrelease): Add stats and other meta blocks - WriteBlock(&meta_index_block, &metaindex_block_handle); - } - - // Write index block - if (ok()) { - if (r->pending_index_entry) { - r->options.comparator->FindShortSuccessor(&r->last_key); - std::string handle_encoding; - r->pending_handle.EncodeTo(&handle_encoding); - r->index_block.Add(r->last_key, Slice(handle_encoding)); - r->pending_index_entry = false; - } - WriteBlock(&r->index_block, &index_block_handle); - } - - // Write footer - if (ok()) { - Footer footer; - footer.set_metaindex_handle(metaindex_block_handle); - footer.set_index_handle(index_block_handle); - std::string footer_encoding; - footer.EncodeTo(&footer_encoding); - r->status = r->file->Append(footer_encoding); - if (r->status.ok()) { - r->offset += footer_encoding.size(); - } - } - return r->status; -} - -void TableBuilder::Abandon() { - Rep* r = rep_; - assert(!r->closed); - r->closed = true; -} - -uint64_t TableBuilder::NumEntries() const { return rep_->num_entries; } - -uint64_t TableBuilder::FileSize() const { return rep_->offset; } - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/table/two_level_iterator.cc b/assign5/openTok/Pods/leveldb-library/table/two_level_iterator.cc deleted file mode 100644 index 5340a4d..0000000 --- a/assign5/openTok/Pods/leveldb-library/table/two_level_iterator.cc +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "table/two_level_iterator.h" - -#include "leveldb/table.h" -#include "table/block.h" -#include "table/format.h" -#include "table/iterator_wrapper.h" - -namespace leveldb { - -namespace { - -typedef Iterator* (*BlockFunction)(void*, const ReadOptions&, const Slice&); - -class TwoLevelIterator : public Iterator { - public: - TwoLevelIterator(Iterator* index_iter, BlockFunction block_function, - void* arg, const ReadOptions& options); - - virtual ~TwoLevelIterator(); - - virtual void Seek(const Slice& target); - virtual void SeekToFirst(); - virtual void SeekToLast(); - virtual void Next(); - virtual void Prev(); - - virtual bool Valid() const { return data_iter_.Valid(); } - virtual Slice key() const { - assert(Valid()); - return data_iter_.key(); - } - virtual Slice value() const { - assert(Valid()); - return data_iter_.value(); - } - virtual Status status() const { - // It'd be nice if status() returned a const Status& instead of a Status - if (!index_iter_.status().ok()) { - return index_iter_.status(); - } else if (data_iter_.iter() != nullptr && !data_iter_.status().ok()) { - return data_iter_.status(); - } else { - return status_; - } - } - - private: - void SaveError(const Status& s) { - if (status_.ok() && !s.ok()) status_ = s; - } - void SkipEmptyDataBlocksForward(); - void SkipEmptyDataBlocksBackward(); - void SetDataIterator(Iterator* data_iter); - void InitDataBlock(); - - BlockFunction block_function_; - void* arg_; - const ReadOptions options_; - Status status_; - IteratorWrapper index_iter_; - IteratorWrapper data_iter_; // May be nullptr - // If data_iter_ is non-null, then "data_block_handle_" holds the - // "index_value" passed to block_function_ to create the data_iter_. - std::string data_block_handle_; -}; - -TwoLevelIterator::TwoLevelIterator(Iterator* index_iter, - BlockFunction block_function, void* arg, - const ReadOptions& options) - : block_function_(block_function), - arg_(arg), - options_(options), - index_iter_(index_iter), - data_iter_(nullptr) {} - -TwoLevelIterator::~TwoLevelIterator() {} - -void TwoLevelIterator::Seek(const Slice& target) { - index_iter_.Seek(target); - InitDataBlock(); - if (data_iter_.iter() != nullptr) data_iter_.Seek(target); - SkipEmptyDataBlocksForward(); -} - -void TwoLevelIterator::SeekToFirst() { - index_iter_.SeekToFirst(); - InitDataBlock(); - if (data_iter_.iter() != nullptr) data_iter_.SeekToFirst(); - SkipEmptyDataBlocksForward(); -} - -void TwoLevelIterator::SeekToLast() { - index_iter_.SeekToLast(); - InitDataBlock(); - if (data_iter_.iter() != nullptr) data_iter_.SeekToLast(); - SkipEmptyDataBlocksBackward(); -} - -void TwoLevelIterator::Next() { - assert(Valid()); - data_iter_.Next(); - SkipEmptyDataBlocksForward(); -} - -void TwoLevelIterator::Prev() { - assert(Valid()); - data_iter_.Prev(); - SkipEmptyDataBlocksBackward(); -} - -void TwoLevelIterator::SkipEmptyDataBlocksForward() { - while (data_iter_.iter() == nullptr || !data_iter_.Valid()) { - // Move to next block - if (!index_iter_.Valid()) { - SetDataIterator(nullptr); - return; - } - index_iter_.Next(); - InitDataBlock(); - if (data_iter_.iter() != nullptr) data_iter_.SeekToFirst(); - } -} - -void TwoLevelIterator::SkipEmptyDataBlocksBackward() { - while (data_iter_.iter() == nullptr || !data_iter_.Valid()) { - // Move to next block - if (!index_iter_.Valid()) { - SetDataIterator(nullptr); - return; - } - index_iter_.Prev(); - InitDataBlock(); - if (data_iter_.iter() != nullptr) data_iter_.SeekToLast(); - } -} - -void TwoLevelIterator::SetDataIterator(Iterator* data_iter) { - if (data_iter_.iter() != nullptr) SaveError(data_iter_.status()); - data_iter_.Set(data_iter); -} - -void TwoLevelIterator::InitDataBlock() { - if (!index_iter_.Valid()) { - SetDataIterator(nullptr); - } else { - Slice handle = index_iter_.value(); - if (data_iter_.iter() != nullptr && - handle.compare(data_block_handle_) == 0) { - // data_iter_ is already constructed with this iterator, so - // no need to change anything - } else { - Iterator* iter = (*block_function_)(arg_, options_, handle); - data_block_handle_.assign(handle.data(), handle.size()); - SetDataIterator(iter); - } - } -} - -} // namespace - -Iterator* NewTwoLevelIterator(Iterator* index_iter, - BlockFunction block_function, void* arg, - const ReadOptions& options) { - return new TwoLevelIterator(index_iter, block_function, arg, options); -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/table/two_level_iterator.h b/assign5/openTok/Pods/leveldb-library/table/two_level_iterator.h deleted file mode 100644 index 81ffe80..0000000 --- a/assign5/openTok/Pods/leveldb-library/table/two_level_iterator.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_TABLE_TWO_LEVEL_ITERATOR_H_ -#define STORAGE_LEVELDB_TABLE_TWO_LEVEL_ITERATOR_H_ - -#include "leveldb/iterator.h" - -namespace leveldb { - -struct ReadOptions; - -// Return a new two level iterator. A two-level iterator contains an -// index iterator whose values point to a sequence of blocks where -// each block is itself a sequence of key,value pairs. The returned -// two-level iterator yields the concatenation of all key/value pairs -// in the sequence of blocks. Takes ownership of "index_iter" and -// will delete it when no longer needed. -// -// Uses a supplied function to convert an index_iter value into -// an iterator over the contents of the corresponding block. -Iterator* NewTwoLevelIterator( - Iterator* index_iter, - Iterator* (*block_function)(void* arg, const ReadOptions& options, - const Slice& index_value), - void* arg, const ReadOptions& options); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_TABLE_TWO_LEVEL_ITERATOR_H_ diff --git a/assign5/openTok/Pods/leveldb-library/util/arena.cc b/assign5/openTok/Pods/leveldb-library/util/arena.cc deleted file mode 100644 index 46e3b2e..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/arena.cc +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/arena.h" - -namespace leveldb { - -static const int kBlockSize = 4096; - -Arena::Arena() - : alloc_ptr_(nullptr), alloc_bytes_remaining_(0), memory_usage_(0) {} - -Arena::~Arena() { - for (size_t i = 0; i < blocks_.size(); i++) { - delete[] blocks_[i]; - } -} - -char* Arena::AllocateFallback(size_t bytes) { - if (bytes > kBlockSize / 4) { - // Object is more than a quarter of our block size. Allocate it separately - // to avoid wasting too much space in leftover bytes. - char* result = AllocateNewBlock(bytes); - return result; - } - - // We waste the remaining space in the current block. - alloc_ptr_ = AllocateNewBlock(kBlockSize); - alloc_bytes_remaining_ = kBlockSize; - - char* result = alloc_ptr_; - alloc_ptr_ += bytes; - alloc_bytes_remaining_ -= bytes; - return result; -} - -char* Arena::AllocateAligned(size_t bytes) { - const int align = (sizeof(void*) > 8) ? sizeof(void*) : 8; - static_assert((align & (align - 1)) == 0, - "Pointer size should be a power of 2"); - size_t current_mod = reinterpret_cast<uintptr_t>(alloc_ptr_) & (align - 1); - size_t slop = (current_mod == 0 ? 0 : align - current_mod); - size_t needed = bytes + slop; - char* result; - if (needed <= alloc_bytes_remaining_) { - result = alloc_ptr_ + slop; - alloc_ptr_ += needed; - alloc_bytes_remaining_ -= needed; - } else { - // AllocateFallback always returned aligned memory - result = AllocateFallback(bytes); - } - assert((reinterpret_cast<uintptr_t>(result) & (align - 1)) == 0); - return result; -} - -char* Arena::AllocateNewBlock(size_t block_bytes) { - char* result = new char[block_bytes]; - blocks_.push_back(result); - memory_usage_.fetch_add(block_bytes + sizeof(char*), - std::memory_order_relaxed); - return result; -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/util/arena.h b/assign5/openTok/Pods/leveldb-library/util/arena.h deleted file mode 100644 index 68fc55d..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/arena.h +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_ARENA_H_ -#define STORAGE_LEVELDB_UTIL_ARENA_H_ - -#include <atomic> -#include <cassert> -#include <cstddef> -#include <cstdint> -#include <vector> - -namespace leveldb { - -class Arena { - public: - Arena(); - - Arena(const Arena&) = delete; - Arena& operator=(const Arena&) = delete; - - ~Arena(); - - // Return a pointer to a newly allocated memory block of "bytes" bytes. - char* Allocate(size_t bytes); - - // Allocate memory with the normal alignment guarantees provided by malloc. - char* AllocateAligned(size_t bytes); - - // Returns an estimate of the total memory usage of data allocated - // by the arena. - size_t MemoryUsage() const { - return memory_usage_.load(std::memory_order_relaxed); - } - - private: - char* AllocateFallback(size_t bytes); - char* AllocateNewBlock(size_t block_bytes); - - // Allocation state - char* alloc_ptr_; - size_t alloc_bytes_remaining_; - - // Array of new[] allocated memory blocks - std::vector<char*> blocks_; - - // Total memory usage of the arena. - // - // TODO(costan): This member is accessed via atomics, but the others are - // accessed without any locking. Is this OK? - std::atomic<size_t> memory_usage_; -}; - -inline char* Arena::Allocate(size_t bytes) { - // The semantics of what to return are a bit messy if we allow - // 0-byte allocations, so we disallow them here (we don't need - // them for our internal use). - assert(bytes > 0); - if (bytes <= alloc_bytes_remaining_) { - char* result = alloc_ptr_; - alloc_ptr_ += bytes; - alloc_bytes_remaining_ -= bytes; - return result; - } - return AllocateFallback(bytes); -} - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_ARENA_H_ diff --git a/assign5/openTok/Pods/leveldb-library/util/bloom.cc b/assign5/openTok/Pods/leveldb-library/util/bloom.cc deleted file mode 100644 index 7f97464..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/bloom.cc +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/filter_policy.h" - -#include "leveldb/slice.h" -#include "util/hash.h" - -namespace leveldb { - -namespace { -static uint32_t BloomHash(const Slice& key) { - return Hash(key.data(), key.size(), 0xbc9f1d34); -} - -class BloomFilterPolicy : public FilterPolicy { - public: - explicit BloomFilterPolicy(int bits_per_key) : bits_per_key_(bits_per_key) { - // We intentionally round down to reduce probing cost a little bit - k_ = static_cast<size_t>(bits_per_key * 0.69); // 0.69 =~ ln(2) - if (k_ < 1) k_ = 1; - if (k_ > 30) k_ = 30; - } - - virtual const char* Name() const { return "leveldb.BuiltinBloomFilter2"; } - - virtual void CreateFilter(const Slice* keys, int n, std::string* dst) const { - // Compute bloom filter size (in both bits and bytes) - size_t bits = n * bits_per_key_; - - // For small n, we can see a very high false positive rate. Fix it - // by enforcing a minimum bloom filter length. - if (bits < 64) bits = 64; - - size_t bytes = (bits + 7) / 8; - bits = bytes * 8; - - const size_t init_size = dst->size(); - dst->resize(init_size + bytes, 0); - dst->push_back(static_cast<char>(k_)); // Remember # of probes in filter - char* array = &(*dst)[init_size]; - for (int i = 0; i < n; i++) { - // Use double-hashing to generate a sequence of hash values. - // See analysis in [Kirsch,Mitzenmacher 2006]. - uint32_t h = BloomHash(keys[i]); - const uint32_t delta = (h >> 17) | (h << 15); // Rotate right 17 bits - for (size_t j = 0; j < k_; j++) { - const uint32_t bitpos = h % bits; - array[bitpos / 8] |= (1 << (bitpos % 8)); - h += delta; - } - } - } - - virtual bool KeyMayMatch(const Slice& key, const Slice& bloom_filter) const { - const size_t len = bloom_filter.size(); - if (len < 2) return false; - - const char* array = bloom_filter.data(); - const size_t bits = (len - 1) * 8; - - // Use the encoded k so that we can read filters generated by - // bloom filters created using different parameters. - const size_t k = array[len - 1]; - if (k > 30) { - // Reserved for potentially new encodings for short bloom filters. - // Consider it a match. - return true; - } - - uint32_t h = BloomHash(key); - const uint32_t delta = (h >> 17) | (h << 15); // Rotate right 17 bits - for (size_t j = 0; j < k; j++) { - const uint32_t bitpos = h % bits; - if ((array[bitpos / 8] & (1 << (bitpos % 8))) == 0) return false; - h += delta; - } - return true; - } - - private: - size_t bits_per_key_; - size_t k_; -}; -} // namespace - -const FilterPolicy* NewBloomFilterPolicy(int bits_per_key) { - return new BloomFilterPolicy(bits_per_key); -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/util/cache.cc b/assign5/openTok/Pods/leveldb-library/util/cache.cc deleted file mode 100644 index 0f801cc..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/cache.cc +++ /dev/null @@ -1,400 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include <assert.h> -#include <stdio.h> -#include <stdlib.h> - -#include "leveldb/cache.h" -#include "port/port.h" -#include "port/thread_annotations.h" -#include "util/hash.h" -#include "util/mutexlock.h" - -namespace leveldb { - -Cache::~Cache() {} - -namespace { - -// LRU cache implementation -// -// Cache entries have an "in_cache" boolean indicating whether the cache has a -// reference on the entry. The only ways that this can become false without the -// entry being passed to its "deleter" are via Erase(), via Insert() when -// an element with a duplicate key is inserted, or on destruction of the cache. -// -// The cache keeps two linked lists of items in the cache. All items in the -// cache are in one list or the other, and never both. Items still referenced -// by clients but erased from the cache are in neither list. The lists are: -// - in-use: contains the items currently referenced by clients, in no -// particular order. (This list is used for invariant checking. If we -// removed the check, elements that would otherwise be on this list could be -// left as disconnected singleton lists.) -// - LRU: contains the items not currently referenced by clients, in LRU order -// Elements are moved between these lists by the Ref() and Unref() methods, -// when they detect an element in the cache acquiring or losing its only -// external reference. - -// An entry is a variable length heap-allocated structure. Entries -// are kept in a circular doubly linked list ordered by access time. -struct LRUHandle { - void* value; - void (*deleter)(const Slice&, void* value); - LRUHandle* next_hash; - LRUHandle* next; - LRUHandle* prev; - size_t charge; // TODO(opt): Only allow uint32_t? - size_t key_length; - bool in_cache; // Whether entry is in the cache. - uint32_t refs; // References, including cache reference, if present. - uint32_t hash; // Hash of key(); used for fast sharding and comparisons - char key_data[1]; // Beginning of key - - Slice key() const { - // next_ is only equal to this if the LRU handle is the list head of an - // empty list. List heads never have meaningful keys. - assert(next != this); - - return Slice(key_data, key_length); - } -}; - -// We provide our own simple hash table since it removes a whole bunch -// of porting hacks and is also faster than some of the built-in hash -// table implementations in some of the compiler/runtime combinations -// we have tested. E.g., readrandom speeds up by ~5% over the g++ -// 4.4.3's builtin hashtable. -class HandleTable { - public: - HandleTable() : length_(0), elems_(0), list_(nullptr) { Resize(); } - ~HandleTable() { delete[] list_; } - - LRUHandle* Lookup(const Slice& key, uint32_t hash) { - return *FindPointer(key, hash); - } - - LRUHandle* Insert(LRUHandle* h) { - LRUHandle** ptr = FindPointer(h->key(), h->hash); - LRUHandle* old = *ptr; - h->next_hash = (old == nullptr ? nullptr : old->next_hash); - *ptr = h; - if (old == nullptr) { - ++elems_; - if (elems_ > length_) { - // Since each cache entry is fairly large, we aim for a small - // average linked list length (<= 1). - Resize(); - } - } - return old; - } - - LRUHandle* Remove(const Slice& key, uint32_t hash) { - LRUHandle** ptr = FindPointer(key, hash); - LRUHandle* result = *ptr; - if (result != nullptr) { - *ptr = result->next_hash; - --elems_; - } - return result; - } - - private: - // The table consists of an array of buckets where each bucket is - // a linked list of cache entries that hash into the bucket. - uint32_t length_; - uint32_t elems_; - LRUHandle** list_; - - // Return a pointer to slot that points to a cache entry that - // matches key/hash. If there is no such cache entry, return a - // pointer to the trailing slot in the corresponding linked list. - LRUHandle** FindPointer(const Slice& key, uint32_t hash) { - LRUHandle** ptr = &list_[hash & (length_ - 1)]; - while (*ptr != nullptr && ((*ptr)->hash != hash || key != (*ptr)->key())) { - ptr = &(*ptr)->next_hash; - } - return ptr; - } - - void Resize() { - uint32_t new_length = 4; - while (new_length < elems_) { - new_length *= 2; - } - LRUHandle** new_list = new LRUHandle*[new_length]; - memset(new_list, 0, sizeof(new_list[0]) * new_length); - uint32_t count = 0; - for (uint32_t i = 0; i < length_; i++) { - LRUHandle* h = list_[i]; - while (h != nullptr) { - LRUHandle* next = h->next_hash; - uint32_t hash = h->hash; - LRUHandle** ptr = &new_list[hash & (new_length - 1)]; - h->next_hash = *ptr; - *ptr = h; - h = next; - count++; - } - } - assert(elems_ == count); - delete[] list_; - list_ = new_list; - length_ = new_length; - } -}; - -// A single shard of sharded cache. -class LRUCache { - public: - LRUCache(); - ~LRUCache(); - - // Separate from constructor so caller can easily make an array of LRUCache - void SetCapacity(size_t capacity) { capacity_ = capacity; } - - // Like Cache methods, but with an extra "hash" parameter. - Cache::Handle* Insert(const Slice& key, uint32_t hash, void* value, - size_t charge, - void (*deleter)(const Slice& key, void* value)); - Cache::Handle* Lookup(const Slice& key, uint32_t hash); - void Release(Cache::Handle* handle); - void Erase(const Slice& key, uint32_t hash); - void Prune(); - size_t TotalCharge() const { - MutexLock l(&mutex_); - return usage_; - } - - private: - void LRU_Remove(LRUHandle* e); - void LRU_Append(LRUHandle* list, LRUHandle* e); - void Ref(LRUHandle* e); - void Unref(LRUHandle* e); - bool FinishErase(LRUHandle* e) EXCLUSIVE_LOCKS_REQUIRED(mutex_); - - // Initialized before use. - size_t capacity_; - - // mutex_ protects the following state. - mutable port::Mutex mutex_; - size_t usage_ GUARDED_BY(mutex_); - - // Dummy head of LRU list. - // lru.prev is newest entry, lru.next is oldest entry. - // Entries have refs==1 and in_cache==true. - LRUHandle lru_ GUARDED_BY(mutex_); - - // Dummy head of in-use list. - // Entries are in use by clients, and have refs >= 2 and in_cache==true. - LRUHandle in_use_ GUARDED_BY(mutex_); - - HandleTable table_ GUARDED_BY(mutex_); -}; - -LRUCache::LRUCache() : capacity_(0), usage_(0) { - // Make empty circular linked lists. - lru_.next = &lru_; - lru_.prev = &lru_; - in_use_.next = &in_use_; - in_use_.prev = &in_use_; -} - -LRUCache::~LRUCache() { - assert(in_use_.next == &in_use_); // Error if caller has an unreleased handle - for (LRUHandle* e = lru_.next; e != &lru_;) { - LRUHandle* next = e->next; - assert(e->in_cache); - e->in_cache = false; - assert(e->refs == 1); // Invariant of lru_ list. - Unref(e); - e = next; - } -} - -void LRUCache::Ref(LRUHandle* e) { - if (e->refs == 1 && e->in_cache) { // If on lru_ list, move to in_use_ list. - LRU_Remove(e); - LRU_Append(&in_use_, e); - } - e->refs++; -} - -void LRUCache::Unref(LRUHandle* e) { - assert(e->refs > 0); - e->refs--; - if (e->refs == 0) { // Deallocate. - assert(!e->in_cache); - (*e->deleter)(e->key(), e->value); - free(e); - } else if (e->in_cache && e->refs == 1) { - // No longer in use; move to lru_ list. - LRU_Remove(e); - LRU_Append(&lru_, e); - } -} - -void LRUCache::LRU_Remove(LRUHandle* e) { - e->next->prev = e->prev; - e->prev->next = e->next; -} - -void LRUCache::LRU_Append(LRUHandle* list, LRUHandle* e) { - // Make "e" newest entry by inserting just before *list - e->next = list; - e->prev = list->prev; - e->prev->next = e; - e->next->prev = e; -} - -Cache::Handle* LRUCache::Lookup(const Slice& key, uint32_t hash) { - MutexLock l(&mutex_); - LRUHandle* e = table_.Lookup(key, hash); - if (e != nullptr) { - Ref(e); - } - return reinterpret_cast<Cache::Handle*>(e); -} - -void LRUCache::Release(Cache::Handle* handle) { - MutexLock l(&mutex_); - Unref(reinterpret_cast<LRUHandle*>(handle)); -} - -Cache::Handle* LRUCache::Insert(const Slice& key, uint32_t hash, void* value, - size_t charge, - void (*deleter)(const Slice& key, - void* value)) { - MutexLock l(&mutex_); - - LRUHandle* e = - reinterpret_cast<LRUHandle*>(malloc(sizeof(LRUHandle) - 1 + key.size())); - e->value = value; - e->deleter = deleter; - e->charge = charge; - e->key_length = key.size(); - e->hash = hash; - e->in_cache = false; - e->refs = 1; // for the returned handle. - memcpy(e->key_data, key.data(), key.size()); - - if (capacity_ > 0) { - e->refs++; // for the cache's reference. - e->in_cache = true; - LRU_Append(&in_use_, e); - usage_ += charge; - FinishErase(table_.Insert(e)); - } else { // don't cache. (capacity_==0 is supported and turns off caching.) - // next is read by key() in an assert, so it must be initialized - e->next = nullptr; - } - while (usage_ > capacity_ && lru_.next != &lru_) { - LRUHandle* old = lru_.next; - assert(old->refs == 1); - bool erased = FinishErase(table_.Remove(old->key(), old->hash)); - if (!erased) { // to avoid unused variable when compiled NDEBUG - assert(erased); - } - } - - return reinterpret_cast<Cache::Handle*>(e); -} - -// If e != nullptr, finish removing *e from the cache; it has already been -// removed from the hash table. Return whether e != nullptr. -bool LRUCache::FinishErase(LRUHandle* e) { - if (e != nullptr) { - assert(e->in_cache); - LRU_Remove(e); - e->in_cache = false; - usage_ -= e->charge; - Unref(e); - } - return e != nullptr; -} - -void LRUCache::Erase(const Slice& key, uint32_t hash) { - MutexLock l(&mutex_); - FinishErase(table_.Remove(key, hash)); -} - -void LRUCache::Prune() { - MutexLock l(&mutex_); - while (lru_.next != &lru_) { - LRUHandle* e = lru_.next; - assert(e->refs == 1); - bool erased = FinishErase(table_.Remove(e->key(), e->hash)); - if (!erased) { // to avoid unused variable when compiled NDEBUG - assert(erased); - } - } -} - -static const int kNumShardBits = 4; -static const int kNumShards = 1 << kNumShardBits; - -class ShardedLRUCache : public Cache { - private: - LRUCache shard_[kNumShards]; - port::Mutex id_mutex_; - uint64_t last_id_; - - static inline uint32_t HashSlice(const Slice& s) { - return Hash(s.data(), s.size(), 0); - } - - static uint32_t Shard(uint32_t hash) { return hash >> (32 - kNumShardBits); } - - public: - explicit ShardedLRUCache(size_t capacity) : last_id_(0) { - const size_t per_shard = (capacity + (kNumShards - 1)) / kNumShards; - for (int s = 0; s < kNumShards; s++) { - shard_[s].SetCapacity(per_shard); - } - } - virtual ~ShardedLRUCache() {} - virtual Handle* Insert(const Slice& key, void* value, size_t charge, - void (*deleter)(const Slice& key, void* value)) { - const uint32_t hash = HashSlice(key); - return shard_[Shard(hash)].Insert(key, hash, value, charge, deleter); - } - virtual Handle* Lookup(const Slice& key) { - const uint32_t hash = HashSlice(key); - return shard_[Shard(hash)].Lookup(key, hash); - } - virtual void Release(Handle* handle) { - LRUHandle* h = reinterpret_cast<LRUHandle*>(handle); - shard_[Shard(h->hash)].Release(handle); - } - virtual void Erase(const Slice& key) { - const uint32_t hash = HashSlice(key); - shard_[Shard(hash)].Erase(key, hash); - } - virtual void* Value(Handle* handle) { - return reinterpret_cast<LRUHandle*>(handle)->value; - } - virtual uint64_t NewId() { - MutexLock l(&id_mutex_); - return ++(last_id_); - } - virtual void Prune() { - for (int s = 0; s < kNumShards; s++) { - shard_[s].Prune(); - } - } - virtual size_t TotalCharge() const { - size_t total = 0; - for (int s = 0; s < kNumShards; s++) { - total += shard_[s].TotalCharge(); - } - return total; - } -}; - -} // end anonymous namespace - -Cache* NewLRUCache(size_t capacity) { return new ShardedLRUCache(capacity); } - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/util/coding.cc b/assign5/openTok/Pods/leveldb-library/util/coding.cc deleted file mode 100644 index e2089df..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/coding.cc +++ /dev/null @@ -1,192 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/coding.h" - -namespace leveldb { - -void EncodeFixed32(char* dst, uint32_t value) { - if (port::kLittleEndian) { - memcpy(dst, &value, sizeof(value)); - } else { - dst[0] = value & 0xff; - dst[1] = (value >> 8) & 0xff; - dst[2] = (value >> 16) & 0xff; - dst[3] = (value >> 24) & 0xff; - } -} - -void EncodeFixed64(char* dst, uint64_t value) { - if (port::kLittleEndian) { - memcpy(dst, &value, sizeof(value)); - } else { - dst[0] = value & 0xff; - dst[1] = (value >> 8) & 0xff; - dst[2] = (value >> 16) & 0xff; - dst[3] = (value >> 24) & 0xff; - dst[4] = (value >> 32) & 0xff; - dst[5] = (value >> 40) & 0xff; - dst[6] = (value >> 48) & 0xff; - dst[7] = (value >> 56) & 0xff; - } -} - -void PutFixed32(std::string* dst, uint32_t value) { - char buf[sizeof(value)]; - EncodeFixed32(buf, value); - dst->append(buf, sizeof(buf)); -} - -void PutFixed64(std::string* dst, uint64_t value) { - char buf[sizeof(value)]; - EncodeFixed64(buf, value); - dst->append(buf, sizeof(buf)); -} - -char* EncodeVarint32(char* dst, uint32_t v) { - // Operate on characters as unsigneds - unsigned char* ptr = reinterpret_cast<unsigned char*>(dst); - static const int B = 128; - if (v < (1 << 7)) { - *(ptr++) = v; - } else if (v < (1 << 14)) { - *(ptr++) = v | B; - *(ptr++) = v >> 7; - } else if (v < (1 << 21)) { - *(ptr++) = v | B; - *(ptr++) = (v >> 7) | B; - *(ptr++) = v >> 14; - } else if (v < (1 << 28)) { - *(ptr++) = v | B; - *(ptr++) = (v >> 7) | B; - *(ptr++) = (v >> 14) | B; - *(ptr++) = v >> 21; - } else { - *(ptr++) = v | B; - *(ptr++) = (v >> 7) | B; - *(ptr++) = (v >> 14) | B; - *(ptr++) = (v >> 21) | B; - *(ptr++) = v >> 28; - } - return reinterpret_cast<char*>(ptr); -} - -void PutVarint32(std::string* dst, uint32_t v) { - char buf[5]; - char* ptr = EncodeVarint32(buf, v); - dst->append(buf, ptr - buf); -} - -char* EncodeVarint64(char* dst, uint64_t v) { - static const int B = 128; - unsigned char* ptr = reinterpret_cast<unsigned char*>(dst); - while (v >= B) { - *(ptr++) = v | B; - v >>= 7; - } - *(ptr++) = static_cast<unsigned char>(v); - return reinterpret_cast<char*>(ptr); -} - -void PutVarint64(std::string* dst, uint64_t v) { - char buf[10]; - char* ptr = EncodeVarint64(buf, v); - dst->append(buf, ptr - buf); -} - -void PutLengthPrefixedSlice(std::string* dst, const Slice& value) { - PutVarint32(dst, value.size()); - dst->append(value.data(), value.size()); -} - -int VarintLength(uint64_t v) { - int len = 1; - while (v >= 128) { - v >>= 7; - len++; - } - return len; -} - -const char* GetVarint32PtrFallback(const char* p, const char* limit, - uint32_t* value) { - uint32_t result = 0; - for (uint32_t shift = 0; shift <= 28 && p < limit; shift += 7) { - uint32_t byte = *(reinterpret_cast<const unsigned char*>(p)); - p++; - if (byte & 128) { - // More bytes are present - result |= ((byte & 127) << shift); - } else { - result |= (byte << shift); - *value = result; - return reinterpret_cast<const char*>(p); - } - } - return nullptr; -} - -bool GetVarint32(Slice* input, uint32_t* value) { - const char* p = input->data(); - const char* limit = p + input->size(); - const char* q = GetVarint32Ptr(p, limit, value); - if (q == nullptr) { - return false; - } else { - *input = Slice(q, limit - q); - return true; - } -} - -const char* GetVarint64Ptr(const char* p, const char* limit, uint64_t* value) { - uint64_t result = 0; - for (uint32_t shift = 0; shift <= 63 && p < limit; shift += 7) { - uint64_t byte = *(reinterpret_cast<const unsigned char*>(p)); - p++; - if (byte & 128) { - // More bytes are present - result |= ((byte & 127) << shift); - } else { - result |= (byte << shift); - *value = result; - return reinterpret_cast<const char*>(p); - } - } - return nullptr; -} - -bool GetVarint64(Slice* input, uint64_t* value) { - const char* p = input->data(); - const char* limit = p + input->size(); - const char* q = GetVarint64Ptr(p, limit, value); - if (q == nullptr) { - return false; - } else { - *input = Slice(q, limit - q); - return true; - } -} - -const char* GetLengthPrefixedSlice(const char* p, const char* limit, - Slice* result) { - uint32_t len; - p = GetVarint32Ptr(p, limit, &len); - if (p == nullptr) return nullptr; - if (p + len > limit) return nullptr; - *result = Slice(p, len); - return p + len; -} - -bool GetLengthPrefixedSlice(Slice* input, Slice* result) { - uint32_t len; - if (GetVarint32(input, &len) && input->size() >= len) { - *result = Slice(input->data(), len); - input->remove_prefix(len); - return true; - } else { - return false; - } -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/util/coding.h b/assign5/openTok/Pods/leveldb-library/util/coding.h deleted file mode 100644 index d9eeaa3..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/coding.h +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Endian-neutral encoding: -// * Fixed-length numbers are encoded with least-significant byte first -// * In addition we support variable length "varint" encoding -// * Strings are encoded prefixed by their length in varint format - -#ifndef STORAGE_LEVELDB_UTIL_CODING_H_ -#define STORAGE_LEVELDB_UTIL_CODING_H_ - -#include <stdint.h> -#include <string.h> - -#include <string> - -#include "leveldb/slice.h" -#include "port/port.h" - -namespace leveldb { - -// Standard Put... routines append to a string -void PutFixed32(std::string* dst, uint32_t value); -void PutFixed64(std::string* dst, uint64_t value); -void PutVarint32(std::string* dst, uint32_t value); -void PutVarint64(std::string* dst, uint64_t value); -void PutLengthPrefixedSlice(std::string* dst, const Slice& value); - -// Standard Get... routines parse a value from the beginning of a Slice -// and advance the slice past the parsed value. -bool GetVarint32(Slice* input, uint32_t* value); -bool GetVarint64(Slice* input, uint64_t* value); -bool GetLengthPrefixedSlice(Slice* input, Slice* result); - -// Pointer-based variants of GetVarint... These either store a value -// in *v and return a pointer just past the parsed value, or return -// nullptr on error. These routines only look at bytes in the range -// [p..limit-1] -const char* GetVarint32Ptr(const char* p, const char* limit, uint32_t* v); -const char* GetVarint64Ptr(const char* p, const char* limit, uint64_t* v); - -// Returns the length of the varint32 or varint64 encoding of "v" -int VarintLength(uint64_t v); - -// Lower-level versions of Put... that write directly into a character buffer -// REQUIRES: dst has enough space for the value being written -void EncodeFixed32(char* dst, uint32_t value); -void EncodeFixed64(char* dst, uint64_t value); - -// Lower-level versions of Put... that write directly into a character buffer -// and return a pointer just past the last byte written. -// REQUIRES: dst has enough space for the value being written -char* EncodeVarint32(char* dst, uint32_t value); -char* EncodeVarint64(char* dst, uint64_t value); - -// Lower-level versions of Get... that read directly from a character buffer -// without any bounds checking. - -inline uint32_t DecodeFixed32(const char* ptr) { - if (port::kLittleEndian) { - // Load the raw bytes - uint32_t result; - memcpy(&result, ptr, sizeof(result)); // gcc optimizes this to a plain load - return result; - } else { - return ((static_cast<uint32_t>(static_cast<unsigned char>(ptr[0]))) | - (static_cast<uint32_t>(static_cast<unsigned char>(ptr[1])) << 8) | - (static_cast<uint32_t>(static_cast<unsigned char>(ptr[2])) << 16) | - (static_cast<uint32_t>(static_cast<unsigned char>(ptr[3])) << 24)); - } -} - -inline uint64_t DecodeFixed64(const char* ptr) { - if (port::kLittleEndian) { - // Load the raw bytes - uint64_t result; - memcpy(&result, ptr, sizeof(result)); // gcc optimizes this to a plain load - return result; - } else { - uint64_t lo = DecodeFixed32(ptr); - uint64_t hi = DecodeFixed32(ptr + 4); - return (hi << 32) | lo; - } -} - -// Internal routine for use by fallback path of GetVarint32Ptr -const char* GetVarint32PtrFallback(const char* p, const char* limit, - uint32_t* value); -inline const char* GetVarint32Ptr(const char* p, const char* limit, - uint32_t* value) { - if (p < limit) { - uint32_t result = *(reinterpret_cast<const unsigned char*>(p)); - if ((result & 128) == 0) { - *value = result; - return p + 1; - } - } - return GetVarint32PtrFallback(p, limit, value); -} - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_CODING_H_ diff --git a/assign5/openTok/Pods/leveldb-library/util/comparator.cc b/assign5/openTok/Pods/leveldb-library/util/comparator.cc deleted file mode 100644 index 26d1eb3..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/comparator.cc +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include <algorithm> -#include <cstdint> -#include <string> - -#include "leveldb/comparator.h" -#include "leveldb/slice.h" -#include "util/logging.h" -#include "util/no_destructor.h" - -namespace leveldb { - -Comparator::~Comparator() {} - -namespace { -class BytewiseComparatorImpl : public Comparator { - public: - BytewiseComparatorImpl() {} - - virtual const char* Name() const { return "leveldb.BytewiseComparator"; } - - virtual int Compare(const Slice& a, const Slice& b) const { - return a.compare(b); - } - - virtual void FindShortestSeparator(std::string* start, - const Slice& limit) const { - // Find length of common prefix - size_t min_length = std::min(start->size(), limit.size()); - size_t diff_index = 0; - while ((diff_index < min_length) && - ((*start)[diff_index] == limit[diff_index])) { - diff_index++; - } - - if (diff_index >= min_length) { - // Do not shorten if one string is a prefix of the other - } else { - uint8_t diff_byte = static_cast<uint8_t>((*start)[diff_index]); - if (diff_byte < static_cast<uint8_t>(0xff) && - diff_byte + 1 < static_cast<uint8_t>(limit[diff_index])) { - (*start)[diff_index]++; - start->resize(diff_index + 1); - assert(Compare(*start, limit) < 0); - } - } - } - - virtual void FindShortSuccessor(std::string* key) const { - // Find first character that can be incremented - size_t n = key->size(); - for (size_t i = 0; i < n; i++) { - const uint8_t byte = (*key)[i]; - if (byte != static_cast<uint8_t>(0xff)) { - (*key)[i] = byte + 1; - key->resize(i + 1); - return; - } - } - // *key is a run of 0xffs. Leave it alone. - } -}; -} // namespace - -const Comparator* BytewiseComparator() { - static NoDestructor<BytewiseComparatorImpl> singleton; - return singleton.get(); -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/util/crc32c.cc b/assign5/openTok/Pods/leveldb-library/util/crc32c.cc deleted file mode 100644 index c2e61f7..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/crc32c.cc +++ /dev/null @@ -1,380 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// A portable implementation of crc32c. - -#include "util/crc32c.h" - -#include <stddef.h> -#include <stdint.h> - -#include "port/port.h" -#include "util/coding.h" - -namespace leveldb { -namespace crc32c { - -namespace { - -const uint32_t kByteExtensionTable[256] = { - 0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4, 0xc79a971f, 0x35f1141c, - 0x26a1e7e8, 0xd4ca64eb, 0x8ad958cf, 0x78b2dbcc, 0x6be22838, 0x9989ab3b, - 0x4d43cfd0, 0xbf284cd3, 0xac78bf27, 0x5e133c24, 0x105ec76f, 0xe235446c, - 0xf165b798, 0x030e349b, 0xd7c45070, 0x25afd373, 0x36ff2087, 0xc494a384, - 0x9a879fa0, 0x68ec1ca3, 0x7bbcef57, 0x89d76c54, 0x5d1d08bf, 0xaf768bbc, - 0xbc267848, 0x4e4dfb4b, 0x20bd8ede, 0xd2d60ddd, 0xc186fe29, 0x33ed7d2a, - 0xe72719c1, 0x154c9ac2, 0x061c6936, 0xf477ea35, 0xaa64d611, 0x580f5512, - 0x4b5fa6e6, 0xb93425e5, 0x6dfe410e, 0x9f95c20d, 0x8cc531f9, 0x7eaeb2fa, - 0x30e349b1, 0xc288cab2, 0xd1d83946, 0x23b3ba45, 0xf779deae, 0x05125dad, - 0x1642ae59, 0xe4292d5a, 0xba3a117e, 0x4851927d, 0x5b016189, 0xa96ae28a, - 0x7da08661, 0x8fcb0562, 0x9c9bf696, 0x6ef07595, 0x417b1dbc, 0xb3109ebf, - 0xa0406d4b, 0x522bee48, 0x86e18aa3, 0x748a09a0, 0x67dafa54, 0x95b17957, - 0xcba24573, 0x39c9c670, 0x2a993584, 0xd8f2b687, 0x0c38d26c, 0xfe53516f, - 0xed03a29b, 0x1f682198, 0x5125dad3, 0xa34e59d0, 0xb01eaa24, 0x42752927, - 0x96bf4dcc, 0x64d4cecf, 0x77843d3b, 0x85efbe38, 0xdbfc821c, 0x2997011f, - 0x3ac7f2eb, 0xc8ac71e8, 0x1c661503, 0xee0d9600, 0xfd5d65f4, 0x0f36e6f7, - 0x61c69362, 0x93ad1061, 0x80fde395, 0x72966096, 0xa65c047d, 0x5437877e, - 0x4767748a, 0xb50cf789, 0xeb1fcbad, 0x197448ae, 0x0a24bb5a, 0xf84f3859, - 0x2c855cb2, 0xdeeedfb1, 0xcdbe2c45, 0x3fd5af46, 0x7198540d, 0x83f3d70e, - 0x90a324fa, 0x62c8a7f9, 0xb602c312, 0x44694011, 0x5739b3e5, 0xa55230e6, - 0xfb410cc2, 0x092a8fc1, 0x1a7a7c35, 0xe811ff36, 0x3cdb9bdd, 0xceb018de, - 0xdde0eb2a, 0x2f8b6829, 0x82f63b78, 0x709db87b, 0x63cd4b8f, 0x91a6c88c, - 0x456cac67, 0xb7072f64, 0xa457dc90, 0x563c5f93, 0x082f63b7, 0xfa44e0b4, - 0xe9141340, 0x1b7f9043, 0xcfb5f4a8, 0x3dde77ab, 0x2e8e845f, 0xdce5075c, - 0x92a8fc17, 0x60c37f14, 0x73938ce0, 0x81f80fe3, 0x55326b08, 0xa759e80b, - 0xb4091bff, 0x466298fc, 0x1871a4d8, 0xea1a27db, 0xf94ad42f, 0x0b21572c, - 0xdfeb33c7, 0x2d80b0c4, 0x3ed04330, 0xccbbc033, 0xa24bb5a6, 0x502036a5, - 0x4370c551, 0xb11b4652, 0x65d122b9, 0x97baa1ba, 0x84ea524e, 0x7681d14d, - 0x2892ed69, 0xdaf96e6a, 0xc9a99d9e, 0x3bc21e9d, 0xef087a76, 0x1d63f975, - 0x0e330a81, 0xfc588982, 0xb21572c9, 0x407ef1ca, 0x532e023e, 0xa145813d, - 0x758fe5d6, 0x87e466d5, 0x94b49521, 0x66df1622, 0x38cc2a06, 0xcaa7a905, - 0xd9f75af1, 0x2b9cd9f2, 0xff56bd19, 0x0d3d3e1a, 0x1e6dcdee, 0xec064eed, - 0xc38d26c4, 0x31e6a5c7, 0x22b65633, 0xd0ddd530, 0x0417b1db, 0xf67c32d8, - 0xe52cc12c, 0x1747422f, 0x49547e0b, 0xbb3ffd08, 0xa86f0efc, 0x5a048dff, - 0x8ecee914, 0x7ca56a17, 0x6ff599e3, 0x9d9e1ae0, 0xd3d3e1ab, 0x21b862a8, - 0x32e8915c, 0xc083125f, 0x144976b4, 0xe622f5b7, 0xf5720643, 0x07198540, - 0x590ab964, 0xab613a67, 0xb831c993, 0x4a5a4a90, 0x9e902e7b, 0x6cfbad78, - 0x7fab5e8c, 0x8dc0dd8f, 0xe330a81a, 0x115b2b19, 0x020bd8ed, 0xf0605bee, - 0x24aa3f05, 0xd6c1bc06, 0xc5914ff2, 0x37faccf1, 0x69e9f0d5, 0x9b8273d6, - 0x88d28022, 0x7ab90321, 0xae7367ca, 0x5c18e4c9, 0x4f48173d, 0xbd23943e, - 0xf36e6f75, 0x0105ec76, 0x12551f82, 0xe03e9c81, 0x34f4f86a, 0xc69f7b69, - 0xd5cf889d, 0x27a40b9e, 0x79b737ba, 0x8bdcb4b9, 0x988c474d, 0x6ae7c44e, - 0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351}; - -const uint32_t kStrideExtensionTable0[256] = { - 0x00000000, 0x30d23865, 0x61a470ca, 0x517648af, 0xc348e194, 0xf39ad9f1, - 0xa2ec915e, 0x923ea93b, 0x837db5d9, 0xb3af8dbc, 0xe2d9c513, 0xd20bfd76, - 0x4035544d, 0x70e76c28, 0x21912487, 0x11431ce2, 0x03171d43, 0x33c52526, - 0x62b36d89, 0x526155ec, 0xc05ffcd7, 0xf08dc4b2, 0xa1fb8c1d, 0x9129b478, - 0x806aa89a, 0xb0b890ff, 0xe1ced850, 0xd11ce035, 0x4322490e, 0x73f0716b, - 0x228639c4, 0x125401a1, 0x062e3a86, 0x36fc02e3, 0x678a4a4c, 0x57587229, - 0xc566db12, 0xf5b4e377, 0xa4c2abd8, 0x941093bd, 0x85538f5f, 0xb581b73a, - 0xe4f7ff95, 0xd425c7f0, 0x461b6ecb, 0x76c956ae, 0x27bf1e01, 0x176d2664, - 0x053927c5, 0x35eb1fa0, 0x649d570f, 0x544f6f6a, 0xc671c651, 0xf6a3fe34, - 0xa7d5b69b, 0x97078efe, 0x8644921c, 0xb696aa79, 0xe7e0e2d6, 0xd732dab3, - 0x450c7388, 0x75de4bed, 0x24a80342, 0x147a3b27, 0x0c5c750c, 0x3c8e4d69, - 0x6df805c6, 0x5d2a3da3, 0xcf149498, 0xffc6acfd, 0xaeb0e452, 0x9e62dc37, - 0x8f21c0d5, 0xbff3f8b0, 0xee85b01f, 0xde57887a, 0x4c692141, 0x7cbb1924, - 0x2dcd518b, 0x1d1f69ee, 0x0f4b684f, 0x3f99502a, 0x6eef1885, 0x5e3d20e0, - 0xcc0389db, 0xfcd1b1be, 0xada7f911, 0x9d75c174, 0x8c36dd96, 0xbce4e5f3, - 0xed92ad5c, 0xdd409539, 0x4f7e3c02, 0x7fac0467, 0x2eda4cc8, 0x1e0874ad, - 0x0a724f8a, 0x3aa077ef, 0x6bd63f40, 0x5b040725, 0xc93aae1e, 0xf9e8967b, - 0xa89eded4, 0x984ce6b1, 0x890ffa53, 0xb9ddc236, 0xe8ab8a99, 0xd879b2fc, - 0x4a471bc7, 0x7a9523a2, 0x2be36b0d, 0x1b315368, 0x096552c9, 0x39b76aac, - 0x68c12203, 0x58131a66, 0xca2db35d, 0xfaff8b38, 0xab89c397, 0x9b5bfbf2, - 0x8a18e710, 0xbacadf75, 0xebbc97da, 0xdb6eafbf, 0x49500684, 0x79823ee1, - 0x28f4764e, 0x18264e2b, 0x18b8ea18, 0x286ad27d, 0x791c9ad2, 0x49cea2b7, - 0xdbf00b8c, 0xeb2233e9, 0xba547b46, 0x8a864323, 0x9bc55fc1, 0xab1767a4, - 0xfa612f0b, 0xcab3176e, 0x588dbe55, 0x685f8630, 0x3929ce9f, 0x09fbf6fa, - 0x1baff75b, 0x2b7dcf3e, 0x7a0b8791, 0x4ad9bff4, 0xd8e716cf, 0xe8352eaa, - 0xb9436605, 0x89915e60, 0x98d24282, 0xa8007ae7, 0xf9763248, 0xc9a40a2d, - 0x5b9aa316, 0x6b489b73, 0x3a3ed3dc, 0x0aecebb9, 0x1e96d09e, 0x2e44e8fb, - 0x7f32a054, 0x4fe09831, 0xddde310a, 0xed0c096f, 0xbc7a41c0, 0x8ca879a5, - 0x9deb6547, 0xad395d22, 0xfc4f158d, 0xcc9d2de8, 0x5ea384d3, 0x6e71bcb6, - 0x3f07f419, 0x0fd5cc7c, 0x1d81cddd, 0x2d53f5b8, 0x7c25bd17, 0x4cf78572, - 0xdec92c49, 0xee1b142c, 0xbf6d5c83, 0x8fbf64e6, 0x9efc7804, 0xae2e4061, - 0xff5808ce, 0xcf8a30ab, 0x5db49990, 0x6d66a1f5, 0x3c10e95a, 0x0cc2d13f, - 0x14e49f14, 0x2436a771, 0x7540efde, 0x4592d7bb, 0xd7ac7e80, 0xe77e46e5, - 0xb6080e4a, 0x86da362f, 0x97992acd, 0xa74b12a8, 0xf63d5a07, 0xc6ef6262, - 0x54d1cb59, 0x6403f33c, 0x3575bb93, 0x05a783f6, 0x17f38257, 0x2721ba32, - 0x7657f29d, 0x4685caf8, 0xd4bb63c3, 0xe4695ba6, 0xb51f1309, 0x85cd2b6c, - 0x948e378e, 0xa45c0feb, 0xf52a4744, 0xc5f87f21, 0x57c6d61a, 0x6714ee7f, - 0x3662a6d0, 0x06b09eb5, 0x12caa592, 0x22189df7, 0x736ed558, 0x43bced3d, - 0xd1824406, 0xe1507c63, 0xb02634cc, 0x80f40ca9, 0x91b7104b, 0xa165282e, - 0xf0136081, 0xc0c158e4, 0x52fff1df, 0x622dc9ba, 0x335b8115, 0x0389b970, - 0x11ddb8d1, 0x210f80b4, 0x7079c81b, 0x40abf07e, 0xd2955945, 0xe2476120, - 0xb331298f, 0x83e311ea, 0x92a00d08, 0xa272356d, 0xf3047dc2, 0xc3d645a7, - 0x51e8ec9c, 0x613ad4f9, 0x304c9c56, 0x009ea433}; - -const uint32_t kStrideExtensionTable1[256] = { - 0x00000000, 0x54075546, 0xa80eaa8c, 0xfc09ffca, 0x55f123e9, 0x01f676af, - 0xfdff8965, 0xa9f8dc23, 0xabe247d2, 0xffe51294, 0x03eced5e, 0x57ebb818, - 0xfe13643b, 0xaa14317d, 0x561dceb7, 0x021a9bf1, 0x5228f955, 0x062fac13, - 0xfa2653d9, 0xae21069f, 0x07d9dabc, 0x53de8ffa, 0xafd77030, 0xfbd02576, - 0xf9cabe87, 0xadcdebc1, 0x51c4140b, 0x05c3414d, 0xac3b9d6e, 0xf83cc828, - 0x043537e2, 0x503262a4, 0xa451f2aa, 0xf056a7ec, 0x0c5f5826, 0x58580d60, - 0xf1a0d143, 0xa5a78405, 0x59ae7bcf, 0x0da92e89, 0x0fb3b578, 0x5bb4e03e, - 0xa7bd1ff4, 0xf3ba4ab2, 0x5a429691, 0x0e45c3d7, 0xf24c3c1d, 0xa64b695b, - 0xf6790bff, 0xa27e5eb9, 0x5e77a173, 0x0a70f435, 0xa3882816, 0xf78f7d50, - 0x0b86829a, 0x5f81d7dc, 0x5d9b4c2d, 0x099c196b, 0xf595e6a1, 0xa192b3e7, - 0x086a6fc4, 0x5c6d3a82, 0xa064c548, 0xf463900e, 0x4d4f93a5, 0x1948c6e3, - 0xe5413929, 0xb1466c6f, 0x18beb04c, 0x4cb9e50a, 0xb0b01ac0, 0xe4b74f86, - 0xe6add477, 0xb2aa8131, 0x4ea37efb, 0x1aa42bbd, 0xb35cf79e, 0xe75ba2d8, - 0x1b525d12, 0x4f550854, 0x1f676af0, 0x4b603fb6, 0xb769c07c, 0xe36e953a, - 0x4a964919, 0x1e911c5f, 0xe298e395, 0xb69fb6d3, 0xb4852d22, 0xe0827864, - 0x1c8b87ae, 0x488cd2e8, 0xe1740ecb, 0xb5735b8d, 0x497aa447, 0x1d7df101, - 0xe91e610f, 0xbd193449, 0x4110cb83, 0x15179ec5, 0xbcef42e6, 0xe8e817a0, - 0x14e1e86a, 0x40e6bd2c, 0x42fc26dd, 0x16fb739b, 0xeaf28c51, 0xbef5d917, - 0x170d0534, 0x430a5072, 0xbf03afb8, 0xeb04fafe, 0xbb36985a, 0xef31cd1c, - 0x133832d6, 0x473f6790, 0xeec7bbb3, 0xbac0eef5, 0x46c9113f, 0x12ce4479, - 0x10d4df88, 0x44d38ace, 0xb8da7504, 0xecdd2042, 0x4525fc61, 0x1122a927, - 0xed2b56ed, 0xb92c03ab, 0x9a9f274a, 0xce98720c, 0x32918dc6, 0x6696d880, - 0xcf6e04a3, 0x9b6951e5, 0x6760ae2f, 0x3367fb69, 0x317d6098, 0x657a35de, - 0x9973ca14, 0xcd749f52, 0x648c4371, 0x308b1637, 0xcc82e9fd, 0x9885bcbb, - 0xc8b7de1f, 0x9cb08b59, 0x60b97493, 0x34be21d5, 0x9d46fdf6, 0xc941a8b0, - 0x3548577a, 0x614f023c, 0x635599cd, 0x3752cc8b, 0xcb5b3341, 0x9f5c6607, - 0x36a4ba24, 0x62a3ef62, 0x9eaa10a8, 0xcaad45ee, 0x3eced5e0, 0x6ac980a6, - 0x96c07f6c, 0xc2c72a2a, 0x6b3ff609, 0x3f38a34f, 0xc3315c85, 0x973609c3, - 0x952c9232, 0xc12bc774, 0x3d2238be, 0x69256df8, 0xc0ddb1db, 0x94dae49d, - 0x68d31b57, 0x3cd44e11, 0x6ce62cb5, 0x38e179f3, 0xc4e88639, 0x90efd37f, - 0x39170f5c, 0x6d105a1a, 0x9119a5d0, 0xc51ef096, 0xc7046b67, 0x93033e21, - 0x6f0ac1eb, 0x3b0d94ad, 0x92f5488e, 0xc6f21dc8, 0x3afbe202, 0x6efcb744, - 0xd7d0b4ef, 0x83d7e1a9, 0x7fde1e63, 0x2bd94b25, 0x82219706, 0xd626c240, - 0x2a2f3d8a, 0x7e2868cc, 0x7c32f33d, 0x2835a67b, 0xd43c59b1, 0x803b0cf7, - 0x29c3d0d4, 0x7dc48592, 0x81cd7a58, 0xd5ca2f1e, 0x85f84dba, 0xd1ff18fc, - 0x2df6e736, 0x79f1b270, 0xd0096e53, 0x840e3b15, 0x7807c4df, 0x2c009199, - 0x2e1a0a68, 0x7a1d5f2e, 0x8614a0e4, 0xd213f5a2, 0x7beb2981, 0x2fec7cc7, - 0xd3e5830d, 0x87e2d64b, 0x73814645, 0x27861303, 0xdb8fecc9, 0x8f88b98f, - 0x267065ac, 0x727730ea, 0x8e7ecf20, 0xda799a66, 0xd8630197, 0x8c6454d1, - 0x706dab1b, 0x246afe5d, 0x8d92227e, 0xd9957738, 0x259c88f2, 0x719bddb4, - 0x21a9bf10, 0x75aeea56, 0x89a7159c, 0xdda040da, 0x74589cf9, 0x205fc9bf, - 0xdc563675, 0x88516333, 0x8a4bf8c2, 0xde4cad84, 0x2245524e, 0x76420708, - 0xdfbadb2b, 0x8bbd8e6d, 0x77b471a7, 0x23b324e1}; - -const uint32_t kStrideExtensionTable2[256] = { - 0x00000000, 0x678efd01, 0xcf1dfa02, 0xa8930703, 0x9bd782f5, 0xfc597ff4, - 0x54ca78f7, 0x334485f6, 0x3243731b, 0x55cd8e1a, 0xfd5e8919, 0x9ad07418, - 0xa994f1ee, 0xce1a0cef, 0x66890bec, 0x0107f6ed, 0x6486e636, 0x03081b37, - 0xab9b1c34, 0xcc15e135, 0xff5164c3, 0x98df99c2, 0x304c9ec1, 0x57c263c0, - 0x56c5952d, 0x314b682c, 0x99d86f2f, 0xfe56922e, 0xcd1217d8, 0xaa9cead9, - 0x020fedda, 0x658110db, 0xc90dcc6c, 0xae83316d, 0x0610366e, 0x619ecb6f, - 0x52da4e99, 0x3554b398, 0x9dc7b49b, 0xfa49499a, 0xfb4ebf77, 0x9cc04276, - 0x34534575, 0x53ddb874, 0x60993d82, 0x0717c083, 0xaf84c780, 0xc80a3a81, - 0xad8b2a5a, 0xca05d75b, 0x6296d058, 0x05182d59, 0x365ca8af, 0x51d255ae, - 0xf94152ad, 0x9ecfafac, 0x9fc85941, 0xf846a440, 0x50d5a343, 0x375b5e42, - 0x041fdbb4, 0x639126b5, 0xcb0221b6, 0xac8cdcb7, 0x97f7ee29, 0xf0791328, - 0x58ea142b, 0x3f64e92a, 0x0c206cdc, 0x6bae91dd, 0xc33d96de, 0xa4b36bdf, - 0xa5b49d32, 0xc23a6033, 0x6aa96730, 0x0d279a31, 0x3e631fc7, 0x59ede2c6, - 0xf17ee5c5, 0x96f018c4, 0xf371081f, 0x94fff51e, 0x3c6cf21d, 0x5be20f1c, - 0x68a68aea, 0x0f2877eb, 0xa7bb70e8, 0xc0358de9, 0xc1327b04, 0xa6bc8605, - 0x0e2f8106, 0x69a17c07, 0x5ae5f9f1, 0x3d6b04f0, 0x95f803f3, 0xf276fef2, - 0x5efa2245, 0x3974df44, 0x91e7d847, 0xf6692546, 0xc52da0b0, 0xa2a35db1, - 0x0a305ab2, 0x6dbea7b3, 0x6cb9515e, 0x0b37ac5f, 0xa3a4ab5c, 0xc42a565d, - 0xf76ed3ab, 0x90e02eaa, 0x387329a9, 0x5ffdd4a8, 0x3a7cc473, 0x5df23972, - 0xf5613e71, 0x92efc370, 0xa1ab4686, 0xc625bb87, 0x6eb6bc84, 0x09384185, - 0x083fb768, 0x6fb14a69, 0xc7224d6a, 0xa0acb06b, 0x93e8359d, 0xf466c89c, - 0x5cf5cf9f, 0x3b7b329e, 0x2a03aaa3, 0x4d8d57a2, 0xe51e50a1, 0x8290ada0, - 0xb1d42856, 0xd65ad557, 0x7ec9d254, 0x19472f55, 0x1840d9b8, 0x7fce24b9, - 0xd75d23ba, 0xb0d3debb, 0x83975b4d, 0xe419a64c, 0x4c8aa14f, 0x2b045c4e, - 0x4e854c95, 0x290bb194, 0x8198b697, 0xe6164b96, 0xd552ce60, 0xb2dc3361, - 0x1a4f3462, 0x7dc1c963, 0x7cc63f8e, 0x1b48c28f, 0xb3dbc58c, 0xd455388d, - 0xe711bd7b, 0x809f407a, 0x280c4779, 0x4f82ba78, 0xe30e66cf, 0x84809bce, - 0x2c139ccd, 0x4b9d61cc, 0x78d9e43a, 0x1f57193b, 0xb7c41e38, 0xd04ae339, - 0xd14d15d4, 0xb6c3e8d5, 0x1e50efd6, 0x79de12d7, 0x4a9a9721, 0x2d146a20, - 0x85876d23, 0xe2099022, 0x878880f9, 0xe0067df8, 0x48957afb, 0x2f1b87fa, - 0x1c5f020c, 0x7bd1ff0d, 0xd342f80e, 0xb4cc050f, 0xb5cbf3e2, 0xd2450ee3, - 0x7ad609e0, 0x1d58f4e1, 0x2e1c7117, 0x49928c16, 0xe1018b15, 0x868f7614, - 0xbdf4448a, 0xda7ab98b, 0x72e9be88, 0x15674389, 0x2623c67f, 0x41ad3b7e, - 0xe93e3c7d, 0x8eb0c17c, 0x8fb73791, 0xe839ca90, 0x40aacd93, 0x27243092, - 0x1460b564, 0x73ee4865, 0xdb7d4f66, 0xbcf3b267, 0xd972a2bc, 0xbefc5fbd, - 0x166f58be, 0x71e1a5bf, 0x42a52049, 0x252bdd48, 0x8db8da4b, 0xea36274a, - 0xeb31d1a7, 0x8cbf2ca6, 0x242c2ba5, 0x43a2d6a4, 0x70e65352, 0x1768ae53, - 0xbffba950, 0xd8755451, 0x74f988e6, 0x137775e7, 0xbbe472e4, 0xdc6a8fe5, - 0xef2e0a13, 0x88a0f712, 0x2033f011, 0x47bd0d10, 0x46bafbfd, 0x213406fc, - 0x89a701ff, 0xee29fcfe, 0xdd6d7908, 0xbae38409, 0x1270830a, 0x75fe7e0b, - 0x107f6ed0, 0x77f193d1, 0xdf6294d2, 0xb8ec69d3, 0x8ba8ec25, 0xec261124, - 0x44b51627, 0x233beb26, 0x223c1dcb, 0x45b2e0ca, 0xed21e7c9, 0x8aaf1ac8, - 0xb9eb9f3e, 0xde65623f, 0x76f6653c, 0x1178983d}; - -const uint32_t kStrideExtensionTable3[256] = { - 0x00000000, 0xf20c0dfe, 0xe1f46d0d, 0x13f860f3, 0xc604aceb, 0x3408a115, - 0x27f0c1e6, 0xd5fccc18, 0x89e52f27, 0x7be922d9, 0x6811422a, 0x9a1d4fd4, - 0x4fe183cc, 0xbded8e32, 0xae15eec1, 0x5c19e33f, 0x162628bf, 0xe42a2541, - 0xf7d245b2, 0x05de484c, 0xd0228454, 0x222e89aa, 0x31d6e959, 0xc3dae4a7, - 0x9fc30798, 0x6dcf0a66, 0x7e376a95, 0x8c3b676b, 0x59c7ab73, 0xabcba68d, - 0xb833c67e, 0x4a3fcb80, 0x2c4c517e, 0xde405c80, 0xcdb83c73, 0x3fb4318d, - 0xea48fd95, 0x1844f06b, 0x0bbc9098, 0xf9b09d66, 0xa5a97e59, 0x57a573a7, - 0x445d1354, 0xb6511eaa, 0x63add2b2, 0x91a1df4c, 0x8259bfbf, 0x7055b241, - 0x3a6a79c1, 0xc866743f, 0xdb9e14cc, 0x29921932, 0xfc6ed52a, 0x0e62d8d4, - 0x1d9ab827, 0xef96b5d9, 0xb38f56e6, 0x41835b18, 0x527b3beb, 0xa0773615, - 0x758bfa0d, 0x8787f7f3, 0x947f9700, 0x66739afe, 0x5898a2fc, 0xaa94af02, - 0xb96ccff1, 0x4b60c20f, 0x9e9c0e17, 0x6c9003e9, 0x7f68631a, 0x8d646ee4, - 0xd17d8ddb, 0x23718025, 0x3089e0d6, 0xc285ed28, 0x17792130, 0xe5752cce, - 0xf68d4c3d, 0x048141c3, 0x4ebe8a43, 0xbcb287bd, 0xaf4ae74e, 0x5d46eab0, - 0x88ba26a8, 0x7ab62b56, 0x694e4ba5, 0x9b42465b, 0xc75ba564, 0x3557a89a, - 0x26afc869, 0xd4a3c597, 0x015f098f, 0xf3530471, 0xe0ab6482, 0x12a7697c, - 0x74d4f382, 0x86d8fe7c, 0x95209e8f, 0x672c9371, 0xb2d05f69, 0x40dc5297, - 0x53243264, 0xa1283f9a, 0xfd31dca5, 0x0f3dd15b, 0x1cc5b1a8, 0xeec9bc56, - 0x3b35704e, 0xc9397db0, 0xdac11d43, 0x28cd10bd, 0x62f2db3d, 0x90fed6c3, - 0x8306b630, 0x710abbce, 0xa4f677d6, 0x56fa7a28, 0x45021adb, 0xb70e1725, - 0xeb17f41a, 0x191bf9e4, 0x0ae39917, 0xf8ef94e9, 0x2d1358f1, 0xdf1f550f, - 0xcce735fc, 0x3eeb3802, 0xb13145f8, 0x433d4806, 0x50c528f5, 0xa2c9250b, - 0x7735e913, 0x8539e4ed, 0x96c1841e, 0x64cd89e0, 0x38d46adf, 0xcad86721, - 0xd92007d2, 0x2b2c0a2c, 0xfed0c634, 0x0cdccbca, 0x1f24ab39, 0xed28a6c7, - 0xa7176d47, 0x551b60b9, 0x46e3004a, 0xb4ef0db4, 0x6113c1ac, 0x931fcc52, - 0x80e7aca1, 0x72eba15f, 0x2ef24260, 0xdcfe4f9e, 0xcf062f6d, 0x3d0a2293, - 0xe8f6ee8b, 0x1afae375, 0x09028386, 0xfb0e8e78, 0x9d7d1486, 0x6f711978, - 0x7c89798b, 0x8e857475, 0x5b79b86d, 0xa975b593, 0xba8dd560, 0x4881d89e, - 0x14983ba1, 0xe694365f, 0xf56c56ac, 0x07605b52, 0xd29c974a, 0x20909ab4, - 0x3368fa47, 0xc164f7b9, 0x8b5b3c39, 0x795731c7, 0x6aaf5134, 0x98a35cca, - 0x4d5f90d2, 0xbf539d2c, 0xacabfddf, 0x5ea7f021, 0x02be131e, 0xf0b21ee0, - 0xe34a7e13, 0x114673ed, 0xc4babff5, 0x36b6b20b, 0x254ed2f8, 0xd742df06, - 0xe9a9e704, 0x1ba5eafa, 0x085d8a09, 0xfa5187f7, 0x2fad4bef, 0xdda14611, - 0xce5926e2, 0x3c552b1c, 0x604cc823, 0x9240c5dd, 0x81b8a52e, 0x73b4a8d0, - 0xa64864c8, 0x54446936, 0x47bc09c5, 0xb5b0043b, 0xff8fcfbb, 0x0d83c245, - 0x1e7ba2b6, 0xec77af48, 0x398b6350, 0xcb876eae, 0xd87f0e5d, 0x2a7303a3, - 0x766ae09c, 0x8466ed62, 0x979e8d91, 0x6592806f, 0xb06e4c77, 0x42624189, - 0x519a217a, 0xa3962c84, 0xc5e5b67a, 0x37e9bb84, 0x2411db77, 0xd61dd689, - 0x03e11a91, 0xf1ed176f, 0xe215779c, 0x10197a62, 0x4c00995d, 0xbe0c94a3, - 0xadf4f450, 0x5ff8f9ae, 0x8a0435b6, 0x78083848, 0x6bf058bb, 0x99fc5545, - 0xd3c39ec5, 0x21cf933b, 0x3237f3c8, 0xc03bfe36, 0x15c7322e, 0xe7cb3fd0, - 0xf4335f23, 0x063f52dd, 0x5a26b1e2, 0xa82abc1c, 0xbbd2dcef, 0x49ded111, - 0x9c221d09, 0x6e2e10f7, 0x7dd67004, 0x8fda7dfa}; - -// CRCs are pre- and post- conditioned by xoring with all ones. -static constexpr const uint32_t kCRC32Xor = static_cast<uint32_t>(0xffffffffU); - -// Reads a little-endian 32-bit integer from a 32-bit-aligned buffer. -inline uint32_t ReadUint32LE(const uint8_t* buffer) { - return DecodeFixed32(reinterpret_cast<const char*>(buffer)); -} - -// Returns the smallest address >= the given address that is aligned to N bytes. -// -// N must be a power of two. -template <int N> -constexpr inline const uint8_t* RoundUp(const uint8_t* pointer) { - return reinterpret_cast<uint8_t*>( - (reinterpret_cast<uintptr_t>(pointer) + (N - 1)) & - ~static_cast<uintptr_t>(N - 1)); -} - -} // namespace - -// Determine if the CPU running this program can accelerate the CRC32C -// calculation. -static bool CanAccelerateCRC32C() { - // port::AcceleretedCRC32C returns zero when unable to accelerate. - static const char kTestCRCBuffer[] = "TestCRCBuffer"; - static const char kBufSize = sizeof(kTestCRCBuffer) - 1; - static const uint32_t kTestCRCValue = 0xdcbc59fa; - - return port::AcceleratedCRC32C(0, kTestCRCBuffer, kBufSize) == kTestCRCValue; -} - -uint32_t Extend(uint32_t crc, const char* data, size_t n) { - static bool accelerate = CanAccelerateCRC32C(); - if (accelerate) { - return port::AcceleratedCRC32C(crc, data, n); - } - - const uint8_t* p = reinterpret_cast<const uint8_t*>(data); - const uint8_t* e = p + n; - uint32_t l = crc ^ kCRC32Xor; - -// Process one byte at a time. -#define STEP1 \ - do { \ - int c = (l & 0xff) ^ *p++; \ - l = kByteExtensionTable[c] ^ (l >> 8); \ - } while (0) - -// Process one of the 4 strides of 4-byte data. -#define STEP4(s) \ - do { \ - crc##s = ReadUint32LE(p + s * 4) ^ kStrideExtensionTable3[crc##s & 0xff] ^ \ - kStrideExtensionTable2[(crc##s >> 8) & 0xff] ^ \ - kStrideExtensionTable1[(crc##s >> 16) & 0xff] ^ \ - kStrideExtensionTable0[crc##s >> 24]; \ - } while (0) - -// Process a 16-byte swath of 4 strides, each of which has 4 bytes of data. -#define STEP16 \ - do { \ - STEP4(0); \ - STEP4(1); \ - STEP4(2); \ - STEP4(3); \ - p += 16; \ - } while (0) - -// Process 4 bytes that were already loaded into a word. -#define STEP4W(w) \ - do { \ - w ^= l; \ - for (size_t i = 0; i < 4; ++i) { \ - w = (w >> 8) ^ kByteExtensionTable[w & 0xff]; \ - } \ - l = w; \ - } while (0) - - // Point x at first 4-byte aligned byte in the buffer. This might be past the - // end of the buffer. - const uint8_t* x = RoundUp<4>(p); - if (x <= e) { - // Process bytes p is 4-byte aligned. - while (p != x) { - STEP1; - } - } - - if ((e - p) >= 16) { - // Load a 16-byte swath into the stride partial results. - uint32_t crc0 = ReadUint32LE(p + 0 * 4) ^ l; - uint32_t crc1 = ReadUint32LE(p + 1 * 4); - uint32_t crc2 = ReadUint32LE(p + 2 * 4); - uint32_t crc3 = ReadUint32LE(p + 3 * 4); - p += 16; - - // It is possible to get better speeds (at least on x86) by interleaving - // prefetching 256 bytes ahead with processing 64 bytes at a time. See the - // portable implementation in https://github.com/google/crc32c/. - - // Process one 16-byte swath at a time. - while ((e - p) >= 16) { - STEP16; - } - - // Advance one word at a time as far as possible. - while ((e - p) >= 4) { - STEP4(0); - uint32_t tmp = crc0; - crc0 = crc1; - crc1 = crc2; - crc2 = crc3; - crc3 = tmp; - p += 4; - } - - // Combine the 4 partial stride results. - l = 0; - STEP4W(crc0); - STEP4W(crc1); - STEP4W(crc2); - STEP4W(crc3); - } - - // Process the last few bytes. - while (p != e) { - STEP1; - } -#undef STEP4W -#undef STEP16 -#undef STEP4 -#undef STEP1 - return l ^ kCRC32Xor; -} - -} // namespace crc32c -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/util/crc32c.h b/assign5/openTok/Pods/leveldb-library/util/crc32c.h deleted file mode 100644 index 98fabb0..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/crc32c.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_CRC32C_H_ -#define STORAGE_LEVELDB_UTIL_CRC32C_H_ - -#include <stddef.h> -#include <stdint.h> - -namespace leveldb { -namespace crc32c { - -// Return the crc32c of concat(A, data[0,n-1]) where init_crc is the -// crc32c of some string A. Extend() is often used to maintain the -// crc32c of a stream of data. -uint32_t Extend(uint32_t init_crc, const char* data, size_t n); - -// Return the crc32c of data[0,n-1] -inline uint32_t Value(const char* data, size_t n) { return Extend(0, data, n); } - -static const uint32_t kMaskDelta = 0xa282ead8ul; - -// Return a masked representation of crc. -// -// Motivation: it is problematic to compute the CRC of a string that -// contains embedded CRCs. Therefore we recommend that CRCs stored -// somewhere (e.g., in files) should be masked before being stored. -inline uint32_t Mask(uint32_t crc) { - // Rotate right by 15 bits and add a constant. - return ((crc >> 15) | (crc << 17)) + kMaskDelta; -} - -// Return the crc whose masked representation is masked_crc. -inline uint32_t Unmask(uint32_t masked_crc) { - uint32_t rot = masked_crc - kMaskDelta; - return ((rot >> 17) | (rot << 15)); -} - -} // namespace crc32c -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_CRC32C_H_ diff --git a/assign5/openTok/Pods/leveldb-library/util/env.cc b/assign5/openTok/Pods/leveldb-library/util/env.cc deleted file mode 100644 index 6cd5f2e..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/env.cc +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/env.h" - -namespace leveldb { - -Env::~Env() {} - -Status Env::NewAppendableFile(const std::string& fname, WritableFile** result) { - return Status::NotSupported("NewAppendableFile", fname); -} - -SequentialFile::~SequentialFile() {} - -RandomAccessFile::~RandomAccessFile() {} - -WritableFile::~WritableFile() {} - -Logger::~Logger() {} - -FileLock::~FileLock() {} - -void Log(Logger* info_log, const char* format, ...) { - if (info_log != nullptr) { - va_list ap; - va_start(ap, format); - info_log->Logv(format, ap); - va_end(ap); - } -} - -static Status DoWriteStringToFile(Env* env, const Slice& data, - const std::string& fname, bool should_sync) { - WritableFile* file; - Status s = env->NewWritableFile(fname, &file); - if (!s.ok()) { - return s; - } - s = file->Append(data); - if (s.ok() && should_sync) { - s = file->Sync(); - } - if (s.ok()) { - s = file->Close(); - } - delete file; // Will auto-close if we did not close above - if (!s.ok()) { - env->DeleteFile(fname); - } - return s; -} - -Status WriteStringToFile(Env* env, const Slice& data, - const std::string& fname) { - return DoWriteStringToFile(env, data, fname, false); -} - -Status WriteStringToFileSync(Env* env, const Slice& data, - const std::string& fname) { - return DoWriteStringToFile(env, data, fname, true); -} - -Status ReadFileToString(Env* env, const std::string& fname, std::string* data) { - data->clear(); - SequentialFile* file; - Status s = env->NewSequentialFile(fname, &file); - if (!s.ok()) { - return s; - } - static const int kBufferSize = 8192; - char* space = new char[kBufferSize]; - while (true) { - Slice fragment; - s = file->Read(kBufferSize, &fragment, space); - if (!s.ok()) { - break; - } - data->append(fragment.data(), fragment.size()); - if (fragment.empty()) { - break; - } - } - delete[] space; - delete file; - return s; -} - -EnvWrapper::~EnvWrapper() {} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/util/env_posix.cc b/assign5/openTok/Pods/leveldb-library/util/env_posix.cc deleted file mode 100644 index 8c74f5a..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/env_posix.cc +++ /dev/null @@ -1,876 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include <dirent.h> -#include <fcntl.h> -#include <pthread.h> -#include <sys/mman.h> -#include <sys/resource.h> -#include <sys/stat.h> -#include <sys/time.h> -#include <sys/types.h> -#include <unistd.h> - -#include <atomic> -#include <cerrno> -#include <cstddef> -#include <cstdint> -#include <cstdio> -#include <cstdlib> -#include <cstring> -#include <limits> -#include <queue> -#include <set> -#include <string> -#include <thread> -#include <type_traits> -#include <utility> - -#include "leveldb/env.h" -#include "leveldb/slice.h" -#include "leveldb/status.h" -#include "port/port.h" -#include "port/thread_annotations.h" -#include "util/env_posix_test_helper.h" -#include "util/posix_logger.h" - -namespace leveldb { - -namespace { - -// Set by EnvPosixTestHelper::SetReadOnlyMMapLimit() and MaxOpenFiles(). -int g_open_read_only_file_limit = -1; - -// Up to 1000 mmap regions for 64-bit binaries; none for 32-bit. -constexpr const int kDefaultMmapLimit = (sizeof(void*) >= 8) ? 1000 : 0; - -// Can be set using EnvPosixTestHelper::SetReadOnlyMMapLimit. -int g_mmap_limit = kDefaultMmapLimit; - -constexpr const size_t kWritableFileBufferSize = 65536; - -Status PosixError(const std::string& context, int error_number) { - if (error_number == ENOENT) { - return Status::NotFound(context, std::strerror(error_number)); - } else { - return Status::IOError(context, std::strerror(error_number)); - } -} - -// Helper class to limit resource usage to avoid exhaustion. -// Currently used to limit read-only file descriptors and mmap file usage -// so that we do not run out of file descriptors or virtual memory, or run into -// kernel performance problems for very large databases. -class Limiter { - public: - // Limit maximum number of resources to |max_acquires|. - Limiter(int max_acquires) : acquires_allowed_(max_acquires) {} - - Limiter(const Limiter&) = delete; - Limiter operator=(const Limiter&) = delete; - - // If another resource is available, acquire it and return true. - // Else return false. - bool Acquire() { - int old_acquires_allowed = - acquires_allowed_.fetch_sub(1, std::memory_order_relaxed); - - if (old_acquires_allowed > 0) return true; - - acquires_allowed_.fetch_add(1, std::memory_order_relaxed); - return false; - } - - // Release a resource acquired by a previous call to Acquire() that returned - // true. - void Release() { acquires_allowed_.fetch_add(1, std::memory_order_relaxed); } - - private: - // The number of available resources. - // - // This is a counter and is not tied to the invariants of any other class, so - // it can be operated on safely using std::memory_order_relaxed. - std::atomic<int> acquires_allowed_; -}; - -// Implements sequential read access in a file using read(). -// -// Instances of this class are thread-friendly but not thread-safe, as required -// by the SequentialFile API. -class PosixSequentialFile final : public SequentialFile { - public: - PosixSequentialFile(std::string filename, int fd) - : fd_(fd), filename_(filename) {} - ~PosixSequentialFile() override { close(fd_); } - - Status Read(size_t n, Slice* result, char* scratch) override { - Status status; - while (true) { - ::ssize_t read_size = ::read(fd_, scratch, n); - if (read_size < 0) { // Read error. - if (errno == EINTR) { - continue; // Retry - } - status = PosixError(filename_, errno); - break; - } - *result = Slice(scratch, read_size); - break; - } - return status; - } - - Status Skip(uint64_t n) override { - if (::lseek(fd_, n, SEEK_CUR) == static_cast<off_t>(-1)) { - return PosixError(filename_, errno); - } - return Status::OK(); - } - - private: - const int fd_; - const std::string filename_; -}; - -// Implements random read access in a file using pread(). -// -// Instances of this class are thread-safe, as required by the RandomAccessFile -// API. Instances are immutable and Read() only calls thread-safe library -// functions. -class PosixRandomAccessFile final : public RandomAccessFile { - public: - // The new instance takes ownership of |fd|. |fd_limiter| must outlive this - // instance, and will be used to determine if . - PosixRandomAccessFile(std::string filename, int fd, Limiter* fd_limiter) - : has_permanent_fd_(fd_limiter->Acquire()), - fd_(has_permanent_fd_ ? fd : -1), - fd_limiter_(fd_limiter), - filename_(std::move(filename)) { - if (!has_permanent_fd_) { - assert(fd_ == -1); - ::close(fd); // The file will be opened on every read. - } - } - - ~PosixRandomAccessFile() override { - if (has_permanent_fd_) { - assert(fd_ != -1); - ::close(fd_); - fd_limiter_->Release(); - } - } - - Status Read(uint64_t offset, size_t n, Slice* result, - char* scratch) const override { - int fd = fd_; - if (!has_permanent_fd_) { - fd = ::open(filename_.c_str(), O_RDONLY); - if (fd < 0) { - return PosixError(filename_, errno); - } - } - - assert(fd != -1); - - Status status; - ssize_t read_size = ::pread(fd, scratch, n, static_cast<off_t>(offset)); - *result = Slice(scratch, (read_size < 0) ? 0 : read_size); - if (read_size < 0) { - // An error: return a non-ok status. - status = PosixError(filename_, errno); - } - if (!has_permanent_fd_) { - // Close the temporary file descriptor opened earlier. - assert(fd != fd_); - ::close(fd); - } - return status; - } - - private: - const bool has_permanent_fd_; // If false, the file is opened on every read. - const int fd_; // -1 if has_permanent_fd_ is false. - Limiter* const fd_limiter_; - const std::string filename_; -}; - -// Implements random read access in a file using mmap(). -// -// Instances of this class are thread-safe, as required by the RandomAccessFile -// API. Instances are immutable and Read() only calls thread-safe library -// functions. -class PosixMmapReadableFile final : public RandomAccessFile { - public: - // mmap_base[0, length-1] points to the memory-mapped contents of the file. It - // must be the result of a successful call to mmap(). This instances takes - // over the ownership of the region. - // - // |mmap_limiter| must outlive this instance. The caller must have already - // aquired the right to use one mmap region, which will be released when this - // instance is destroyed. - PosixMmapReadableFile(std::string filename, char* mmap_base, size_t length, - Limiter* mmap_limiter) - : mmap_base_(mmap_base), - length_(length), - mmap_limiter_(mmap_limiter), - filename_(std::move(filename)) {} - - ~PosixMmapReadableFile() override { - ::munmap(static_cast<void*>(mmap_base_), length_); - mmap_limiter_->Release(); - } - - Status Read(uint64_t offset, size_t n, Slice* result, - char* scratch) const override { - if (offset + n > length_) { - *result = Slice(); - return PosixError(filename_, EINVAL); - } - - *result = Slice(mmap_base_ + offset, n); - return Status::OK(); - } - - private: - char* const mmap_base_; - const size_t length_; - Limiter* const mmap_limiter_; - const std::string filename_; -}; - -class PosixWritableFile final : public WritableFile { - public: - PosixWritableFile(std::string filename, int fd) - : pos_(0), - fd_(fd), - is_manifest_(IsManifest(filename)), - filename_(std::move(filename)), - dirname_(Dirname(filename_)) {} - - ~PosixWritableFile() override { - if (fd_ >= 0) { - // Ignoring any potential errors - Close(); - } - } - - Status Append(const Slice& data) override { - size_t write_size = data.size(); - const char* write_data = data.data(); - - // Fit as much as possible into buffer. - size_t copy_size = std::min(write_size, kWritableFileBufferSize - pos_); - std::memcpy(buf_ + pos_, write_data, copy_size); - write_data += copy_size; - write_size -= copy_size; - pos_ += copy_size; - if (write_size == 0) { - return Status::OK(); - } - - // Can't fit in buffer, so need to do at least one write. - Status status = FlushBuffer(); - if (!status.ok()) { - return status; - } - - // Small writes go to buffer, large writes are written directly. - if (write_size < kWritableFileBufferSize) { - std::memcpy(buf_, write_data, write_size); - pos_ = write_size; - return Status::OK(); - } - return WriteUnbuffered(write_data, write_size); - } - - Status Close() override { - Status status = FlushBuffer(); - const int close_result = ::close(fd_); - if (close_result < 0 && status.ok()) { - status = PosixError(filename_, errno); - } - fd_ = -1; - return status; - } - - Status Flush() override { return FlushBuffer(); } - - Status Sync() override { - // Ensure new files referred to by the manifest are in the filesystem. - // - // This needs to happen before the manifest file is flushed to disk, to - // avoid crashing in a state where the manifest refers to files that are not - // yet on disk. - Status status = SyncDirIfManifest(); - if (!status.ok()) { - return status; - } - - status = FlushBuffer(); - if (!status.ok()) { - return status; - } - - return SyncFd(fd_, filename_); - } - - private: - Status FlushBuffer() { - Status status = WriteUnbuffered(buf_, pos_); - pos_ = 0; - return status; - } - - Status WriteUnbuffered(const char* data, size_t size) { - while (size > 0) { - ssize_t write_result = ::write(fd_, data, size); - if (write_result < 0) { - if (errno == EINTR) { - continue; // Retry - } - return PosixError(filename_, errno); - } - data += write_result; - size -= write_result; - } - return Status::OK(); - } - - Status SyncDirIfManifest() { - Status status; - if (!is_manifest_) { - return status; - } - - int fd = ::open(dirname_.c_str(), O_RDONLY); - if (fd < 0) { - status = PosixError(dirname_, errno); - } else { - status = SyncFd(fd, dirname_); - ::close(fd); - } - return status; - } - - // Ensures that all the caches associated with the given file descriptor's - // data are flushed all the way to durable media, and can withstand power - // failures. - // - // The path argument is only used to populate the description string in the - // returned Status if an error occurs. - static Status SyncFd(int fd, const std::string& fd_path) { -#if HAVE_FULLFSYNC - // On macOS and iOS, fsync() doesn't guarantee durability past power - // failures. fcntl(F_FULLFSYNC) is required for that purpose. Some - // filesystems don't support fcntl(F_FULLFSYNC), and require a fallback to - // fsync(). - if (::fcntl(fd, F_FULLFSYNC) == 0) { - return Status::OK(); - } -#endif // HAVE_FULLFSYNC - -#if HAVE_FDATASYNC - bool sync_success = ::fdatasync(fd) == 0; -#else - bool sync_success = ::fsync(fd) == 0; -#endif // HAVE_FDATASYNC - - if (sync_success) { - return Status::OK(); - } - return PosixError(fd_path, errno); - } - - // Returns the directory name in a path pointing to a file. - // - // Returns "." if the path does not contain any directory separator. - static std::string Dirname(const std::string& filename) { - std::string::size_type separator_pos = filename.rfind('/'); - if (separator_pos == std::string::npos) { - return std::string("."); - } - // The filename component should not contain a path separator. If it does, - // the splitting was done incorrectly. - assert(filename.find('/', separator_pos + 1) == std::string::npos); - - return filename.substr(0, separator_pos); - } - - // Extracts the file name from a path pointing to a file. - // - // The returned Slice points to |filename|'s data buffer, so it is only valid - // while |filename| is alive and unchanged. - static Slice Basename(const std::string& filename) { - std::string::size_type separator_pos = filename.rfind('/'); - if (separator_pos == std::string::npos) { - return Slice(filename); - } - // The filename component should not contain a path separator. If it does, - // the splitting was done incorrectly. - assert(filename.find('/', separator_pos + 1) == std::string::npos); - - return Slice(filename.data() + separator_pos + 1, - filename.length() - separator_pos - 1); - } - - // True if the given file is a manifest file. - static bool IsManifest(const std::string& filename) { - return Basename(filename).starts_with("MANIFEST"); - } - - // buf_[0, pos_ - 1] contains data to be written to fd_. - char buf_[kWritableFileBufferSize]; - size_t pos_; - int fd_; - - const bool is_manifest_; // True if the file's name starts with MANIFEST. - const std::string filename_; - const std::string dirname_; // The directory of filename_. -}; - -int LockOrUnlock(int fd, bool lock) { - errno = 0; - struct ::flock file_lock_info; - std::memset(&file_lock_info, 0, sizeof(file_lock_info)); - file_lock_info.l_type = (lock ? F_WRLCK : F_UNLCK); - file_lock_info.l_whence = SEEK_SET; - file_lock_info.l_start = 0; - file_lock_info.l_len = 0; // Lock/unlock entire file. - return ::fcntl(fd, F_SETLK, &file_lock_info); -} - -// Instances are thread-safe because they are immutable. -class PosixFileLock : public FileLock { - public: - PosixFileLock(int fd, std::string filename) - : fd_(fd), filename_(std::move(filename)) {} - - int fd() const { return fd_; } - const std::string& filename() const { return filename_; } - - private: - const int fd_; - const std::string filename_; -}; - -// Tracks the files locked by PosixEnv::LockFile(). -// -// We maintain a separate set instead of relying on fcntrl(F_SETLK) because -// fcntl(F_SETLK) does not provide any protection against multiple uses from the -// same process. -// -// Instances are thread-safe because all member data is guarded by a mutex. -class PosixLockTable { - public: - bool Insert(const std::string& fname) LOCKS_EXCLUDED(mu_) { - mu_.Lock(); - bool succeeded = locked_files_.insert(fname).second; - mu_.Unlock(); - return succeeded; - } - void Remove(const std::string& fname) LOCKS_EXCLUDED(mu_) { - mu_.Lock(); - locked_files_.erase(fname); - mu_.Unlock(); - } - - private: - port::Mutex mu_; - std::set<std::string> locked_files_ GUARDED_BY(mu_); -}; - -class PosixEnv : public Env { - public: - PosixEnv(); - ~PosixEnv() override { - static char msg[] = "PosixEnv singleton destroyed. Unsupported behavior!\n"; - std::fwrite(msg, 1, sizeof(msg), stderr); - std::abort(); - } - - Status NewSequentialFile(const std::string& filename, - SequentialFile** result) override { - int fd = ::open(filename.c_str(), O_RDONLY); - if (fd < 0) { - *result = nullptr; - return PosixError(filename, errno); - } - - *result = new PosixSequentialFile(filename, fd); - return Status::OK(); - } - - Status NewRandomAccessFile(const std::string& filename, - RandomAccessFile** result) override { - *result = nullptr; - int fd = ::open(filename.c_str(), O_RDONLY); - if (fd < 0) { - return PosixError(filename, errno); - } - - if (!mmap_limiter_.Acquire()) { - *result = new PosixRandomAccessFile(filename, fd, &fd_limiter_); - return Status::OK(); - } - - uint64_t file_size; - Status status = GetFileSize(filename, &file_size); - if (status.ok()) { - void* mmap_base = - ::mmap(/*addr=*/nullptr, file_size, PROT_READ, MAP_SHARED, fd, 0); - if (mmap_base != MAP_FAILED) { - *result = new PosixMmapReadableFile(filename, - reinterpret_cast<char*>(mmap_base), - file_size, &mmap_limiter_); - } else { - status = PosixError(filename, errno); - } - } - ::close(fd); - if (!status.ok()) { - mmap_limiter_.Release(); - } - return status; - } - - Status NewWritableFile(const std::string& filename, - WritableFile** result) override { - int fd = ::open(filename.c_str(), O_TRUNC | O_WRONLY | O_CREAT, 0644); - if (fd < 0) { - *result = nullptr; - return PosixError(filename, errno); - } - - *result = new PosixWritableFile(filename, fd); - return Status::OK(); - } - - Status NewAppendableFile(const std::string& filename, - WritableFile** result) override { - int fd = ::open(filename.c_str(), O_APPEND | O_WRONLY | O_CREAT, 0644); - if (fd < 0) { - *result = nullptr; - return PosixError(filename, errno); - } - - *result = new PosixWritableFile(filename, fd); - return Status::OK(); - } - - bool FileExists(const std::string& filename) override { - return ::access(filename.c_str(), F_OK) == 0; - } - - Status GetChildren(const std::string& directory_path, - std::vector<std::string>* result) override { - result->clear(); - ::DIR* dir = ::opendir(directory_path.c_str()); - if (dir == nullptr) { - return PosixError(directory_path, errno); - } - struct ::dirent* entry; - while ((entry = ::readdir(dir)) != nullptr) { - result->emplace_back(entry->d_name); - } - ::closedir(dir); - return Status::OK(); - } - - Status DeleteFile(const std::string& filename) override { - if (::unlink(filename.c_str()) != 0) { - return PosixError(filename, errno); - } - return Status::OK(); - } - - Status CreateDir(const std::string& dirname) override { - if (::mkdir(dirname.c_str(), 0755) != 0) { - return PosixError(dirname, errno); - } - return Status::OK(); - } - - Status DeleteDir(const std::string& dirname) override { - if (::rmdir(dirname.c_str()) != 0) { - return PosixError(dirname, errno); - } - return Status::OK(); - } - - Status GetFileSize(const std::string& filename, uint64_t* size) override { - struct ::stat file_stat; - if (::stat(filename.c_str(), &file_stat) != 0) { - *size = 0; - return PosixError(filename, errno); - } - *size = file_stat.st_size; - return Status::OK(); - } - - Status RenameFile(const std::string& from, const std::string& to) override { - if (std::rename(from.c_str(), to.c_str()) != 0) { - return PosixError(from, errno); - } - return Status::OK(); - } - - Status LockFile(const std::string& filename, FileLock** lock) override { - *lock = nullptr; - - int fd = ::open(filename.c_str(), O_RDWR | O_CREAT, 0644); - if (fd < 0) { - return PosixError(filename, errno); - } - - if (!locks_.Insert(filename)) { - ::close(fd); - return Status::IOError("lock " + filename, "already held by process"); - } - - if (LockOrUnlock(fd, true) == -1) { - int lock_errno = errno; - ::close(fd); - locks_.Remove(filename); - return PosixError("lock " + filename, lock_errno); - } - - *lock = new PosixFileLock(fd, filename); - return Status::OK(); - } - - Status UnlockFile(FileLock* lock) override { - PosixFileLock* posix_file_lock = static_cast<PosixFileLock*>(lock); - if (LockOrUnlock(posix_file_lock->fd(), false) == -1) { - return PosixError("unlock " + posix_file_lock->filename(), errno); - } - locks_.Remove(posix_file_lock->filename()); - ::close(posix_file_lock->fd()); - delete posix_file_lock; - return Status::OK(); - } - - void Schedule(void (*background_work_function)(void* background_work_arg), - void* background_work_arg) override; - - void StartThread(void (*thread_main)(void* thread_main_arg), - void* thread_main_arg) override; - - Status GetTestDirectory(std::string* result) override { - const char* env = std::getenv("TEST_TMPDIR"); - if (env && env[0] != '\0') { - *result = env; - } else { - char buf[100]; - std::snprintf(buf, sizeof(buf), "/tmp/leveldbtest-%d", - static_cast<int>(::geteuid())); - *result = buf; - } - - // The CreateDir status is ignored because the directory may already exist. - CreateDir(*result); - - return Status::OK(); - } - - Status NewLogger(const std::string& filename, Logger** result) override { - std::FILE* fp = std::fopen(filename.c_str(), "w"); - if (fp == nullptr) { - *result = nullptr; - return PosixError(filename, errno); - } else { - *result = new PosixLogger(fp); - return Status::OK(); - } - } - - uint64_t NowMicros() override { - static constexpr uint64_t kUsecondsPerSecond = 1000000; - struct ::timeval tv; - ::gettimeofday(&tv, nullptr); - return static_cast<uint64_t>(tv.tv_sec) * kUsecondsPerSecond + tv.tv_usec; - } - - void SleepForMicroseconds(int micros) override { ::usleep(micros); } - - private: - void BackgroundThreadMain(); - - static void BackgroundThreadEntryPoint(PosixEnv* env) { - env->BackgroundThreadMain(); - } - - // Stores the work item data in a Schedule() call. - // - // Instances are constructed on the thread calling Schedule() and used on the - // background thread. - // - // This structure is thread-safe beacuse it is immutable. - struct BackgroundWorkItem { - explicit BackgroundWorkItem(void (*function)(void* arg), void* arg) - : function(function), arg(arg) {} - - void (*const function)(void*); - void* const arg; - }; - - port::Mutex background_work_mutex_; - port::CondVar background_work_cv_ GUARDED_BY(background_work_mutex_); - bool started_background_thread_ GUARDED_BY(background_work_mutex_); - - std::queue<BackgroundWorkItem> background_work_queue_ - GUARDED_BY(background_work_mutex_); - - PosixLockTable locks_; // Thread-safe. - Limiter mmap_limiter_; // Thread-safe. - Limiter fd_limiter_; // Thread-safe. -}; - -// Return the maximum number of concurrent mmaps. -int MaxMmaps() { return g_mmap_limit; } - -// Return the maximum number of read-only files to keep open. -int MaxOpenFiles() { - if (g_open_read_only_file_limit >= 0) { - return g_open_read_only_file_limit; - } - struct ::rlimit rlim; - if (::getrlimit(RLIMIT_NOFILE, &rlim)) { - // getrlimit failed, fallback to hard-coded default. - g_open_read_only_file_limit = 50; - } else if (rlim.rlim_cur == RLIM_INFINITY) { - g_open_read_only_file_limit = std::numeric_limits<int>::max(); - } else { - // Allow use of 20% of available file descriptors for read-only files. - g_open_read_only_file_limit = rlim.rlim_cur / 5; - } - return g_open_read_only_file_limit; -} - -} // namespace - -PosixEnv::PosixEnv() - : background_work_cv_(&background_work_mutex_), - started_background_thread_(false), - mmap_limiter_(MaxMmaps()), - fd_limiter_(MaxOpenFiles()) {} - -void PosixEnv::Schedule( - void (*background_work_function)(void* background_work_arg), - void* background_work_arg) { - background_work_mutex_.Lock(); - - // Start the background thread, if we haven't done so already. - if (!started_background_thread_) { - started_background_thread_ = true; - std::thread background_thread(PosixEnv::BackgroundThreadEntryPoint, this); - background_thread.detach(); - } - - // If the queue is empty, the background thread may be waiting for work. - if (background_work_queue_.empty()) { - background_work_cv_.Signal(); - } - - background_work_queue_.emplace(background_work_function, background_work_arg); - background_work_mutex_.Unlock(); -} - -void PosixEnv::BackgroundThreadMain() { - while (true) { - background_work_mutex_.Lock(); - - // Wait until there is work to be done. - while (background_work_queue_.empty()) { - background_work_cv_.Wait(); - } - - assert(!background_work_queue_.empty()); - auto background_work_function = background_work_queue_.front().function; - void* background_work_arg = background_work_queue_.front().arg; - background_work_queue_.pop(); - - background_work_mutex_.Unlock(); - background_work_function(background_work_arg); - } -} - -namespace { - -// Wraps an Env instance whose destructor is never created. -// -// Intended usage: -// using PlatformSingletonEnv = SingletonEnv<PlatformEnv>; -// void ConfigurePosixEnv(int param) { -// PlatformSingletonEnv::AssertEnvNotInitialized(); -// // set global configuration flags. -// } -// Env* Env::Default() { -// static PlatformSingletonEnv default_env; -// return default_env.env(); -// } -template <typename EnvType> -class SingletonEnv { - public: - SingletonEnv() { -#if !defined(NDEBUG) - env_initialized_.store(true, std::memory_order::memory_order_relaxed); -#endif // !defined(NDEBUG) - static_assert(sizeof(env_storage_) >= sizeof(EnvType), - "env_storage_ will not fit the Env"); - static_assert(alignof(decltype(env_storage_)) >= alignof(EnvType), - "env_storage_ does not meet the Env's alignment needs"); - new (&env_storage_) EnvType(); - } - ~SingletonEnv() = default; - - SingletonEnv(const SingletonEnv&) = delete; - SingletonEnv& operator=(const SingletonEnv&) = delete; - - Env* env() { return reinterpret_cast<Env*>(&env_storage_); } - - static void AssertEnvNotInitialized() { -#if !defined(NDEBUG) - assert(!env_initialized_.load(std::memory_order::memory_order_relaxed)); -#endif // !defined(NDEBUG) - } - - private: - typename std::aligned_storage<sizeof(EnvType), alignof(EnvType)>::type - env_storage_; -#if !defined(NDEBUG) - static std::atomic<bool> env_initialized_; -#endif // !defined(NDEBUG) -}; - -#if !defined(NDEBUG) -template <typename EnvType> -std::atomic<bool> SingletonEnv<EnvType>::env_initialized_; -#endif // !defined(NDEBUG) - -using PosixDefaultEnv = SingletonEnv<PosixEnv>; - -} // namespace - -void PosixEnv::StartThread(void (*thread_main)(void* thread_main_arg), - void* thread_main_arg) { - std::thread new_thread(thread_main, thread_main_arg); - new_thread.detach(); -} - -void EnvPosixTestHelper::SetReadOnlyFDLimit(int limit) { - PosixDefaultEnv::AssertEnvNotInitialized(); - g_open_read_only_file_limit = limit; -} - -void EnvPosixTestHelper::SetReadOnlyMMapLimit(int limit) { - PosixDefaultEnv::AssertEnvNotInitialized(); - g_mmap_limit = limit; -} - -Env* Env::Default() { - static PosixDefaultEnv env_container; - return env_container.env(); -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/util/env_posix_test_helper.h b/assign5/openTok/Pods/leveldb-library/util/env_posix_test_helper.h deleted file mode 100644 index 0386960..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/env_posix_test_helper.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2017 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_ENV_POSIX_TEST_HELPER_H_ -#define STORAGE_LEVELDB_UTIL_ENV_POSIX_TEST_HELPER_H_ - -namespace leveldb { - -class EnvPosixTest; - -// A helper for the POSIX Env to facilitate testing. -class EnvPosixTestHelper { - private: - friend class EnvPosixTest; - - // Set the maximum number of read-only files that will be opened. - // Must be called before creating an Env. - static void SetReadOnlyFDLimit(int limit); - - // Set the maximum number of read-only files that will be mapped via mmap. - // Must be called before creating an Env. - static void SetReadOnlyMMapLimit(int limit); -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_ENV_POSIX_TEST_HELPER_H_ diff --git a/assign5/openTok/Pods/leveldb-library/util/env_windows_test_helper.h b/assign5/openTok/Pods/leveldb-library/util/env_windows_test_helper.h deleted file mode 100644 index e6f6020..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/env_windows_test_helper.h +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2018 (c) The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_ENV_WINDOWS_TEST_HELPER_H_ -#define STORAGE_LEVELDB_UTIL_ENV_WINDOWS_TEST_HELPER_H_ - -namespace leveldb { - -class EnvWindowsTest; - -// A helper for the Windows Env to facilitate testing. -class EnvWindowsTestHelper { - private: - friend class CorruptionTest; - friend class EnvWindowsTest; - - // Set the maximum number of read-only files that will be mapped via mmap. - // Must be called before creating an Env. - static void SetReadOnlyMMapLimit(int limit); -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_ENV_WINDOWS_TEST_HELPER_H_ diff --git a/assign5/openTok/Pods/leveldb-library/util/filter_policy.cc b/assign5/openTok/Pods/leveldb-library/util/filter_policy.cc deleted file mode 100644 index 90fd754..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/filter_policy.cc +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/filter_policy.h" - -namespace leveldb { - -FilterPolicy::~FilterPolicy() {} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/util/hash.cc b/assign5/openTok/Pods/leveldb-library/util/hash.cc deleted file mode 100644 index 67dc134..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/hash.cc +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/hash.h" - -#include <string.h> - -#include "util/coding.h" - -// The FALLTHROUGH_INTENDED macro can be used to annotate implicit fall-through -// between switch labels. The real definition should be provided externally. -// This one is a fallback version for unsupported compilers. -#ifndef FALLTHROUGH_INTENDED -#define FALLTHROUGH_INTENDED \ - do { \ - } while (0) -#endif - -namespace leveldb { - -uint32_t Hash(const char* data, size_t n, uint32_t seed) { - // Similar to murmur hash - const uint32_t m = 0xc6a4a793; - const uint32_t r = 24; - const char* limit = data + n; - uint32_t h = seed ^ (n * m); - - // Pick up four bytes at a time - while (data + 4 <= limit) { - uint32_t w = DecodeFixed32(data); - data += 4; - h += w; - h *= m; - h ^= (h >> 16); - } - - // Pick up remaining bytes - switch (limit - data) { - case 3: - h += static_cast<unsigned char>(data[2]) << 16; - FALLTHROUGH_INTENDED; - case 2: - h += static_cast<unsigned char>(data[1]) << 8; - FALLTHROUGH_INTENDED; - case 1: - h += static_cast<unsigned char>(data[0]); - h *= m; - h ^= (h >> r); - break; - } - return h; -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/util/hash.h b/assign5/openTok/Pods/leveldb-library/util/hash.h deleted file mode 100644 index 74bdb6e..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/hash.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Simple hash function used for internal data structures - -#ifndef STORAGE_LEVELDB_UTIL_HASH_H_ -#define STORAGE_LEVELDB_UTIL_HASH_H_ - -#include <stddef.h> -#include <stdint.h> - -namespace leveldb { - -uint32_t Hash(const char* data, size_t n, uint32_t seed); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_HASH_H_ diff --git a/assign5/openTok/Pods/leveldb-library/util/histogram.cc b/assign5/openTok/Pods/leveldb-library/util/histogram.cc deleted file mode 100644 index 65092c8..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/histogram.cc +++ /dev/null @@ -1,272 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/histogram.h" - -#include <math.h> -#include <stdio.h> - -#include "port/port.h" - -namespace leveldb { - -const double Histogram::kBucketLimit[kNumBuckets] = { - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 12, - 14, - 16, - 18, - 20, - 25, - 30, - 35, - 40, - 45, - 50, - 60, - 70, - 80, - 90, - 100, - 120, - 140, - 160, - 180, - 200, - 250, - 300, - 350, - 400, - 450, - 500, - 600, - 700, - 800, - 900, - 1000, - 1200, - 1400, - 1600, - 1800, - 2000, - 2500, - 3000, - 3500, - 4000, - 4500, - 5000, - 6000, - 7000, - 8000, - 9000, - 10000, - 12000, - 14000, - 16000, - 18000, - 20000, - 25000, - 30000, - 35000, - 40000, - 45000, - 50000, - 60000, - 70000, - 80000, - 90000, - 100000, - 120000, - 140000, - 160000, - 180000, - 200000, - 250000, - 300000, - 350000, - 400000, - 450000, - 500000, - 600000, - 700000, - 800000, - 900000, - 1000000, - 1200000, - 1400000, - 1600000, - 1800000, - 2000000, - 2500000, - 3000000, - 3500000, - 4000000, - 4500000, - 5000000, - 6000000, - 7000000, - 8000000, - 9000000, - 10000000, - 12000000, - 14000000, - 16000000, - 18000000, - 20000000, - 25000000, - 30000000, - 35000000, - 40000000, - 45000000, - 50000000, - 60000000, - 70000000, - 80000000, - 90000000, - 100000000, - 120000000, - 140000000, - 160000000, - 180000000, - 200000000, - 250000000, - 300000000, - 350000000, - 400000000, - 450000000, - 500000000, - 600000000, - 700000000, - 800000000, - 900000000, - 1000000000, - 1200000000, - 1400000000, - 1600000000, - 1800000000, - 2000000000, - 2500000000.0, - 3000000000.0, - 3500000000.0, - 4000000000.0, - 4500000000.0, - 5000000000.0, - 6000000000.0, - 7000000000.0, - 8000000000.0, - 9000000000.0, - 1e200, -}; - -void Histogram::Clear() { - min_ = kBucketLimit[kNumBuckets - 1]; - max_ = 0; - num_ = 0; - sum_ = 0; - sum_squares_ = 0; - for (int i = 0; i < kNumBuckets; i++) { - buckets_[i] = 0; - } -} - -void Histogram::Add(double value) { - // Linear search is fast enough for our usage in db_bench - int b = 0; - while (b < kNumBuckets - 1 && kBucketLimit[b] <= value) { - b++; - } - buckets_[b] += 1.0; - if (min_ > value) min_ = value; - if (max_ < value) max_ = value; - num_++; - sum_ += value; - sum_squares_ += (value * value); -} - -void Histogram::Merge(const Histogram& other) { - if (other.min_ < min_) min_ = other.min_; - if (other.max_ > max_) max_ = other.max_; - num_ += other.num_; - sum_ += other.sum_; - sum_squares_ += other.sum_squares_; - for (int b = 0; b < kNumBuckets; b++) { - buckets_[b] += other.buckets_[b]; - } -} - -double Histogram::Median() const { return Percentile(50.0); } - -double Histogram::Percentile(double p) const { - double threshold = num_ * (p / 100.0); - double sum = 0; - for (int b = 0; b < kNumBuckets; b++) { - sum += buckets_[b]; - if (sum >= threshold) { - // Scale linearly within this bucket - double left_point = (b == 0) ? 0 : kBucketLimit[b - 1]; - double right_point = kBucketLimit[b]; - double left_sum = sum - buckets_[b]; - double right_sum = sum; - double pos = (threshold - left_sum) / (right_sum - left_sum); - double r = left_point + (right_point - left_point) * pos; - if (r < min_) r = min_; - if (r > max_) r = max_; - return r; - } - } - return max_; -} - -double Histogram::Average() const { - if (num_ == 0.0) return 0; - return sum_ / num_; -} - -double Histogram::StandardDeviation() const { - if (num_ == 0.0) return 0; - double variance = (sum_squares_ * num_ - sum_ * sum_) / (num_ * num_); - return sqrt(variance); -} - -std::string Histogram::ToString() const { - std::string r; - char buf[200]; - snprintf(buf, sizeof(buf), "Count: %.0f Average: %.4f StdDev: %.2f\n", num_, - Average(), StandardDeviation()); - r.append(buf); - snprintf(buf, sizeof(buf), "Min: %.4f Median: %.4f Max: %.4f\n", - (num_ == 0.0 ? 0.0 : min_), Median(), max_); - r.append(buf); - r.append("------------------------------------------------------\n"); - const double mult = 100.0 / num_; - double sum = 0; - for (int b = 0; b < kNumBuckets; b++) { - if (buckets_[b] <= 0.0) continue; - sum += buckets_[b]; - snprintf(buf, sizeof(buf), "[ %7.0f, %7.0f ) %7.0f %7.3f%% %7.3f%% ", - ((b == 0) ? 0.0 : kBucketLimit[b - 1]), // left - kBucketLimit[b], // right - buckets_[b], // count - mult * buckets_[b], // percentage - mult * sum); // cumulative percentage - r.append(buf); - - // Add hash marks based on percentage; 20 marks for 100%. - int marks = static_cast<int>(20 * (buckets_[b] / num_) + 0.5); - r.append(marks, '#'); - r.push_back('\n'); - } - return r; -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/util/histogram.h b/assign5/openTok/Pods/leveldb-library/util/histogram.h deleted file mode 100644 index 4da60fb..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/histogram.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_HISTOGRAM_H_ -#define STORAGE_LEVELDB_UTIL_HISTOGRAM_H_ - -#include <string> - -namespace leveldb { - -class Histogram { - public: - Histogram() {} - ~Histogram() {} - - void Clear(); - void Add(double value); - void Merge(const Histogram& other); - - std::string ToString() const; - - private: - enum { kNumBuckets = 154 }; - - double Median() const; - double Percentile(double p) const; - double Average() const; - double StandardDeviation() const; - - static const double kBucketLimit[kNumBuckets]; - - double min_; - double max_; - double num_; - double sum_; - double sum_squares_; - - double buckets_[kNumBuckets]; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_HISTOGRAM_H_ diff --git a/assign5/openTok/Pods/leveldb-library/util/logging.cc b/assign5/openTok/Pods/leveldb-library/util/logging.cc deleted file mode 100644 index 1ad8f1c..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/logging.cc +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/logging.h" - -#include <errno.h> -#include <stdarg.h> -#include <stdio.h> -#include <stdlib.h> - -#include <limits> - -#include "leveldb/env.h" -#include "leveldb/slice.h" - -namespace leveldb { - -void AppendNumberTo(std::string* str, uint64_t num) { - char buf[30]; - snprintf(buf, sizeof(buf), "%llu", (unsigned long long)num); - str->append(buf); -} - -void AppendEscapedStringTo(std::string* str, const Slice& value) { - for (size_t i = 0; i < value.size(); i++) { - char c = value[i]; - if (c >= ' ' && c <= '~') { - str->push_back(c); - } else { - char buf[10]; - snprintf(buf, sizeof(buf), "\\x%02x", - static_cast<unsigned int>(c) & 0xff); - str->append(buf); - } - } -} - -std::string NumberToString(uint64_t num) { - std::string r; - AppendNumberTo(&r, num); - return r; -} - -std::string EscapeString(const Slice& value) { - std::string r; - AppendEscapedStringTo(&r, value); - return r; -} - -bool ConsumeDecimalNumber(Slice* in, uint64_t* val) { - // Constants that will be optimized away. - constexpr const uint64_t kMaxUint64 = std::numeric_limits<uint64_t>::max(); - constexpr const char kLastDigitOfMaxUint64 = - '0' + static_cast<char>(kMaxUint64 % 10); - - uint64_t value = 0; - - // reinterpret_cast-ing from char* to unsigned char* to avoid signedness. - const unsigned char* start = - reinterpret_cast<const unsigned char*>(in->data()); - - const unsigned char* end = start + in->size(); - const unsigned char* current = start; - for (; current != end; ++current) { - const unsigned char ch = *current; - if (ch < '0' || ch > '9') break; - - // Overflow check. - // kMaxUint64 / 10 is also constant and will be optimized away. - if (value > kMaxUint64 / 10 || - (value == kMaxUint64 / 10 && ch > kLastDigitOfMaxUint64)) { - return false; - } - - value = (value * 10) + (ch - '0'); - } - - *val = value; - const size_t digits_consumed = current - start; - in->remove_prefix(digits_consumed); - return digits_consumed != 0; -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/util/logging.h b/assign5/openTok/Pods/leveldb-library/util/logging.h deleted file mode 100644 index 8ff2da8..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/logging.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Must not be included from any .h files to avoid polluting the namespace -// with macros. - -#ifndef STORAGE_LEVELDB_UTIL_LOGGING_H_ -#define STORAGE_LEVELDB_UTIL_LOGGING_H_ - -#include <stdint.h> -#include <stdio.h> - -#include <string> - -#include "port/port.h" - -namespace leveldb { - -class Slice; -class WritableFile; - -// Append a human-readable printout of "num" to *str -void AppendNumberTo(std::string* str, uint64_t num); - -// Append a human-readable printout of "value" to *str. -// Escapes any non-printable characters found in "value". -void AppendEscapedStringTo(std::string* str, const Slice& value); - -// Return a human-readable printout of "num" -std::string NumberToString(uint64_t num); - -// Return a human-readable version of "value". -// Escapes any non-printable characters found in "value". -std::string EscapeString(const Slice& value); - -// Parse a human-readable number from "*in" into *value. On success, -// advances "*in" past the consumed number and sets "*val" to the -// numeric value. Otherwise, returns false and leaves *in in an -// unspecified state. -bool ConsumeDecimalNumber(Slice* in, uint64_t* val); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_LOGGING_H_ diff --git a/assign5/openTok/Pods/leveldb-library/util/mutexlock.h b/assign5/openTok/Pods/leveldb-library/util/mutexlock.h deleted file mode 100644 index 0cb2e25..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/mutexlock.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_ -#define STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_ - -#include "port/port.h" -#include "port/thread_annotations.h" - -namespace leveldb { - -// Helper class that locks a mutex on construction and unlocks the mutex when -// the destructor of the MutexLock object is invoked. -// -// Typical usage: -// -// void MyClass::MyMethod() { -// MutexLock l(&mu_); // mu_ is an instance variable -// ... some complex code, possibly with multiple return paths ... -// } - -class SCOPED_LOCKABLE MutexLock { - public: - explicit MutexLock(port::Mutex* mu) EXCLUSIVE_LOCK_FUNCTION(mu) : mu_(mu) { - this->mu_->Lock(); - } - ~MutexLock() UNLOCK_FUNCTION() { this->mu_->Unlock(); } - - MutexLock(const MutexLock&) = delete; - MutexLock& operator=(const MutexLock&) = delete; - - private: - port::Mutex* const mu_; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_ diff --git a/assign5/openTok/Pods/leveldb-library/util/no_destructor.h b/assign5/openTok/Pods/leveldb-library/util/no_destructor.h deleted file mode 100644 index a0d3b87..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/no_destructor.h +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) 2018 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_NO_DESTRUCTOR_H_ -#define STORAGE_LEVELDB_UTIL_NO_DESTRUCTOR_H_ - -#include <type_traits> -#include <utility> - -namespace leveldb { - -// Wraps an instance whose destructor is never called. -// -// This is intended for use with function-level static variables. -template <typename InstanceType> -class NoDestructor { - public: - template <typename... ConstructorArgTypes> - explicit NoDestructor(ConstructorArgTypes&&... constructor_args) { - static_assert(sizeof(instance_storage_) >= sizeof(InstanceType), - "instance_storage_ is not large enough to hold the instance"); - static_assert( - alignof(decltype(instance_storage_)) >= alignof(InstanceType), - "instance_storage_ does not meet the instance's alignment requirement"); - new (&instance_storage_) - InstanceType(std::forward<ConstructorArgTypes>(constructor_args)...); - } - - ~NoDestructor() = default; - - NoDestructor(const NoDestructor&) = delete; - NoDestructor& operator=(const NoDestructor&) = delete; - - InstanceType* get() { - return reinterpret_cast<InstanceType*>(&instance_storage_); - } - - private: - typename std::aligned_storage<sizeof(InstanceType), - alignof(InstanceType)>::type instance_storage_; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_NO_DESTRUCTOR_H_ diff --git a/assign5/openTok/Pods/leveldb-library/util/options.cc b/assign5/openTok/Pods/leveldb-library/util/options.cc deleted file mode 100644 index 62de5bf..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/options.cc +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/options.h" - -#include "leveldb/comparator.h" -#include "leveldb/env.h" - -namespace leveldb { - -Options::Options() : comparator(BytewiseComparator()), env(Env::Default()) {} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/util/posix_logger.h b/assign5/openTok/Pods/leveldb-library/util/posix_logger.h deleted file mode 100644 index 28e15d1..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/posix_logger.h +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Logger implementation that can be shared by all environments -// where enough posix functionality is available. - -#ifndef STORAGE_LEVELDB_UTIL_POSIX_LOGGER_H_ -#define STORAGE_LEVELDB_UTIL_POSIX_LOGGER_H_ - -#include <sys/time.h> - -#include <cassert> -#include <cstdarg> -#include <cstdio> -#include <ctime> -#include <sstream> -#include <thread> - -#include "leveldb/env.h" - -namespace leveldb { - -class PosixLogger final : public Logger { - public: - // Creates a logger that writes to the given file. - // - // The PosixLogger instance takes ownership of the file handle. - explicit PosixLogger(std::FILE* fp) : fp_(fp) { assert(fp != nullptr); } - - ~PosixLogger() override { std::fclose(fp_); } - - void Logv(const char* format, va_list arguments) override { - // Record the time as close to the Logv() call as possible. - struct ::timeval now_timeval; - ::gettimeofday(&now_timeval, nullptr); - const std::time_t now_seconds = now_timeval.tv_sec; - struct std::tm now_components; - ::localtime_r(&now_seconds, &now_components); - - // Record the thread ID. - constexpr const int kMaxThreadIdSize = 32; - std::ostringstream thread_stream; - thread_stream << std::this_thread::get_id(); - std::string thread_id = thread_stream.str(); - if (thread_id.size() > kMaxThreadIdSize) { - thread_id.resize(kMaxThreadIdSize); - } - - // We first attempt to print into a stack-allocated buffer. If this attempt - // fails, we make a second attempt with a dynamically allocated buffer. - constexpr const int kStackBufferSize = 512; - char stack_buffer[kStackBufferSize]; - static_assert(sizeof(stack_buffer) == static_cast<size_t>(kStackBufferSize), - "sizeof(char) is expected to be 1 in C++"); - - int dynamic_buffer_size = 0; // Computed in the first iteration. - for (int iteration = 0; iteration < 2; ++iteration) { - const int buffer_size = - (iteration == 0) ? kStackBufferSize : dynamic_buffer_size; - char* const buffer = - (iteration == 0) ? stack_buffer : new char[dynamic_buffer_size]; - - // Print the header into the buffer. - int buffer_offset = snprintf( - buffer, buffer_size, "%04d/%02d/%02d-%02d:%02d:%02d.%06d %s ", - now_components.tm_year + 1900, now_components.tm_mon + 1, - now_components.tm_mday, now_components.tm_hour, now_components.tm_min, - now_components.tm_sec, static_cast<int>(now_timeval.tv_usec), - thread_id.c_str()); - - // The header can be at most 28 characters (10 date + 15 time + - // 3 delimiters) plus the thread ID, which should fit comfortably into the - // static buffer. - assert(buffer_offset <= 28 + kMaxThreadIdSize); - static_assert(28 + kMaxThreadIdSize < kStackBufferSize, - "stack-allocated buffer may not fit the message header"); - assert(buffer_offset < buffer_size); - - // Print the message into the buffer. - std::va_list arguments_copy; - va_copy(arguments_copy, arguments); - buffer_offset += - std::vsnprintf(buffer + buffer_offset, buffer_size - buffer_offset, - format, arguments_copy); - va_end(arguments_copy); - - // The code below may append a newline at the end of the buffer, which - // requires an extra character. - if (buffer_offset >= buffer_size - 1) { - // The message did not fit into the buffer. - if (iteration == 0) { - // Re-run the loop and use a dynamically-allocated buffer. The buffer - // will be large enough for the log message, an extra newline and a - // null terminator. - dynamic_buffer_size = buffer_offset + 2; - continue; - } - - // The dynamically-allocated buffer was incorrectly sized. This should - // not happen, assuming a correct implementation of (v)snprintf. Fail - // in tests, recover by truncating the log message in production. - assert(false); - buffer_offset = buffer_size - 1; - } - - // Add a newline if necessary. - if (buffer[buffer_offset - 1] != '\n') { - buffer[buffer_offset] = '\n'; - ++buffer_offset; - } - - assert(buffer_offset <= buffer_size); - std::fwrite(buffer, 1, buffer_offset, fp_); - std::fflush(fp_); - - if (iteration != 0) { - delete[] buffer; - } - break; - } - } - - private: - std::FILE* const fp_; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_POSIX_LOGGER_H_ diff --git a/assign5/openTok/Pods/leveldb-library/util/random.h b/assign5/openTok/Pods/leveldb-library/util/random.h deleted file mode 100644 index 76f7daf..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/random.h +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_RANDOM_H_ -#define STORAGE_LEVELDB_UTIL_RANDOM_H_ - -#include <stdint.h> - -namespace leveldb { - -// A very simple random number generator. Not especially good at -// generating truly random bits, but good enough for our needs in this -// package. -class Random { - private: - uint32_t seed_; - - public: - explicit Random(uint32_t s) : seed_(s & 0x7fffffffu) { - // Avoid bad seeds. - if (seed_ == 0 || seed_ == 2147483647L) { - seed_ = 1; - } - } - uint32_t Next() { - static const uint32_t M = 2147483647L; // 2^31-1 - static const uint64_t A = 16807; // bits 14, 8, 7, 5, 2, 1, 0 - // We are computing - // seed_ = (seed_ * A) % M, where M = 2^31-1 - // - // seed_ must not be zero or M, or else all subsequent computed values - // will be zero or M respectively. For all other values, seed_ will end - // up cycling through every number in [1,M-1] - uint64_t product = seed_ * A; - - // Compute (product % M) using the fact that ((x << 31) % M) == x. - seed_ = static_cast<uint32_t>((product >> 31) + (product & M)); - // The first reduction may overflow by 1 bit, so we may need to - // repeat. mod == M is not possible; using > allows the faster - // sign-bit-based test. - if (seed_ > M) { - seed_ -= M; - } - return seed_; - } - // Returns a uniformly distributed value in the range [0..n-1] - // REQUIRES: n > 0 - uint32_t Uniform(int n) { return Next() % n; } - - // Randomly returns true ~"1/n" of the time, and false otherwise. - // REQUIRES: n > 0 - bool OneIn(int n) { return (Next() % n) == 0; } - - // Skewed: pick "base" uniformly from range [0,max_log] and then - // return "base" random bits. The effect is to pick a number in the - // range [0,2^max_log-1] with exponential bias towards smaller numbers. - uint32_t Skewed(int max_log) { return Uniform(1 << Uniform(max_log + 1)); } -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_RANDOM_H_ diff --git a/assign5/openTok/Pods/leveldb-library/util/status.cc b/assign5/openTok/Pods/leveldb-library/util/status.cc deleted file mode 100644 index 6ca8da6..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/status.cc +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "leveldb/status.h" - -#include <stdio.h> - -#include "port/port.h" - -namespace leveldb { - -const char* Status::CopyState(const char* state) { - uint32_t size; - memcpy(&size, state, sizeof(size)); - char* result = new char[size + 5]; - memcpy(result, state, size + 5); - return result; -} - -Status::Status(Code code, const Slice& msg, const Slice& msg2) { - assert(code != kOk); - const uint32_t len1 = msg.size(); - const uint32_t len2 = msg2.size(); - const uint32_t size = len1 + (len2 ? (2 + len2) : 0); - char* result = new char[size + 5]; - memcpy(result, &size, sizeof(size)); - result[4] = static_cast<char>(code); - memcpy(result + 5, msg.data(), len1); - if (len2) { - result[5 + len1] = ':'; - result[6 + len1] = ' '; - memcpy(result + 7 + len1, msg2.data(), len2); - } - state_ = result; -} - -std::string Status::ToString() const { - if (state_ == nullptr) { - return "OK"; - } else { - char tmp[30]; - const char* type; - switch (code()) { - case kOk: - type = "OK"; - break; - case kNotFound: - type = "NotFound: "; - break; - case kCorruption: - type = "Corruption: "; - break; - case kNotSupported: - type = "Not implemented: "; - break; - case kInvalidArgument: - type = "Invalid argument: "; - break; - case kIOError: - type = "IO error: "; - break; - default: - snprintf(tmp, sizeof(tmp), - "Unknown code(%d): ", static_cast<int>(code())); - type = tmp; - break; - } - std::string result(type); - uint32_t length; - memcpy(&length, state_, sizeof(length)); - result.append(state_ + 5, length); - return result; - } -} - -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/util/testharness.cc b/assign5/openTok/Pods/leveldb-library/util/testharness.cc deleted file mode 100644 index 318ecfa..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/testharness.cc +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/testharness.h" - -#include <stdlib.h> -#include <sys/stat.h> -#include <sys/types.h> - -#include <string> -#include <vector> - -#include "leveldb/env.h" - -namespace leveldb { -namespace test { - -namespace { -struct Test { - const char* base; - const char* name; - void (*func)(); -}; -std::vector<Test>* tests; -} // namespace - -bool RegisterTest(const char* base, const char* name, void (*func)()) { - if (tests == nullptr) { - tests = new std::vector<Test>; - } - Test t; - t.base = base; - t.name = name; - t.func = func; - tests->push_back(t); - return true; -} - -int RunAllTests() { - const char* matcher = getenv("LEVELDB_TESTS"); - - int num = 0; - if (tests != nullptr) { - for (size_t i = 0; i < tests->size(); i++) { - const Test& t = (*tests)[i]; - if (matcher != nullptr) { - std::string name = t.base; - name.push_back('.'); - name.append(t.name); - if (strstr(name.c_str(), matcher) == nullptr) { - continue; - } - } - fprintf(stderr, "==== Test %s.%s\n", t.base, t.name); - (*t.func)(); - ++num; - } - } - fprintf(stderr, "==== PASSED %d tests\n", num); - return 0; -} - -std::string TmpDir() { - std::string dir; - Status s = Env::Default()->GetTestDirectory(&dir); - ASSERT_TRUE(s.ok()) << s.ToString(); - return dir; -} - -int RandomSeed() { - const char* env = getenv("TEST_RANDOM_SEED"); - int result = (env != nullptr ? atoi(env) : 301); - if (result <= 0) { - result = 301; - } - return result; -} - -} // namespace test -} // namespace leveldb diff --git a/assign5/openTok/Pods/leveldb-library/util/testharness.h b/assign5/openTok/Pods/leveldb-library/util/testharness.h deleted file mode 100644 index 72cd162..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/testharness.h +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_TESTHARNESS_H_ -#define STORAGE_LEVELDB_UTIL_TESTHARNESS_H_ - -#include <stdio.h> -#include <stdlib.h> - -#include <sstream> - -#include "leveldb/status.h" - -namespace leveldb { -namespace test { - -// Run some of the tests registered by the TEST() macro. If the -// environment variable "LEVELDB_TESTS" is not set, runs all tests. -// Otherwise, runs only the tests whose name contains the value of -// "LEVELDB_TESTS" as a substring. E.g., suppose the tests are: -// TEST(Foo, Hello) { ... } -// TEST(Foo, World) { ... } -// LEVELDB_TESTS=Hello will run the first test -// LEVELDB_TESTS=o will run both tests -// LEVELDB_TESTS=Junk will run no tests -// -// Returns 0 if all tests pass. -// Dies or returns a non-zero value if some test fails. -int RunAllTests(); - -// Return the directory to use for temporary storage. -std::string TmpDir(); - -// Return a randomization seed for this run. Typically returns the -// same number on repeated invocations of this binary, but automated -// runs may be able to vary the seed. -int RandomSeed(); - -// An instance of Tester is allocated to hold temporary state during -// the execution of an assertion. -class Tester { - private: - bool ok_; - const char* fname_; - int line_; - std::stringstream ss_; - - public: - Tester(const char* f, int l) : ok_(true), fname_(f), line_(l) {} - - ~Tester() { - if (!ok_) { - fprintf(stderr, "%s:%d:%s\n", fname_, line_, ss_.str().c_str()); - exit(1); - } - } - - Tester& Is(bool b, const char* msg) { - if (!b) { - ss_ << " Assertion failure " << msg; - ok_ = false; - } - return *this; - } - - Tester& IsOk(const Status& s) { - if (!s.ok()) { - ss_ << " " << s.ToString(); - ok_ = false; - } - return *this; - } - -#define BINARY_OP(name, op) \ - template <class X, class Y> \ - Tester& name(const X& x, const Y& y) { \ - if (!(x op y)) { \ - ss_ << " failed: " << x << (" " #op " ") << y; \ - ok_ = false; \ - } \ - return *this; \ - } - - BINARY_OP(IsEq, ==) - BINARY_OP(IsNe, !=) - BINARY_OP(IsGe, >=) - BINARY_OP(IsGt, >) - BINARY_OP(IsLe, <=) - BINARY_OP(IsLt, <) -#undef BINARY_OP - - // Attach the specified value to the error message if an error has occurred - template <class V> - Tester& operator<<(const V& value) { - if (!ok_) { - ss_ << " " << value; - } - return *this; - } -}; - -#define ASSERT_TRUE(c) ::leveldb::test::Tester(__FILE__, __LINE__).Is((c), #c) -#define ASSERT_OK(s) ::leveldb::test::Tester(__FILE__, __LINE__).IsOk((s)) -#define ASSERT_EQ(a, b) \ - ::leveldb::test::Tester(__FILE__, __LINE__).IsEq((a), (b)) -#define ASSERT_NE(a, b) \ - ::leveldb::test::Tester(__FILE__, __LINE__).IsNe((a), (b)) -#define ASSERT_GE(a, b) \ - ::leveldb::test::Tester(__FILE__, __LINE__).IsGe((a), (b)) -#define ASSERT_GT(a, b) \ - ::leveldb::test::Tester(__FILE__, __LINE__).IsGt((a), (b)) -#define ASSERT_LE(a, b) \ - ::leveldb::test::Tester(__FILE__, __LINE__).IsLe((a), (b)) -#define ASSERT_LT(a, b) \ - ::leveldb::test::Tester(__FILE__, __LINE__).IsLt((a), (b)) - -#define TCONCAT(a, b) TCONCAT1(a, b) -#define TCONCAT1(a, b) a##b - -#define TEST(base, name) \ - class TCONCAT(_Test_, name) : public base { \ - public: \ - void _Run(); \ - static void _RunIt() { \ - TCONCAT(_Test_, name) t; \ - t._Run(); \ - } \ - }; \ - bool TCONCAT(_Test_ignored_, name) = ::leveldb::test::RegisterTest( \ - #base, #name, &TCONCAT(_Test_, name)::_RunIt); \ - void TCONCAT(_Test_, name)::_Run() - -// Register the specified test. Typically not used directly, but -// invoked via the macro expansion of TEST. -bool RegisterTest(const char* base, const char* name, void (*func)()); - -} // namespace test -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_TESTHARNESS_H_ diff --git a/assign5/openTok/Pods/leveldb-library/util/testutil.h b/assign5/openTok/Pods/leveldb-library/util/testutil.h deleted file mode 100644 index bb4051b..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/testutil.h +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_TESTUTIL_H_ -#define STORAGE_LEVELDB_UTIL_TESTUTIL_H_ - -#include "helpers/memenv/memenv.h" -#include "leveldb/env.h" -#include "leveldb/slice.h" -#include "util/random.h" - -namespace leveldb { -namespace test { - -// Store in *dst a random string of length "len" and return a Slice that -// references the generated data. -Slice RandomString(Random* rnd, int len, std::string* dst); - -// Return a random key with the specified length that may contain interesting -// characters (e.g. \x00, \xff, etc.). -std::string RandomKey(Random* rnd, int len); - -// Store in *dst a string of length "len" that will compress to -// "N*compressed_fraction" bytes and return a Slice that references -// the generated data. -Slice CompressibleString(Random* rnd, double compressed_fraction, size_t len, - std::string* dst); - -// A wrapper that allows injection of errors. -class ErrorEnv : public EnvWrapper { - public: - bool writable_file_error_; - int num_writable_file_errors_; - - ErrorEnv() - : EnvWrapper(NewMemEnv(Env::Default())), - writable_file_error_(false), - num_writable_file_errors_(0) {} - ~ErrorEnv() override { delete target(); } - - Status NewWritableFile(const std::string& fname, - WritableFile** result) override { - if (writable_file_error_) { - ++num_writable_file_errors_; - *result = nullptr; - return Status::IOError(fname, "fake error"); - } - return target()->NewWritableFile(fname, result); - } - - Status NewAppendableFile(const std::string& fname, - WritableFile** result) override { - if (writable_file_error_) { - ++num_writable_file_errors_; - *result = nullptr; - return Status::IOError(fname, "fake error"); - } - return target()->NewAppendableFile(fname, result); - } -}; - -} // namespace test -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_TESTUTIL_H_ diff --git a/assign5/openTok/Pods/leveldb-library/util/windows_logger.h b/assign5/openTok/Pods/leveldb-library/util/windows_logger.h deleted file mode 100644 index 9296063..0000000 --- a/assign5/openTok/Pods/leveldb-library/util/windows_logger.h +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright (c) 2018 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Logger implementation for the Windows platform. - -#ifndef STORAGE_LEVELDB_UTIL_WINDOWS_LOGGER_H_ -#define STORAGE_LEVELDB_UTIL_WINDOWS_LOGGER_H_ - -#include <cassert> -#include <cstdarg> -#include <cstdio> -#include <ctime> -#include <sstream> -#include <thread> - -#include "leveldb/env.h" - -namespace leveldb { - -class WindowsLogger final : public Logger { - public: - // Creates a logger that writes to the given file. - // - // The PosixLogger instance takes ownership of the file handle. - explicit WindowsLogger(std::FILE* fp) : fp_(fp) { assert(fp != nullptr); } - - ~WindowsLogger() override { std::fclose(fp_); } - - void Logv(const char* format, va_list arguments) override { - // Record the time as close to the Logv() call as possible. - SYSTEMTIME now_components; - ::GetLocalTime(&now_components); - - // Record the thread ID. - constexpr const int kMaxThreadIdSize = 32; - std::ostringstream thread_stream; - thread_stream << std::this_thread::get_id(); - std::string thread_id = thread_stream.str(); - if (thread_id.size() > kMaxThreadIdSize) { - thread_id.resize(kMaxThreadIdSize); - } - - // We first attempt to print into a stack-allocated buffer. If this attempt - // fails, we make a second attempt with a dynamically allocated buffer. - constexpr const int kStackBufferSize = 512; - char stack_buffer[kStackBufferSize]; - static_assert(sizeof(stack_buffer) == static_cast<size_t>(kStackBufferSize), - "sizeof(char) is expected to be 1 in C++"); - - int dynamic_buffer_size = 0; // Computed in the first iteration. - for (int iteration = 0; iteration < 2; ++iteration) { - const int buffer_size = - (iteration == 0) ? kStackBufferSize : dynamic_buffer_size; - char* const buffer = - (iteration == 0) ? stack_buffer : new char[dynamic_buffer_size]; - - // Print the header into the buffer. - int buffer_offset = snprintf( - buffer, buffer_size, "%04d/%02d/%02d-%02d:%02d:%02d.%06d %s ", - now_components.wYear, now_components.wMonth, now_components.wDay, - now_components.wHour, now_components.wMinute, now_components.wSecond, - static_cast<int>(now_components.wMilliseconds * 1000), - thread_id.c_str()); - - // The header can be at most 28 characters (10 date + 15 time + - // 3 delimiters) plus the thread ID, which should fit comfortably into the - // static buffer. - assert(buffer_offset <= 28 + kMaxThreadIdSize); - static_assert(28 + kMaxThreadIdSize < kStackBufferSize, - "stack-allocated buffer may not fit the message header"); - assert(buffer_offset < buffer_size); - - // Print the message into the buffer. - std::va_list arguments_copy; - va_copy(arguments_copy, arguments); - buffer_offset += - std::vsnprintf(buffer + buffer_offset, buffer_size - buffer_offset, - format, arguments_copy); - va_end(arguments_copy); - - // The code below may append a newline at the end of the buffer, which - // requires an extra character. - if (buffer_offset >= buffer_size - 1) { - // The message did not fit into the buffer. - if (iteration == 0) { - // Re-run the loop and use a dynamically-allocated buffer. The buffer - // will be large enough for the log message, an extra newline and a - // null terminator. - dynamic_buffer_size = buffer_offset + 2; - continue; - } - - // The dynamically-allocated buffer was incorrectly sized. This should - // not happen, assuming a correct implementation of (v)snprintf. Fail - // in tests, recover by truncating the log message in production. - assert(false); - buffer_offset = buffer_size - 1; - } - - // Add a newline if necessary. - if (buffer[buffer_offset - 1] != '\n') { - buffer[buffer_offset] = '\n'; - ++buffer_offset; - } - - assert(buffer_offset <= buffer_size); - std::fwrite(buffer, 1, buffer_offset, fp_); - std::fflush(fp_); - - if (iteration != 0) { - delete[] buffer; - } - break; - } - } - - private: - std::FILE* const fp_; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_WINDOWS_LOGGER_H_ diff --git a/assign5/openTok/Pods/nanopb/LICENSE.txt b/assign5/openTok/Pods/nanopb/LICENSE.txt deleted file mode 100644 index d11c9af..0000000 --- a/assign5/openTok/Pods/nanopb/LICENSE.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2011 Petteri Aimonen <jpa at nanopb.mail.kapsi.fi> - -This software is provided 'as-is', without any express or -implied warranty. In no event will the authors be held liable -for any damages arising from the use of this software. - -Permission is granted to anyone to use this software for any -purpose, including commercial applications, and to alter it and -redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you - must not claim that you wrote the original software. If you use - this software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and - must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. diff --git a/assign5/openTok/Pods/nanopb/README.md b/assign5/openTok/Pods/nanopb/README.md deleted file mode 100644 index 07860f0..0000000 --- a/assign5/openTok/Pods/nanopb/README.md +++ /dev/null @@ -1,71 +0,0 @@ -Nanopb - Protocol Buffers for Embedded Systems -============================================== - -[](https://travis-ci.org/nanopb/nanopb) - -Nanopb is a small code-size Protocol Buffers implementation in ansi C. It is -especially suitable for use in microcontrollers, but fits any memory -restricted system. - -* **Homepage:** https://jpa.kapsi.fi/nanopb/ -* **Documentation:** https://jpa.kapsi.fi/nanopb/docs/ -* **Downloads:** https://jpa.kapsi.fi/nanopb/download/ -* **Forum:** https://groups.google.com/forum/#!forum/nanopb - - - -Using the nanopb library ------------------------- -To use the nanopb library, you need to do two things: - -1. Compile your .proto files for nanopb, using protoc. -2. Include pb_encode.c, pb_decode.c and pb_common.c in your project. - -The easiest way to get started is to study the project in "examples/simple". -It contains a Makefile, which should work directly under most Linux systems. -However, for any other kind of build system, see the manual steps in -README.txt in that folder. - - - -Using the Protocol Buffers compiler (protoc) --------------------------------------------- -The nanopb generator is implemented as a plugin for the Google's own protoc -compiler. This has the advantage that there is no need to reimplement the -basic parsing of .proto files. However, it does mean that you need the -Google's protobuf library in order to run the generator. - -If you have downloaded a binary package for nanopb (either Windows, Linux or -Mac OS X version), the 'protoc' binary is included in the 'generator-bin' -folder. In this case, you are ready to go. Simply run this command: - - generator-bin/protoc --nanopb_out=. myprotocol.proto - -However, if you are using a git checkout or a plain source distribution, you -need to provide your own version of protoc and the Google's protobuf library. -On Linux, the necessary packages are protobuf-compiler and python-protobuf. -On Windows, you can either build Google's protobuf library from source or use -one of the binary distributions of it. In either case, if you use a separate -protoc, you need to manually give the path to nanopb generator: - - protoc --plugin=protoc-gen-nanopb=nanopb/generator/protoc-gen-nanopb ... - - - -Running the tests ------------------ -If you want to perform further development of the nanopb core, or to verify -its functionality using your compiler and platform, you'll want to run the -test suite. The build rules for the test suite are implemented using Scons, -so you need to have that installed. To run the tests: - - cd tests - scons - -This will show the progress of various test cases. If the output does not -end in an error, the test cases were successful. - -Note: Mac OS X by default aliases 'clang' as 'gcc', while not actually -supporting the same command line options as gcc does. To run tests on -Mac OS X, use: "scons CC=clang CXX=clang". Same way can be used to run -tests with different compilers on any platform. diff --git a/assign5/openTok/Pods/nanopb/pb.h b/assign5/openTok/Pods/nanopb/pb.h deleted file mode 100644 index 174a84b..0000000 --- a/assign5/openTok/Pods/nanopb/pb.h +++ /dev/null @@ -1,593 +0,0 @@ -/* Common parts of the nanopb library. Most of these are quite low-level - * stuff. For the high-level interface, see pb_encode.h and pb_decode.h. - */ - -#ifndef PB_H_INCLUDED -#define PB_H_INCLUDED - -/***************************************************************** - * Nanopb compilation time options. You can change these here by * - * uncommenting the lines, or on the compiler command line. * - *****************************************************************/ - -/* Enable support for dynamically allocated fields */ -/* #define PB_ENABLE_MALLOC 1 */ - -/* Define this if your CPU / compiler combination does not support - * unaligned memory access to packed structures. */ -/* #define PB_NO_PACKED_STRUCTS 1 */ - -/* Increase the number of required fields that are tracked. - * A compiler warning will tell if you need this. */ -/* #define PB_MAX_REQUIRED_FIELDS 256 */ - -/* Add support for tag numbers > 255 and fields larger than 255 bytes. */ -/* #define PB_FIELD_16BIT 1 */ - -/* Add support for tag numbers > 65536 and fields larger than 65536 bytes. */ -/* #define PB_FIELD_32BIT 1 */ - -/* Disable support for error messages in order to save some code space. */ -/* #define PB_NO_ERRMSG 1 */ - -/* Disable support for custom streams (support only memory buffers). */ -/* #define PB_BUFFER_ONLY 1 */ - -/* Switch back to the old-style callback function signature. - * This was the default until nanopb-0.2.1. */ -/* #define PB_OLD_CALLBACK_STYLE */ - - -/****************************************************************** - * You usually don't need to change anything below this line. * - * Feel free to look around and use the defined macros, though. * - ******************************************************************/ - - -/* Version of the nanopb library. Just in case you want to check it in - * your own program. */ -#define NANOPB_VERSION nanopb-0.3.9.1 - -/* Include all the system headers needed by nanopb. You will need the - * definitions of the following: - * - strlen, memcpy, memset functions - * - [u]int_least8_t, uint_fast8_t, [u]int_least16_t, [u]int32_t, [u]int64_t - * - size_t - * - bool - * - * If you don't have the standard header files, you can instead provide - * a custom header that defines or includes all this. In that case, - * define PB_SYSTEM_HEADER to the path of this file. - */ -#ifdef PB_SYSTEM_HEADER -#include PB_SYSTEM_HEADER -#else -#include <stdint.h> -#include <stddef.h> -#include <stdbool.h> -#include <string.h> - -#ifdef PB_ENABLE_MALLOC -#include <stdlib.h> -#endif -#endif - -/* Macro for defining packed structures (compiler dependent). - * This just reduces memory requirements, but is not required. - */ -#if defined(PB_NO_PACKED_STRUCTS) - /* Disable struct packing */ -# define PB_PACKED_STRUCT_START -# define PB_PACKED_STRUCT_END -# define pb_packed -#elif defined(__GNUC__) || defined(__clang__) - /* For GCC and clang */ -# define PB_PACKED_STRUCT_START -# define PB_PACKED_STRUCT_END -# define pb_packed __attribute__((packed)) -#elif defined(__ICCARM__) || defined(__CC_ARM) - /* For IAR ARM and Keil MDK-ARM compilers */ -# define PB_PACKED_STRUCT_START _Pragma("pack(push, 1)") -# define PB_PACKED_STRUCT_END _Pragma("pack(pop)") -# define pb_packed -#elif defined(_MSC_VER) && (_MSC_VER >= 1500) - /* For Microsoft Visual C++ */ -# define PB_PACKED_STRUCT_START __pragma(pack(push, 1)) -# define PB_PACKED_STRUCT_END __pragma(pack(pop)) -# define pb_packed -#else - /* Unknown compiler */ -# define PB_PACKED_STRUCT_START -# define PB_PACKED_STRUCT_END -# define pb_packed -#endif - -/* Handly macro for suppressing unreferenced-parameter compiler warnings. */ -#ifndef PB_UNUSED -#define PB_UNUSED(x) (void)(x) -#endif - -/* Compile-time assertion, used for checking compatible compilation options. - * If this does not work properly on your compiler, use - * #define PB_NO_STATIC_ASSERT to disable it. - * - * But before doing that, check carefully the error message / place where it - * comes from to see if the error has a real cause. Unfortunately the error - * message is not always very clear to read, but you can see the reason better - * in the place where the PB_STATIC_ASSERT macro was called. - */ -#ifndef PB_NO_STATIC_ASSERT -#ifndef PB_STATIC_ASSERT -#define PB_STATIC_ASSERT(COND,MSG) typedef char PB_STATIC_ASSERT_MSG(MSG, __LINE__, __COUNTER__)[(COND)?1:-1]; -#define PB_STATIC_ASSERT_MSG(MSG, LINE, COUNTER) PB_STATIC_ASSERT_MSG_(MSG, LINE, COUNTER) -#define PB_STATIC_ASSERT_MSG_(MSG, LINE, COUNTER) pb_static_assertion_##MSG##LINE##COUNTER -#endif -#else -#define PB_STATIC_ASSERT(COND,MSG) -#endif - -/* Number of required fields to keep track of. */ -#ifndef PB_MAX_REQUIRED_FIELDS -#define PB_MAX_REQUIRED_FIELDS 64 -#endif - -#if PB_MAX_REQUIRED_FIELDS < 64 -#error You should not lower PB_MAX_REQUIRED_FIELDS from the default value (64). -#endif - -/* List of possible field types. These are used in the autogenerated code. - * Least-significant 4 bits tell the scalar type - * Most-significant 4 bits specify repeated/required/packed etc. - */ - -typedef uint_least8_t pb_type_t; - -/**** Field data types ****/ - -/* Numeric types */ -#define PB_LTYPE_VARINT 0x00 /* int32, int64, enum, bool */ -#define PB_LTYPE_UVARINT 0x01 /* uint32, uint64 */ -#define PB_LTYPE_SVARINT 0x02 /* sint32, sint64 */ -#define PB_LTYPE_FIXED32 0x03 /* fixed32, sfixed32, float */ -#define PB_LTYPE_FIXED64 0x04 /* fixed64, sfixed64, double */ - -/* Marker for last packable field type. */ -#define PB_LTYPE_LAST_PACKABLE 0x04 - -/* Byte array with pre-allocated buffer. - * data_size is the length of the allocated PB_BYTES_ARRAY structure. */ -#define PB_LTYPE_BYTES 0x05 - -/* String with pre-allocated buffer. - * data_size is the maximum length. */ -#define PB_LTYPE_STRING 0x06 - -/* Submessage - * submsg_fields is pointer to field descriptions */ -#define PB_LTYPE_SUBMESSAGE 0x07 - -/* Extension pseudo-field - * The field contains a pointer to pb_extension_t */ -#define PB_LTYPE_EXTENSION 0x08 - -/* Byte array with inline, pre-allocated byffer. - * data_size is the length of the inline, allocated buffer. - * This differs from PB_LTYPE_BYTES by defining the element as - * pb_byte_t[data_size] rather than pb_bytes_array_t. */ -#define PB_LTYPE_FIXED_LENGTH_BYTES 0x09 - -/* Number of declared LTYPES */ -#define PB_LTYPES_COUNT 0x0A -#define PB_LTYPE_MASK 0x0F - -/**** Field repetition rules ****/ - -#define PB_HTYPE_REQUIRED 0x00 -#define PB_HTYPE_OPTIONAL 0x10 -#define PB_HTYPE_REPEATED 0x20 -#define PB_HTYPE_ONEOF 0x30 -#define PB_HTYPE_MASK 0x30 - -/**** Field allocation types ****/ - -#define PB_ATYPE_STATIC 0x00 -#define PB_ATYPE_POINTER 0x80 -#define PB_ATYPE_CALLBACK 0x40 -#define PB_ATYPE_MASK 0xC0 - -#define PB_ATYPE(x) ((x) & PB_ATYPE_MASK) -#define PB_HTYPE(x) ((x) & PB_HTYPE_MASK) -#define PB_LTYPE(x) ((x) & PB_LTYPE_MASK) - -/* Data type used for storing sizes of struct fields - * and array counts. - */ -#if defined(PB_FIELD_32BIT) - typedef uint32_t pb_size_t; - typedef int32_t pb_ssize_t; -#elif defined(PB_FIELD_16BIT) - typedef uint_least16_t pb_size_t; - typedef int_least16_t pb_ssize_t; -#else - typedef uint_least8_t pb_size_t; - typedef int_least8_t pb_ssize_t; -#endif -#define PB_SIZE_MAX ((pb_size_t)-1) - -/* Data type for storing encoded data and other byte streams. - * This typedef exists to support platforms where uint8_t does not exist. - * You can regard it as equivalent on uint8_t on other platforms. - */ -typedef uint_least8_t pb_byte_t; - -/* This structure is used in auto-generated constants - * to specify struct fields. - * You can change field sizes if you need structures - * larger than 256 bytes or field tags larger than 256. - * The compiler should complain if your .proto has such - * structures. Fix that by defining PB_FIELD_16BIT or - * PB_FIELD_32BIT. - */ -PB_PACKED_STRUCT_START -typedef struct pb_field_s pb_field_t; -struct pb_field_s { - pb_size_t tag; - pb_type_t type; - pb_size_t data_offset; /* Offset of field data, relative to previous field. */ - pb_ssize_t size_offset; /* Offset of array size or has-boolean, relative to data */ - pb_size_t data_size; /* Data size in bytes for a single item */ - pb_size_t array_size; /* Maximum number of entries in array */ - - /* Field definitions for submessage - * OR default value for all other non-array, non-callback types - * If null, then field will zeroed. */ - const void *ptr; -} pb_packed; -PB_PACKED_STRUCT_END - -/* Make sure that the standard integer types are of the expected sizes. - * Otherwise fixed32/fixed64 fields can break. - * - * If you get errors here, it probably means that your stdint.h is not - * correct for your platform. - */ -#ifndef PB_WITHOUT_64BIT -PB_STATIC_ASSERT(sizeof(int64_t) == 2 * sizeof(int32_t), INT64_T_WRONG_SIZE) -PB_STATIC_ASSERT(sizeof(uint64_t) == 2 * sizeof(uint32_t), UINT64_T_WRONG_SIZE) -#endif - -/* This structure is used for 'bytes' arrays. - * It has the number of bytes in the beginning, and after that an array. - * Note that actual structs used will have a different length of bytes array. - */ -#define PB_BYTES_ARRAY_T(n) struct { pb_size_t size; pb_byte_t bytes[n]; } -#define PB_BYTES_ARRAY_T_ALLOCSIZE(n) ((size_t)n + offsetof(pb_bytes_array_t, bytes)) - -struct pb_bytes_array_s { - pb_size_t size; - pb_byte_t bytes[1]; -}; -typedef struct pb_bytes_array_s pb_bytes_array_t; - -/* This structure is used for giving the callback function. - * It is stored in the message structure and filled in by the method that - * calls pb_decode. - * - * The decoding callback will be given a limited-length stream - * If the wire type was string, the length is the length of the string. - * If the wire type was a varint/fixed32/fixed64, the length is the length - * of the actual value. - * The function may be called multiple times (especially for repeated types, - * but also otherwise if the message happens to contain the field multiple - * times.) - * - * The encoding callback will receive the actual output stream. - * It should write all the data in one call, including the field tag and - * wire type. It can write multiple fields. - * - * The callback can be null if you want to skip a field. - */ -typedef struct pb_istream_s pb_istream_t; -typedef struct pb_ostream_s pb_ostream_t; -typedef struct pb_callback_s pb_callback_t; -struct pb_callback_s { -#ifdef PB_OLD_CALLBACK_STYLE - /* Deprecated since nanopb-0.2.1 */ - union { - bool (*decode)(pb_istream_t *stream, const pb_field_t *field, void *arg); - bool (*encode)(pb_ostream_t *stream, const pb_field_t *field, const void *arg); - } funcs; -#else - /* New function signature, which allows modifying arg contents in callback. */ - union { - bool (*decode)(pb_istream_t *stream, const pb_field_t *field, void **arg); - bool (*encode)(pb_ostream_t *stream, const pb_field_t *field, void * const *arg); - } funcs; -#endif - - /* Free arg for use by callback */ - void *arg; -}; - -/* Wire types. Library user needs these only in encoder callbacks. */ -typedef enum { - PB_WT_VARINT = 0, - PB_WT_64BIT = 1, - PB_WT_STRING = 2, - PB_WT_32BIT = 5 -} pb_wire_type_t; - -/* Structure for defining the handling of unknown/extension fields. - * Usually the pb_extension_type_t structure is automatically generated, - * while the pb_extension_t structure is created by the user. However, - * if you want to catch all unknown fields, you can also create a custom - * pb_extension_type_t with your own callback. - */ -typedef struct pb_extension_type_s pb_extension_type_t; -typedef struct pb_extension_s pb_extension_t; -struct pb_extension_type_s { - /* Called for each unknown field in the message. - * If you handle the field, read off all of its data and return true. - * If you do not handle the field, do not read anything and return true. - * If you run into an error, return false. - * Set to NULL for default handler. - */ - bool (*decode)(pb_istream_t *stream, pb_extension_t *extension, - uint32_t tag, pb_wire_type_t wire_type); - - /* Called once after all regular fields have been encoded. - * If you have something to write, do so and return true. - * If you do not have anything to write, just return true. - * If you run into an error, return false. - * Set to NULL for default handler. - */ - bool (*encode)(pb_ostream_t *stream, const pb_extension_t *extension); - - /* Free field for use by the callback. */ - const void *arg; -}; - -struct pb_extension_s { - /* Type describing the extension field. Usually you'll initialize - * this to a pointer to the automatically generated structure. */ - const pb_extension_type_t *type; - - /* Destination for the decoded data. This must match the datatype - * of the extension field. */ - void *dest; - - /* Pointer to the next extension handler, or NULL. - * If this extension does not match a field, the next handler is - * automatically called. */ - pb_extension_t *next; - - /* The decoder sets this to true if the extension was found. - * Ignored for encoding. */ - bool found; -}; - -/* Memory allocation functions to use. You can define pb_realloc and - * pb_free to custom functions if you want. */ -#ifdef PB_ENABLE_MALLOC -# ifndef pb_realloc -# define pb_realloc(ptr, size) realloc(ptr, size) -# endif -# ifndef pb_free -# define pb_free(ptr) free(ptr) -# endif -#endif - -/* This is used to inform about need to regenerate .pb.h/.pb.c files. */ -#define PB_PROTO_HEADER_VERSION 30 - -/* These macros are used to declare pb_field_t's in the constant array. */ -/* Size of a structure member, in bytes. */ -#define pb_membersize(st, m) (sizeof ((st*)0)->m) -/* Number of entries in an array. */ -#define pb_arraysize(st, m) (pb_membersize(st, m) / pb_membersize(st, m[0])) -/* Delta from start of one member to the start of another member. */ -#define pb_delta(st, m1, m2) ((int)offsetof(st, m1) - (int)offsetof(st, m2)) -/* Marks the end of the field list */ -#define PB_LAST_FIELD {0,(pb_type_t) 0,0,0,0,0,0} - -/* Macros for filling in the data_offset field */ -/* data_offset for first field in a message */ -#define PB_DATAOFFSET_FIRST(st, m1, m2) (offsetof(st, m1)) -/* data_offset for subsequent fields */ -#define PB_DATAOFFSET_OTHER(st, m1, m2) (offsetof(st, m1) - offsetof(st, m2) - pb_membersize(st, m2)) -/* data offset for subsequent fields inside an union (oneof) */ -#define PB_DATAOFFSET_UNION(st, m1, m2) (PB_SIZE_MAX) -/* Choose first/other based on m1 == m2 (deprecated, remains for backwards compatibility) */ -#define PB_DATAOFFSET_CHOOSE(st, m1, m2) (int)(offsetof(st, m1) == offsetof(st, m2) \ - ? PB_DATAOFFSET_FIRST(st, m1, m2) \ - : PB_DATAOFFSET_OTHER(st, m1, m2)) - -/* Required fields are the simplest. They just have delta (padding) from - * previous field end, and the size of the field. Pointer is used for - * submessages and default values. - */ -#define PB_REQUIRED_STATIC(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_REQUIRED | ltype, \ - fd, 0, pb_membersize(st, m), 0, ptr} - -/* Optional fields add the delta to the has_ variable. */ -#define PB_OPTIONAL_STATIC(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_OPTIONAL | ltype, \ - fd, \ - pb_delta(st, has_ ## m, m), \ - pb_membersize(st, m), 0, ptr} - -#define PB_SINGULAR_STATIC(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_OPTIONAL | ltype, \ - fd, 0, pb_membersize(st, m), 0, ptr} - -/* Repeated fields have a _count field and also the maximum number of entries. */ -#define PB_REPEATED_STATIC(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_REPEATED | ltype, \ - fd, \ - pb_delta(st, m ## _count, m), \ - pb_membersize(st, m[0]), \ - pb_arraysize(st, m), ptr} - -/* Allocated fields carry the size of the actual data, not the pointer */ -#define PB_REQUIRED_POINTER(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_POINTER | PB_HTYPE_REQUIRED | ltype, \ - fd, 0, pb_membersize(st, m[0]), 0, ptr} - -/* Optional fields don't need a has_ variable, as information would be redundant */ -#define PB_OPTIONAL_POINTER(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_POINTER | PB_HTYPE_OPTIONAL | ltype, \ - fd, 0, pb_membersize(st, m[0]), 0, ptr} - -/* Same as optional fields*/ -#define PB_SINGULAR_POINTER(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_POINTER | PB_HTYPE_OPTIONAL | ltype, \ - fd, 0, pb_membersize(st, m[0]), 0, ptr} - -/* Repeated fields have a _count field and a pointer to array of pointers */ -#define PB_REPEATED_POINTER(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_POINTER | PB_HTYPE_REPEATED | ltype, \ - fd, pb_delta(st, m ## _count, m), \ - pb_membersize(st, m[0]), 0, ptr} - -/* Callbacks are much like required fields except with special datatype. */ -#define PB_REQUIRED_CALLBACK(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_CALLBACK | PB_HTYPE_REQUIRED | ltype, \ - fd, 0, pb_membersize(st, m), 0, ptr} - -#define PB_OPTIONAL_CALLBACK(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_CALLBACK | PB_HTYPE_OPTIONAL | ltype, \ - fd, 0, pb_membersize(st, m), 0, ptr} - -#define PB_SINGULAR_CALLBACK(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_CALLBACK | PB_HTYPE_OPTIONAL | ltype, \ - fd, 0, pb_membersize(st, m), 0, ptr} - -#define PB_REPEATED_CALLBACK(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_CALLBACK | PB_HTYPE_REPEATED | ltype, \ - fd, 0, pb_membersize(st, m), 0, ptr} - -/* Optional extensions don't have the has_ field, as that would be redundant. - * Furthermore, the combination of OPTIONAL without has_ field is used - * for indicating proto3 style fields. Extensions exist in proto2 mode only, - * so they should be encoded according to proto2 rules. To avoid the conflict, - * extensions are marked as REQUIRED instead. - */ -#define PB_OPTEXT_STATIC(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_REQUIRED | ltype, \ - 0, \ - 0, \ - pb_membersize(st, m), 0, ptr} - -#define PB_OPTEXT_POINTER(tag, st, m, fd, ltype, ptr) \ - PB_OPTIONAL_POINTER(tag, st, m, fd, ltype, ptr) - -#define PB_OPTEXT_CALLBACK(tag, st, m, fd, ltype, ptr) \ - PB_OPTIONAL_CALLBACK(tag, st, m, fd, ltype, ptr) - -/* The mapping from protobuf types to LTYPEs is done using these macros. */ -#define PB_LTYPE_MAP_BOOL PB_LTYPE_VARINT -#define PB_LTYPE_MAP_BYTES PB_LTYPE_BYTES -#define PB_LTYPE_MAP_DOUBLE PB_LTYPE_FIXED64 -#define PB_LTYPE_MAP_ENUM PB_LTYPE_VARINT -#define PB_LTYPE_MAP_UENUM PB_LTYPE_UVARINT -#define PB_LTYPE_MAP_FIXED32 PB_LTYPE_FIXED32 -#define PB_LTYPE_MAP_FIXED64 PB_LTYPE_FIXED64 -#define PB_LTYPE_MAP_FLOAT PB_LTYPE_FIXED32 -#define PB_LTYPE_MAP_INT32 PB_LTYPE_VARINT -#define PB_LTYPE_MAP_INT64 PB_LTYPE_VARINT -#define PB_LTYPE_MAP_MESSAGE PB_LTYPE_SUBMESSAGE -#define PB_LTYPE_MAP_SFIXED32 PB_LTYPE_FIXED32 -#define PB_LTYPE_MAP_SFIXED64 PB_LTYPE_FIXED64 -#define PB_LTYPE_MAP_SINT32 PB_LTYPE_SVARINT -#define PB_LTYPE_MAP_SINT64 PB_LTYPE_SVARINT -#define PB_LTYPE_MAP_STRING PB_LTYPE_STRING -#define PB_LTYPE_MAP_UINT32 PB_LTYPE_UVARINT -#define PB_LTYPE_MAP_UINT64 PB_LTYPE_UVARINT -#define PB_LTYPE_MAP_EXTENSION PB_LTYPE_EXTENSION -#define PB_LTYPE_MAP_FIXED_LENGTH_BYTES PB_LTYPE_FIXED_LENGTH_BYTES - -/* This is the actual macro used in field descriptions. - * It takes these arguments: - * - Field tag number - * - Field type: BOOL, BYTES, DOUBLE, ENUM, UENUM, FIXED32, FIXED64, - * FLOAT, INT32, INT64, MESSAGE, SFIXED32, SFIXED64 - * SINT32, SINT64, STRING, UINT32, UINT64 or EXTENSION - * - Field rules: REQUIRED, OPTIONAL or REPEATED - * - Allocation: STATIC, CALLBACK or POINTER - * - Placement: FIRST or OTHER, depending on if this is the first field in structure. - * - Message name - * - Field name - * - Previous field name (or field name again for first field) - * - Pointer to default value or submsg fields. - */ - -#define PB_FIELD(tag, type, rules, allocation, placement, message, field, prevfield, ptr) \ - PB_ ## rules ## _ ## allocation(tag, message, field, \ - PB_DATAOFFSET_ ## placement(message, field, prevfield), \ - PB_LTYPE_MAP_ ## type, ptr) - -/* Field description for repeated static fixed count fields.*/ -#define PB_REPEATED_FIXED_COUNT(tag, type, placement, message, field, prevfield, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_REPEATED | PB_LTYPE_MAP_ ## type, \ - PB_DATAOFFSET_ ## placement(message, field, prevfield), \ - 0, \ - pb_membersize(message, field[0]), \ - pb_arraysize(message, field), ptr} - -/* Field description for oneof fields. This requires taking into account the - * union name also, that's why a separate set of macros is needed. - */ -#define PB_ONEOF_STATIC(u, tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_ONEOF | ltype, \ - fd, pb_delta(st, which_ ## u, u.m), \ - pb_membersize(st, u.m), 0, ptr} - -#define PB_ONEOF_POINTER(u, tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_POINTER | PB_HTYPE_ONEOF | ltype, \ - fd, pb_delta(st, which_ ## u, u.m), \ - pb_membersize(st, u.m[0]), 0, ptr} - -#define PB_ONEOF_FIELD(union_name, tag, type, rules, allocation, placement, message, field, prevfield, ptr) \ - PB_ONEOF_ ## allocation(union_name, tag, message, field, \ - PB_DATAOFFSET_ ## placement(message, union_name.field, prevfield), \ - PB_LTYPE_MAP_ ## type, ptr) - -#define PB_ANONYMOUS_ONEOF_STATIC(u, tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_ONEOF | ltype, \ - fd, pb_delta(st, which_ ## u, m), \ - pb_membersize(st, m), 0, ptr} - -#define PB_ANONYMOUS_ONEOF_POINTER(u, tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_POINTER | PB_HTYPE_ONEOF | ltype, \ - fd, pb_delta(st, which_ ## u, m), \ - pb_membersize(st, m[0]), 0, ptr} - -#define PB_ANONYMOUS_ONEOF_FIELD(union_name, tag, type, rules, allocation, placement, message, field, prevfield, ptr) \ - PB_ANONYMOUS_ONEOF_ ## allocation(union_name, tag, message, field, \ - PB_DATAOFFSET_ ## placement(message, field, prevfield), \ - PB_LTYPE_MAP_ ## type, ptr) - -/* These macros are used for giving out error messages. - * They are mostly a debugging aid; the main error information - * is the true/false return value from functions. - * Some code space can be saved by disabling the error - * messages if not used. - * - * PB_SET_ERROR() sets the error message if none has been set yet. - * msg must be a constant string literal. - * PB_GET_ERROR() always returns a pointer to a string. - * PB_RETURN_ERROR() sets the error and returns false from current - * function. - */ -#ifdef PB_NO_ERRMSG -#define PB_SET_ERROR(stream, msg) PB_UNUSED(stream) -#define PB_GET_ERROR(stream) "(errmsg disabled)" -#else -#define PB_SET_ERROR(stream, msg) (stream->errmsg = (stream)->errmsg ? (stream)->errmsg : (msg)) -#define PB_GET_ERROR(stream) ((stream)->errmsg ? (stream)->errmsg : "(none)") -#endif - -#define PB_RETURN_ERROR(stream, msg) return PB_SET_ERROR(stream, msg), false - -#endif diff --git a/assign5/openTok/Pods/nanopb/pb_common.c b/assign5/openTok/Pods/nanopb/pb_common.c deleted file mode 100644 index 4fb7186..0000000 --- a/assign5/openTok/Pods/nanopb/pb_common.c +++ /dev/null @@ -1,97 +0,0 @@ -/* pb_common.c: Common support functions for pb_encode.c and pb_decode.c. - * - * 2014 Petteri Aimonen <jpa@kapsi.fi> - */ - -#include "pb_common.h" - -bool pb_field_iter_begin(pb_field_iter_t *iter, const pb_field_t *fields, void *dest_struct) -{ - iter->start = fields; - iter->pos = fields; - iter->required_field_index = 0; - iter->dest_struct = dest_struct; - iter->pData = (char*)dest_struct + iter->pos->data_offset; - iter->pSize = (char*)iter->pData + iter->pos->size_offset; - - return (iter->pos->tag != 0); -} - -bool pb_field_iter_next(pb_field_iter_t *iter) -{ - const pb_field_t *prev_field = iter->pos; - - if (prev_field->tag == 0) - { - /* Handle empty message types, where the first field is already the terminator. - * In other cases, the iter->pos never points to the terminator. */ - return false; - } - - iter->pos++; - - if (iter->pos->tag == 0) - { - /* Wrapped back to beginning, reinitialize */ - (void)pb_field_iter_begin(iter, iter->start, iter->dest_struct); - return false; - } - else - { - /* Increment the pointers based on previous field size */ - size_t prev_size = prev_field->data_size; - - if (PB_HTYPE(prev_field->type) == PB_HTYPE_ONEOF && - PB_HTYPE(iter->pos->type) == PB_HTYPE_ONEOF && - iter->pos->data_offset == PB_SIZE_MAX) - { - /* Don't advance pointers inside unions */ - return true; - } - else if (PB_ATYPE(prev_field->type) == PB_ATYPE_STATIC && - PB_HTYPE(prev_field->type) == PB_HTYPE_REPEATED) - { - /* In static arrays, the data_size tells the size of a single entry and - * array_size is the number of entries */ - prev_size *= prev_field->array_size; - } - else if (PB_ATYPE(prev_field->type) == PB_ATYPE_POINTER) - { - /* Pointer fields always have a constant size in the main structure. - * The data_size only applies to the dynamically allocated area. */ - prev_size = sizeof(void*); - } - - if (PB_HTYPE(prev_field->type) == PB_HTYPE_REQUIRED) - { - /* Count the required fields, in order to check their presence in the - * decoder. */ - iter->required_field_index++; - } - - iter->pData = (char*)iter->pData + prev_size + iter->pos->data_offset; - iter->pSize = (char*)iter->pData + iter->pos->size_offset; - return true; - } -} - -bool pb_field_iter_find(pb_field_iter_t *iter, uint32_t tag) -{ - const pb_field_t *start = iter->pos; - - do { - if (iter->pos->tag == tag && - PB_LTYPE(iter->pos->type) != PB_LTYPE_EXTENSION) - { - /* Found the wanted field */ - return true; - } - - (void)pb_field_iter_next(iter); - } while (iter->pos != start); - - /* Searched all the way back to start, and found nothing. */ - return false; -} - - diff --git a/assign5/openTok/Pods/nanopb/pb_common.h b/assign5/openTok/Pods/nanopb/pb_common.h deleted file mode 100644 index 60b3d37..0000000 --- a/assign5/openTok/Pods/nanopb/pb_common.h +++ /dev/null @@ -1,42 +0,0 @@ -/* pb_common.h: Common support functions for pb_encode.c and pb_decode.c. - * These functions are rarely needed by applications directly. - */ - -#ifndef PB_COMMON_H_INCLUDED -#define PB_COMMON_H_INCLUDED - -#include "pb.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Iterator for pb_field_t list */ -struct pb_field_iter_s { - const pb_field_t *start; /* Start of the pb_field_t array */ - const pb_field_t *pos; /* Current position of the iterator */ - unsigned required_field_index; /* Zero-based index that counts only the required fields */ - void *dest_struct; /* Pointer to start of the structure */ - void *pData; /* Pointer to current field value */ - void *pSize; /* Pointer to count/has field */ -}; -typedef struct pb_field_iter_s pb_field_iter_t; - -/* Initialize the field iterator structure to beginning. - * Returns false if the message type is empty. */ -bool pb_field_iter_begin(pb_field_iter_t *iter, const pb_field_t *fields, void *dest_struct); - -/* Advance the iterator to the next field. - * Returns false when the iterator wraps back to the first field. */ -bool pb_field_iter_next(pb_field_iter_t *iter); - -/* Advance the iterator until it points at a field with the given tag. - * Returns false if no such field exists. */ -bool pb_field_iter_find(pb_field_iter_t *iter, uint32_t tag); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif - diff --git a/assign5/openTok/Pods/nanopb/pb_decode.c b/assign5/openTok/Pods/nanopb/pb_decode.c deleted file mode 100644 index 4b80e81..0000000 --- a/assign5/openTok/Pods/nanopb/pb_decode.c +++ /dev/null @@ -1,1508 +0,0 @@ -/* pb_decode.c -- decode a protobuf using minimal resources - * - * 2011 Petteri Aimonen <jpa@kapsi.fi> - */ - -/* Use the GCC warn_unused_result attribute to check that all return values - * are propagated correctly. On other compilers and gcc before 3.4.0 just - * ignore the annotation. - */ -#if !defined(__GNUC__) || ( __GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 4) - #define checkreturn -#else - #define checkreturn __attribute__((warn_unused_result)) -#endif - -#include "pb.h" -#include "pb_decode.h" -#include "pb_common.h" - -/************************************** - * Declarations internal to this file * - **************************************/ - -typedef bool (*pb_decoder_t)(pb_istream_t *stream, const pb_field_t *field, void *dest) checkreturn; - -static bool checkreturn buf_read(pb_istream_t *stream, pb_byte_t *buf, size_t count); -static bool checkreturn read_raw_value(pb_istream_t *stream, pb_wire_type_t wire_type, pb_byte_t *buf, size_t *size); -static bool checkreturn decode_static_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter); -static bool checkreturn decode_callback_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter); -static bool checkreturn decode_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter); -static void iter_from_extension(pb_field_iter_t *iter, pb_extension_t *extension); -static bool checkreturn default_extension_decoder(pb_istream_t *stream, pb_extension_t *extension, uint32_t tag, pb_wire_type_t wire_type); -static bool checkreturn decode_extension(pb_istream_t *stream, uint32_t tag, pb_wire_type_t wire_type, pb_field_iter_t *iter); -static bool checkreturn find_extension_field(pb_field_iter_t *iter); -static void pb_field_set_to_default(pb_field_iter_t *iter); -static void pb_message_set_to_defaults(const pb_field_t fields[], void *dest_struct); -static bool checkreturn pb_dec_varint(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_decode_varint32_eof(pb_istream_t *stream, uint32_t *dest, bool *eof); -static bool checkreturn pb_dec_uvarint(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_svarint(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_fixed32(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_fixed64(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_bytes(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_string(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_submessage(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_fixed_length_bytes(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_skip_varint(pb_istream_t *stream); -static bool checkreturn pb_skip_string(pb_istream_t *stream); - -#ifdef PB_ENABLE_MALLOC -static bool checkreturn allocate_field(pb_istream_t *stream, void *pData, size_t data_size, size_t array_size); -static bool checkreturn pb_release_union_field(pb_istream_t *stream, pb_field_iter_t *iter); -static void pb_release_single_field(const pb_field_iter_t *iter); -#endif - -#ifdef PB_WITHOUT_64BIT -#define pb_int64_t int32_t -#define pb_uint64_t uint32_t -#else -#define pb_int64_t int64_t -#define pb_uint64_t uint64_t -#endif - -/* --- Function pointers to field decoders --- - * Order in the array must match pb_action_t LTYPE numbering. - */ -static const pb_decoder_t PB_DECODERS[PB_LTYPES_COUNT] = { - &pb_dec_varint, - &pb_dec_uvarint, - &pb_dec_svarint, - &pb_dec_fixed32, - &pb_dec_fixed64, - - &pb_dec_bytes, - &pb_dec_string, - &pb_dec_submessage, - NULL, /* extensions */ - &pb_dec_fixed_length_bytes -}; - -/******************************* - * pb_istream_t implementation * - *******************************/ - -static bool checkreturn buf_read(pb_istream_t *stream, pb_byte_t *buf, size_t count) -{ - size_t i; - const pb_byte_t *source = (const pb_byte_t*)stream->state; - stream->state = (pb_byte_t*)stream->state + count; - - if (buf != NULL) - { - for (i = 0; i < count; i++) - buf[i] = source[i]; - } - - return true; -} - -bool checkreturn pb_read(pb_istream_t *stream, pb_byte_t *buf, size_t count) -{ -#ifndef PB_BUFFER_ONLY - if (buf == NULL && stream->callback != buf_read) - { - /* Skip input bytes */ - pb_byte_t tmp[16]; - while (count > 16) - { - if (!pb_read(stream, tmp, 16)) - return false; - - count -= 16; - } - - return pb_read(stream, tmp, count); - } -#endif - - if (stream->bytes_left < count) - PB_RETURN_ERROR(stream, "end-of-stream"); - -#ifndef PB_BUFFER_ONLY - if (!stream->callback(stream, buf, count)) - PB_RETURN_ERROR(stream, "io error"); -#else - if (!buf_read(stream, buf, count)) - return false; -#endif - - stream->bytes_left -= count; - return true; -} - -/* Read a single byte from input stream. buf may not be NULL. - * This is an optimization for the varint decoding. */ -static bool checkreturn pb_readbyte(pb_istream_t *stream, pb_byte_t *buf) -{ - if (stream->bytes_left == 0) - PB_RETURN_ERROR(stream, "end-of-stream"); - -#ifndef PB_BUFFER_ONLY - if (!stream->callback(stream, buf, 1)) - PB_RETURN_ERROR(stream, "io error"); -#else - *buf = *(const pb_byte_t*)stream->state; - stream->state = (pb_byte_t*)stream->state + 1; -#endif - - stream->bytes_left--; - - return true; -} - -pb_istream_t pb_istream_from_buffer(const pb_byte_t *buf, size_t bufsize) -{ - pb_istream_t stream; - /* Cast away the const from buf without a compiler error. We are - * careful to use it only in a const manner in the callbacks. - */ - union { - void *state; - const void *c_state; - } state; -#ifdef PB_BUFFER_ONLY - stream.callback = NULL; -#else - stream.callback = &buf_read; -#endif - state.c_state = buf; - stream.state = state.state; - stream.bytes_left = bufsize; -#ifndef PB_NO_ERRMSG - stream.errmsg = NULL; -#endif - return stream; -} - -/******************** - * Helper functions * - ********************/ - -static bool checkreturn pb_decode_varint32_eof(pb_istream_t *stream, uint32_t *dest, bool *eof) -{ - pb_byte_t byte; - uint32_t result; - - if (!pb_readbyte(stream, &byte)) - { - if (stream->bytes_left == 0) - { - if (eof) - { - *eof = true; - } - } - - return false; - } - - if ((byte & 0x80) == 0) - { - /* Quick case, 1 byte value */ - result = byte; - } - else - { - /* Multibyte case */ - uint_fast8_t bitpos = 7; - result = byte & 0x7F; - - do - { - if (!pb_readbyte(stream, &byte)) - return false; - - if (bitpos >= 32) - { - /* Note: The varint could have trailing 0x80 bytes, or 0xFF for negative. */ - uint8_t sign_extension = (bitpos < 63) ? 0xFF : 0x01; - - if ((byte & 0x7F) != 0x00 && ((result >> 31) == 0 || byte != sign_extension)) - { - PB_RETURN_ERROR(stream, "varint overflow"); - } - } - else - { - result |= (uint32_t)(byte & 0x7F) << bitpos; - } - bitpos = (uint_fast8_t)(bitpos + 7); - } while (byte & 0x80); - - if (bitpos == 35 && (byte & 0x70) != 0) - { - /* The last byte was at bitpos=28, so only bottom 4 bits fit. */ - PB_RETURN_ERROR(stream, "varint overflow"); - } - } - - *dest = result; - return true; -} - -bool checkreturn pb_decode_varint32(pb_istream_t *stream, uint32_t *dest) -{ - return pb_decode_varint32_eof(stream, dest, NULL); -} - -#ifndef PB_WITHOUT_64BIT -bool checkreturn pb_decode_varint(pb_istream_t *stream, uint64_t *dest) -{ - pb_byte_t byte; - uint_fast8_t bitpos = 0; - uint64_t result = 0; - - do - { - if (bitpos >= 64) - PB_RETURN_ERROR(stream, "varint overflow"); - - if (!pb_readbyte(stream, &byte)) - return false; - - result |= (uint64_t)(byte & 0x7F) << bitpos; - bitpos = (uint_fast8_t)(bitpos + 7); - } while (byte & 0x80); - - *dest = result; - return true; -} -#endif - -bool checkreturn pb_skip_varint(pb_istream_t *stream) -{ - pb_byte_t byte; - do - { - if (!pb_read(stream, &byte, 1)) - return false; - } while (byte & 0x80); - return true; -} - -bool checkreturn pb_skip_string(pb_istream_t *stream) -{ - uint32_t length; - if (!pb_decode_varint32(stream, &length)) - return false; - - return pb_read(stream, NULL, length); -} - -bool checkreturn pb_decode_tag(pb_istream_t *stream, pb_wire_type_t *wire_type, uint32_t *tag, bool *eof) -{ - uint32_t temp; - *eof = false; - *wire_type = (pb_wire_type_t) 0; - *tag = 0; - - if (!pb_decode_varint32_eof(stream, &temp, eof)) - { - return false; - } - - if (temp == 0) - { - *eof = true; /* Special feature: allow 0-terminated messages. */ - return false; - } - - *tag = temp >> 3; - *wire_type = (pb_wire_type_t)(temp & 7); - return true; -} - -bool checkreturn pb_skip_field(pb_istream_t *stream, pb_wire_type_t wire_type) -{ - switch (wire_type) - { - case PB_WT_VARINT: return pb_skip_varint(stream); - case PB_WT_64BIT: return pb_read(stream, NULL, 8); - case PB_WT_STRING: return pb_skip_string(stream); - case PB_WT_32BIT: return pb_read(stream, NULL, 4); - default: PB_RETURN_ERROR(stream, "invalid wire_type"); - } -} - -/* Read a raw value to buffer, for the purpose of passing it to callback as - * a substream. Size is maximum size on call, and actual size on return. - */ -static bool checkreturn read_raw_value(pb_istream_t *stream, pb_wire_type_t wire_type, pb_byte_t *buf, size_t *size) -{ - size_t max_size = *size; - switch (wire_type) - { - case PB_WT_VARINT: - *size = 0; - do - { - (*size)++; - if (*size > max_size) return false; - if (!pb_read(stream, buf, 1)) return false; - } while (*buf++ & 0x80); - return true; - - case PB_WT_64BIT: - *size = 8; - return pb_read(stream, buf, 8); - - case PB_WT_32BIT: - *size = 4; - return pb_read(stream, buf, 4); - - case PB_WT_STRING: - /* Calling read_raw_value with a PB_WT_STRING is an error. - * Explicitly handle this case and fallthrough to default to avoid - * compiler warnings. - */ - - default: PB_RETURN_ERROR(stream, "invalid wire_type"); - } -} - -/* Decode string length from stream and return a substream with limited length. - * Remember to close the substream using pb_close_string_substream(). - */ -bool checkreturn pb_make_string_substream(pb_istream_t *stream, pb_istream_t *substream) -{ - uint32_t size; - if (!pb_decode_varint32(stream, &size)) - return false; - - *substream = *stream; - if (substream->bytes_left < size) - PB_RETURN_ERROR(stream, "parent stream too short"); - - substream->bytes_left = size; - stream->bytes_left -= size; - return true; -} - -bool checkreturn pb_close_string_substream(pb_istream_t *stream, pb_istream_t *substream) -{ - if (substream->bytes_left) { - if (!pb_read(substream, NULL, substream->bytes_left)) - return false; - } - - stream->state = substream->state; - -#ifndef PB_NO_ERRMSG - stream->errmsg = substream->errmsg; -#endif - return true; -} - -/************************* - * Decode a single field * - *************************/ - -static bool checkreturn decode_static_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter) -{ - pb_type_t type; - pb_decoder_t func; - - type = iter->pos->type; - func = PB_DECODERS[PB_LTYPE(type)]; - - switch (PB_HTYPE(type)) - { - case PB_HTYPE_REQUIRED: - return func(stream, iter->pos, iter->pData); - - case PB_HTYPE_OPTIONAL: - if (iter->pSize != iter->pData) - *(bool*)iter->pSize = true; - return func(stream, iter->pos, iter->pData); - - case PB_HTYPE_REPEATED: - if (wire_type == PB_WT_STRING - && PB_LTYPE(type) <= PB_LTYPE_LAST_PACKABLE) - { - /* Packed array */ - bool status = true; - pb_size_t *size = (pb_size_t*)iter->pSize; - - pb_istream_t substream; - if (!pb_make_string_substream(stream, &substream)) - return false; - - while (substream.bytes_left > 0 && *size < iter->pos->array_size) - { - void *pItem = (char*)iter->pData + iter->pos->data_size * (*size); - if (!func(&substream, iter->pos, pItem)) - { - status = false; - break; - } - (*size)++; - } - - if (substream.bytes_left != 0) - PB_RETURN_ERROR(stream, "array overflow"); - if (!pb_close_string_substream(stream, &substream)) - return false; - - return status; - } - else - { - /* Repeated field */ - pb_size_t *size = (pb_size_t*)iter->pSize; - char *pItem = (char*)iter->pData + iter->pos->data_size * (*size); - - if ((*size)++ >= iter->pos->array_size) - PB_RETURN_ERROR(stream, "array overflow"); - - return func(stream, iter->pos, pItem); - } - - case PB_HTYPE_ONEOF: - *(pb_size_t*)iter->pSize = iter->pos->tag; - if (PB_LTYPE(type) == PB_LTYPE_SUBMESSAGE) - { - /* We memset to zero so that any callbacks are set to NULL. - * Then set any default values. */ - memset(iter->pData, 0, iter->pos->data_size); - pb_message_set_to_defaults((const pb_field_t*)iter->pos->ptr, iter->pData); - } - return func(stream, iter->pos, iter->pData); - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } -} - -#ifdef PB_ENABLE_MALLOC -/* Allocate storage for the field and store the pointer at iter->pData. - * array_size is the number of entries to reserve in an array. - * Zero size is not allowed, use pb_free() for releasing. - */ -static bool checkreturn allocate_field(pb_istream_t *stream, void *pData, size_t data_size, size_t array_size) -{ - void *ptr = *(void**)pData; - - if (data_size == 0 || array_size == 0) - PB_RETURN_ERROR(stream, "invalid size"); - - /* Check for multiplication overflows. - * This code avoids the costly division if the sizes are small enough. - * Multiplication is safe as long as only half of bits are set - * in either multiplicand. - */ - { - const size_t check_limit = (size_t)1 << (sizeof(size_t) * 4); - if (data_size >= check_limit || array_size >= check_limit) - { - const size_t size_max = (size_t)-1; - if (size_max / array_size < data_size) - { - PB_RETURN_ERROR(stream, "size too large"); - } - } - } - - /* Allocate new or expand previous allocation */ - /* Note: on failure the old pointer will remain in the structure, - * the message must be freed by caller also on error return. */ - ptr = pb_realloc(ptr, array_size * data_size); - if (ptr == NULL) - PB_RETURN_ERROR(stream, "realloc failed"); - - *(void**)pData = ptr; - return true; -} - -/* Clear a newly allocated item in case it contains a pointer, or is a submessage. */ -static void initialize_pointer_field(void *pItem, pb_field_iter_t *iter) -{ - if (PB_LTYPE(iter->pos->type) == PB_LTYPE_STRING || - PB_LTYPE(iter->pos->type) == PB_LTYPE_BYTES) - { - *(void**)pItem = NULL; - } - else if (PB_LTYPE(iter->pos->type) == PB_LTYPE_SUBMESSAGE) - { - /* We memset to zero so that any callbacks are set to NULL. - * Then set any default values. */ - memset(pItem, 0, iter->pos->data_size); - pb_message_set_to_defaults((const pb_field_t *) iter->pos->ptr, pItem); - } -} -#endif - -static bool checkreturn decode_pointer_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter) -{ -#ifndef PB_ENABLE_MALLOC - PB_UNUSED(wire_type); - PB_UNUSED(iter); - PB_RETURN_ERROR(stream, "no malloc support"); -#else - pb_type_t type; - pb_decoder_t func; - - type = iter->pos->type; - func = PB_DECODERS[PB_LTYPE(type)]; - - switch (PB_HTYPE(type)) - { - case PB_HTYPE_REQUIRED: - case PB_HTYPE_OPTIONAL: - case PB_HTYPE_ONEOF: - if (PB_LTYPE(type) == PB_LTYPE_SUBMESSAGE && - *(void**)iter->pData != NULL) - { - /* Duplicate field, have to release the old allocation first. */ - pb_release_single_field(iter); - } - - if (PB_HTYPE(type) == PB_HTYPE_ONEOF) - { - *(pb_size_t*)iter->pSize = iter->pos->tag; - } - - if (PB_LTYPE(type) == PB_LTYPE_STRING || - PB_LTYPE(type) == PB_LTYPE_BYTES) - { - return func(stream, iter->pos, iter->pData); - } - else - { - if (!allocate_field(stream, iter->pData, iter->pos->data_size, 1)) - return false; - - initialize_pointer_field(*(void**)iter->pData, iter); - return func(stream, iter->pos, *(void**)iter->pData); - } - - case PB_HTYPE_REPEATED: - if (wire_type == PB_WT_STRING - && PB_LTYPE(type) <= PB_LTYPE_LAST_PACKABLE) - { - /* Packed array, multiple items come in at once. */ - bool status = true; - pb_size_t *size = (pb_size_t*)iter->pSize; - size_t allocated_size = *size; - void *pItem; - pb_istream_t substream; - - if (!pb_make_string_substream(stream, &substream)) - return false; - - while (substream.bytes_left) - { - if ((size_t)*size + 1 > allocated_size) - { - /* Allocate more storage. This tries to guess the - * number of remaining entries. Round the division - * upwards. */ - allocated_size += (substream.bytes_left - 1) / iter->pos->data_size + 1; - - if (!allocate_field(&substream, iter->pData, iter->pos->data_size, allocated_size)) - { - status = false; - break; - } - } - - /* Decode the array entry */ - pItem = *(char**)iter->pData + iter->pos->data_size * (*size); - initialize_pointer_field(pItem, iter); - if (!func(&substream, iter->pos, pItem)) - { - status = false; - break; - } - - if (*size == PB_SIZE_MAX) - { -#ifndef PB_NO_ERRMSG - stream->errmsg = "too many array entries"; -#endif - status = false; - break; - } - - (*size)++; - } - if (!pb_close_string_substream(stream, &substream)) - return false; - - return status; - } - else - { - /* Normal repeated field, i.e. only one item at a time. */ - pb_size_t *size = (pb_size_t*)iter->pSize; - void *pItem; - - if (*size == PB_SIZE_MAX) - PB_RETURN_ERROR(stream, "too many array entries"); - - (*size)++; - if (!allocate_field(stream, iter->pData, iter->pos->data_size, *size)) - return false; - - pItem = *(char**)iter->pData + iter->pos->data_size * (*size - 1); - initialize_pointer_field(pItem, iter); - return func(stream, iter->pos, pItem); - } - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } -#endif -} - -static bool checkreturn decode_callback_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter) -{ - pb_callback_t *pCallback = (pb_callback_t*)iter->pData; - -#ifdef PB_OLD_CALLBACK_STYLE - void *arg = pCallback->arg; -#else - void **arg = &(pCallback->arg); -#endif - - if (pCallback == NULL || pCallback->funcs.decode == NULL) - return pb_skip_field(stream, wire_type); - - if (wire_type == PB_WT_STRING) - { - pb_istream_t substream; - - if (!pb_make_string_substream(stream, &substream)) - return false; - - do - { - if (!pCallback->funcs.decode(&substream, iter->pos, arg)) - PB_RETURN_ERROR(stream, "callback failed"); - } while (substream.bytes_left); - - if (!pb_close_string_substream(stream, &substream)) - return false; - - return true; - } - else - { - /* Copy the single scalar value to stack. - * This is required so that we can limit the stream length, - * which in turn allows to use same callback for packed and - * not-packed fields. */ - pb_istream_t substream; - pb_byte_t buffer[10]; - size_t size = sizeof(buffer); - - if (!read_raw_value(stream, wire_type, buffer, &size)) - return false; - substream = pb_istream_from_buffer(buffer, size); - - return pCallback->funcs.decode(&substream, iter->pos, arg); - } -} - -static bool checkreturn decode_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter) -{ -#ifdef PB_ENABLE_MALLOC - /* When decoding an oneof field, check if there is old data that must be - * released first. */ - if (PB_HTYPE(iter->pos->type) == PB_HTYPE_ONEOF) - { - if (!pb_release_union_field(stream, iter)) - return false; - } -#endif - - switch (PB_ATYPE(iter->pos->type)) - { - case PB_ATYPE_STATIC: - return decode_static_field(stream, wire_type, iter); - - case PB_ATYPE_POINTER: - return decode_pointer_field(stream, wire_type, iter); - - case PB_ATYPE_CALLBACK: - return decode_callback_field(stream, wire_type, iter); - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } -} - -static void iter_from_extension(pb_field_iter_t *iter, pb_extension_t *extension) -{ - /* Fake a field iterator for the extension field. - * It is not actually safe to advance this iterator, but decode_field - * will not even try to. */ - const pb_field_t *field = (const pb_field_t*)extension->type->arg; - (void)pb_field_iter_begin(iter, field, extension->dest); - iter->pData = extension->dest; - iter->pSize = &extension->found; - - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - { - /* For pointer extensions, the pointer is stored directly - * in the extension structure. This avoids having an extra - * indirection. */ - iter->pData = &extension->dest; - } -} - -/* Default handler for extension fields. Expects a pb_field_t structure - * in extension->type->arg. */ -static bool checkreturn default_extension_decoder(pb_istream_t *stream, - pb_extension_t *extension, uint32_t tag, pb_wire_type_t wire_type) -{ - const pb_field_t *field = (const pb_field_t*)extension->type->arg; - pb_field_iter_t iter; - - if (field->tag != tag) - return true; - - iter_from_extension(&iter, extension); - extension->found = true; - return decode_field(stream, wire_type, &iter); -} - -/* Try to decode an unknown field as an extension field. Tries each extension - * decoder in turn, until one of them handles the field or loop ends. */ -static bool checkreturn decode_extension(pb_istream_t *stream, - uint32_t tag, pb_wire_type_t wire_type, pb_field_iter_t *iter) -{ - pb_extension_t *extension = *(pb_extension_t* const *)iter->pData; - size_t pos = stream->bytes_left; - - while (extension != NULL && pos == stream->bytes_left) - { - bool status; - if (extension->type->decode) - status = extension->type->decode(stream, extension, tag, wire_type); - else - status = default_extension_decoder(stream, extension, tag, wire_type); - - if (!status) - return false; - - extension = extension->next; - } - - return true; -} - -/* Step through the iterator until an extension field is found or until all - * entries have been checked. There can be only one extension field per - * message. Returns false if no extension field is found. */ -static bool checkreturn find_extension_field(pb_field_iter_t *iter) -{ - const pb_field_t *start = iter->pos; - - do { - if (PB_LTYPE(iter->pos->type) == PB_LTYPE_EXTENSION) - return true; - (void)pb_field_iter_next(iter); - } while (iter->pos != start); - - return false; -} - -/* Initialize message fields to default values, recursively */ -static void pb_field_set_to_default(pb_field_iter_t *iter) -{ - pb_type_t type; - type = iter->pos->type; - - if (PB_LTYPE(type) == PB_LTYPE_EXTENSION) - { - pb_extension_t *ext = *(pb_extension_t* const *)iter->pData; - while (ext != NULL) - { - pb_field_iter_t ext_iter; - ext->found = false; - iter_from_extension(&ext_iter, ext); - pb_field_set_to_default(&ext_iter); - ext = ext->next; - } - } - else if (PB_ATYPE(type) == PB_ATYPE_STATIC) - { - bool init_data = true; - if (PB_HTYPE(type) == PB_HTYPE_OPTIONAL && iter->pSize != iter->pData) - { - /* Set has_field to false. Still initialize the optional field - * itself also. */ - *(bool*)iter->pSize = false; - } - else if (PB_HTYPE(type) == PB_HTYPE_REPEATED || - PB_HTYPE(type) == PB_HTYPE_ONEOF) - { - /* REPEATED: Set array count to 0, no need to initialize contents. - ONEOF: Set which_field to 0. */ - *(pb_size_t*)iter->pSize = 0; - init_data = false; - } - - if (init_data) - { - if (PB_LTYPE(iter->pos->type) == PB_LTYPE_SUBMESSAGE) - { - /* Initialize submessage to defaults */ - pb_message_set_to_defaults((const pb_field_t *) iter->pos->ptr, iter->pData); - } - else if (iter->pos->ptr != NULL) - { - /* Initialize to default value */ - memcpy(iter->pData, iter->pos->ptr, iter->pos->data_size); - } - else - { - /* Initialize to zeros */ - memset(iter->pData, 0, iter->pos->data_size); - } - } - } - else if (PB_ATYPE(type) == PB_ATYPE_POINTER) - { - /* Initialize the pointer to NULL. */ - *(void**)iter->pData = NULL; - - /* Initialize array count to 0. */ - if (PB_HTYPE(type) == PB_HTYPE_REPEATED || - PB_HTYPE(type) == PB_HTYPE_ONEOF) - { - *(pb_size_t*)iter->pSize = 0; - } - } - else if (PB_ATYPE(type) == PB_ATYPE_CALLBACK) - { - /* Don't overwrite callback */ - } -} - -static void pb_message_set_to_defaults(const pb_field_t fields[], void *dest_struct) -{ - pb_field_iter_t iter; - - if (!pb_field_iter_begin(&iter, fields, dest_struct)) - return; /* Empty message type */ - - do - { - pb_field_set_to_default(&iter); - } while (pb_field_iter_next(&iter)); -} - -/********************* - * Decode all fields * - *********************/ - -bool checkreturn pb_decode_noinit(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct) -{ - uint32_t fields_seen[(PB_MAX_REQUIRED_FIELDS + 31) / 32] = {0, 0}; - const uint32_t allbits = ~(uint32_t)0; - uint32_t extension_range_start = 0; - pb_field_iter_t iter; - - /* 'fixed_count_field' and 'fixed_count_size' track position of a repeated fixed - * count field. This can only handle _one_ repeated fixed count field that - * is unpacked and unordered among other (non repeated fixed count) fields. - */ - const pb_field_t *fixed_count_field = NULL; - pb_size_t fixed_count_size = 0; - - /* Return value ignored, as empty message types will be correctly handled by - * pb_field_iter_find() anyway. */ - (void)pb_field_iter_begin(&iter, fields, dest_struct); - - while (stream->bytes_left) - { - uint32_t tag; - pb_wire_type_t wire_type; - bool eof; - - if (!pb_decode_tag(stream, &wire_type, &tag, &eof)) - { - if (eof) - break; - else - return false; - } - - if (!pb_field_iter_find(&iter, tag)) - { - /* No match found, check if it matches an extension. */ - if (tag >= extension_range_start) - { - if (!find_extension_field(&iter)) - extension_range_start = (uint32_t)-1; - else - extension_range_start = iter.pos->tag; - - if (tag >= extension_range_start) - { - size_t pos = stream->bytes_left; - - if (!decode_extension(stream, tag, wire_type, &iter)) - return false; - - if (pos != stream->bytes_left) - { - /* The field was handled */ - continue; - } - } - } - - /* No match found, skip data */ - if (!pb_skip_field(stream, wire_type)) - return false; - continue; - } - - /* If a repeated fixed count field was found, get size from - * 'fixed_count_field' as there is no counter contained in the struct. - */ - if (PB_HTYPE(iter.pos->type) == PB_HTYPE_REPEATED - && iter.pSize == iter.pData) - { - if (fixed_count_field != iter.pos) { - /* If the new fixed count field does not match the previous one, - * check that the previous one is NULL or that it finished - * receiving all the expected data. - */ - if (fixed_count_field != NULL && - fixed_count_size != fixed_count_field->array_size) - { - PB_RETURN_ERROR(stream, "wrong size for fixed count field"); - } - - fixed_count_field = iter.pos; - fixed_count_size = 0; - } - - iter.pSize = &fixed_count_size; - } - - if (PB_HTYPE(iter.pos->type) == PB_HTYPE_REQUIRED - && iter.required_field_index < PB_MAX_REQUIRED_FIELDS) - { - uint32_t tmp = ((uint32_t)1 << (iter.required_field_index & 31)); - fields_seen[iter.required_field_index >> 5] |= tmp; - } - - if (!decode_field(stream, wire_type, &iter)) - return false; - } - - /* Check that all elements of the last decoded fixed count field were present. */ - if (fixed_count_field != NULL && - fixed_count_size != fixed_count_field->array_size) - { - PB_RETURN_ERROR(stream, "wrong size for fixed count field"); - } - - /* Check that all required fields were present. */ - { - /* First figure out the number of required fields by - * seeking to the end of the field array. Usually we - * are already close to end after decoding. - */ - unsigned req_field_count; - pb_type_t last_type; - unsigned i; - do { - req_field_count = iter.required_field_index; - last_type = iter.pos->type; - } while (pb_field_iter_next(&iter)); - - /* Fixup if last field was also required. */ - if (PB_HTYPE(last_type) == PB_HTYPE_REQUIRED && iter.pos->tag != 0) - req_field_count++; - - if (req_field_count > PB_MAX_REQUIRED_FIELDS) - req_field_count = PB_MAX_REQUIRED_FIELDS; - - if (req_field_count > 0) - { - /* Check the whole words */ - for (i = 0; i < (req_field_count >> 5); i++) - { - if (fields_seen[i] != allbits) - PB_RETURN_ERROR(stream, "missing required field"); - } - - /* Check the remaining bits (if any) */ - if ((req_field_count & 31) != 0) - { - if (fields_seen[req_field_count >> 5] != - (allbits >> (32 - (req_field_count & 31)))) - { - PB_RETURN_ERROR(stream, "missing required field"); - } - } - } - } - - return true; -} - -bool checkreturn pb_decode(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct) -{ - bool status; - pb_message_set_to_defaults(fields, dest_struct); - status = pb_decode_noinit(stream, fields, dest_struct); - -#ifdef PB_ENABLE_MALLOC - if (!status) - pb_release(fields, dest_struct); -#endif - - return status; -} - -bool pb_decode_delimited_noinit(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct) -{ - pb_istream_t substream; - bool status; - - if (!pb_make_string_substream(stream, &substream)) - return false; - - status = pb_decode_noinit(&substream, fields, dest_struct); - - if (!pb_close_string_substream(stream, &substream)) - return false; - return status; -} - -bool pb_decode_delimited(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct) -{ - pb_istream_t substream; - bool status; - - if (!pb_make_string_substream(stream, &substream)) - return false; - - status = pb_decode(&substream, fields, dest_struct); - - if (!pb_close_string_substream(stream, &substream)) - return false; - return status; -} - -bool pb_decode_nullterminated(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct) -{ - /* This behaviour will be separated in nanopb-0.4.0, see issue #278. */ - return pb_decode(stream, fields, dest_struct); -} - -#ifdef PB_ENABLE_MALLOC -/* Given an oneof field, if there has already been a field inside this oneof, - * release it before overwriting with a different one. */ -static bool pb_release_union_field(pb_istream_t *stream, pb_field_iter_t *iter) -{ - pb_size_t old_tag = *(pb_size_t*)iter->pSize; /* Previous which_ value */ - pb_size_t new_tag = iter->pos->tag; /* New which_ value */ - - if (old_tag == 0) - return true; /* Ok, no old data in union */ - - if (old_tag == new_tag) - return true; /* Ok, old data is of same type => merge */ - - /* Release old data. The find can fail if the message struct contains - * invalid data. */ - if (!pb_field_iter_find(iter, old_tag)) - PB_RETURN_ERROR(stream, "invalid union tag"); - - pb_release_single_field(iter); - - /* Restore iterator to where it should be. - * This shouldn't fail unless the pb_field_t structure is corrupted. */ - if (!pb_field_iter_find(iter, new_tag)) - PB_RETURN_ERROR(stream, "iterator error"); - - return true; -} - -static void pb_release_single_field(const pb_field_iter_t *iter) -{ - pb_type_t type; - type = iter->pos->type; - - if (PB_HTYPE(type) == PB_HTYPE_ONEOF) - { - if (*(pb_size_t*)iter->pSize != iter->pos->tag) - return; /* This is not the current field in the union */ - } - - /* Release anything contained inside an extension or submsg. - * This has to be done even if the submsg itself is statically - * allocated. */ - if (PB_LTYPE(type) == PB_LTYPE_EXTENSION) - { - /* Release fields from all extensions in the linked list */ - pb_extension_t *ext = *(pb_extension_t**)iter->pData; - while (ext != NULL) - { - pb_field_iter_t ext_iter; - iter_from_extension(&ext_iter, ext); - pb_release_single_field(&ext_iter); - ext = ext->next; - } - } - else if (PB_LTYPE(type) == PB_LTYPE_SUBMESSAGE) - { - /* Release fields in submessage or submsg array */ - void *pItem = iter->pData; - pb_size_t count = 1; - - if (PB_ATYPE(type) == PB_ATYPE_POINTER) - { - pItem = *(void**)iter->pData; - } - - if (PB_HTYPE(type) == PB_HTYPE_REPEATED) - { - if (PB_ATYPE(type) == PB_ATYPE_STATIC && iter->pSize == iter->pData) { - /* No _count field so use size of the array */ - count = iter->pos->array_size; - } else { - count = *(pb_size_t*)iter->pSize; - } - - if (PB_ATYPE(type) == PB_ATYPE_STATIC && count > iter->pos->array_size) - { - /* Protect against corrupted _count fields */ - count = iter->pos->array_size; - } - } - - if (pItem) - { - while (count--) - { - pb_release((const pb_field_t*)iter->pos->ptr, pItem); - pItem = (char*)pItem + iter->pos->data_size; - } - } - } - - if (PB_ATYPE(type) == PB_ATYPE_POINTER) - { - if (PB_HTYPE(type) == PB_HTYPE_REPEATED && - (PB_LTYPE(type) == PB_LTYPE_STRING || - PB_LTYPE(type) == PB_LTYPE_BYTES)) - { - /* Release entries in repeated string or bytes array */ - void **pItem = *(void***)iter->pData; - pb_size_t count = *(pb_size_t*)iter->pSize; - while (count--) - { - pb_free(*pItem); - *pItem++ = NULL; - } - } - - if (PB_HTYPE(type) == PB_HTYPE_REPEATED) - { - /* We are going to release the array, so set the size to 0 */ - *(pb_size_t*)iter->pSize = 0; - } - - /* Release main item */ - pb_free(*(void**)iter->pData); - *(void**)iter->pData = NULL; - } -} - -void pb_release(const pb_field_t fields[], void *dest_struct) -{ - pb_field_iter_t iter; - - if (!dest_struct) - return; /* Ignore NULL pointers, similar to free() */ - - if (!pb_field_iter_begin(&iter, fields, dest_struct)) - return; /* Empty message type */ - - do - { - pb_release_single_field(&iter); - } while (pb_field_iter_next(&iter)); -} -#endif - -/* Field decoders */ - -bool pb_decode_svarint(pb_istream_t *stream, pb_int64_t *dest) -{ - pb_uint64_t value; - if (!pb_decode_varint(stream, &value)) - return false; - - if (value & 1) - *dest = (pb_int64_t)(~(value >> 1)); - else - *dest = (pb_int64_t)(value >> 1); - - return true; -} - -bool pb_decode_fixed32(pb_istream_t *stream, void *dest) -{ - pb_byte_t bytes[4]; - - if (!pb_read(stream, bytes, 4)) - return false; - - *(uint32_t*)dest = ((uint32_t)bytes[0] << 0) | - ((uint32_t)bytes[1] << 8) | - ((uint32_t)bytes[2] << 16) | - ((uint32_t)bytes[3] << 24); - return true; -} - -#ifndef PB_WITHOUT_64BIT -bool pb_decode_fixed64(pb_istream_t *stream, void *dest) -{ - pb_byte_t bytes[8]; - - if (!pb_read(stream, bytes, 8)) - return false; - - *(uint64_t*)dest = ((uint64_t)bytes[0] << 0) | - ((uint64_t)bytes[1] << 8) | - ((uint64_t)bytes[2] << 16) | - ((uint64_t)bytes[3] << 24) | - ((uint64_t)bytes[4] << 32) | - ((uint64_t)bytes[5] << 40) | - ((uint64_t)bytes[6] << 48) | - ((uint64_t)bytes[7] << 56); - - return true; -} -#endif - -static bool checkreturn pb_dec_varint(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - pb_uint64_t value; - pb_int64_t svalue; - pb_int64_t clamped; - if (!pb_decode_varint(stream, &value)) - return false; - - /* See issue 97: Google's C++ protobuf allows negative varint values to - * be cast as int32_t, instead of the int64_t that should be used when - * encoding. Previous nanopb versions had a bug in encoding. In order to - * not break decoding of such messages, we cast <=32 bit fields to - * int32_t first to get the sign correct. - */ - if (field->data_size == sizeof(pb_int64_t)) - svalue = (pb_int64_t)value; - else - svalue = (int32_t)value; - - /* Cast to the proper field size, while checking for overflows */ - if (field->data_size == sizeof(pb_int64_t)) - clamped = *(pb_int64_t*)dest = svalue; - else if (field->data_size == sizeof(int32_t)) - clamped = *(int32_t*)dest = (int32_t)svalue; - else if (field->data_size == sizeof(int_least16_t)) - clamped = *(int_least16_t*)dest = (int_least16_t)svalue; - else if (field->data_size == sizeof(int_least8_t)) - clamped = *(int_least8_t*)dest = (int_least8_t)svalue; - else - PB_RETURN_ERROR(stream, "invalid data_size"); - - if (clamped != svalue) - PB_RETURN_ERROR(stream, "integer too large"); - - return true; -} - -static bool checkreturn pb_dec_uvarint(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - pb_uint64_t value, clamped; - if (!pb_decode_varint(stream, &value)) - return false; - - /* Cast to the proper field size, while checking for overflows */ - if (field->data_size == sizeof(pb_uint64_t)) - clamped = *(pb_uint64_t*)dest = value; - else if (field->data_size == sizeof(uint32_t)) - clamped = *(uint32_t*)dest = (uint32_t)value; - else if (field->data_size == sizeof(uint_least16_t)) - clamped = *(uint_least16_t*)dest = (uint_least16_t)value; - else if (field->data_size == sizeof(uint_least8_t)) - clamped = *(uint_least8_t*)dest = (uint_least8_t)value; - else - PB_RETURN_ERROR(stream, "invalid data_size"); - - if (clamped != value) - PB_RETURN_ERROR(stream, "integer too large"); - - return true; -} - -static bool checkreturn pb_dec_svarint(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - pb_int64_t value, clamped; - if (!pb_decode_svarint(stream, &value)) - return false; - - /* Cast to the proper field size, while checking for overflows */ - if (field->data_size == sizeof(pb_int64_t)) - clamped = *(pb_int64_t*)dest = value; - else if (field->data_size == sizeof(int32_t)) - clamped = *(int32_t*)dest = (int32_t)value; - else if (field->data_size == sizeof(int_least16_t)) - clamped = *(int_least16_t*)dest = (int_least16_t)value; - else if (field->data_size == sizeof(int_least8_t)) - clamped = *(int_least8_t*)dest = (int_least8_t)value; - else - PB_RETURN_ERROR(stream, "invalid data_size"); - - if (clamped != value) - PB_RETURN_ERROR(stream, "integer too large"); - - return true; -} - -static bool checkreturn pb_dec_fixed32(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - PB_UNUSED(field); - return pb_decode_fixed32(stream, dest); -} - -static bool checkreturn pb_dec_fixed64(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - PB_UNUSED(field); -#ifndef PB_WITHOUT_64BIT - return pb_decode_fixed64(stream, dest); -#else - PB_UNUSED(dest); - PB_RETURN_ERROR(stream, "no 64bit support"); -#endif -} - -static bool checkreturn pb_dec_bytes(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - uint32_t size; - size_t alloc_size; - pb_bytes_array_t *bdest; - - if (!pb_decode_varint32(stream, &size)) - return false; - - if (size > PB_SIZE_MAX) - PB_RETURN_ERROR(stream, "bytes overflow"); - - alloc_size = PB_BYTES_ARRAY_T_ALLOCSIZE(size); - if (size > alloc_size) - PB_RETURN_ERROR(stream, "size too large"); - - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - { -#ifndef PB_ENABLE_MALLOC - PB_RETURN_ERROR(stream, "no malloc support"); -#else - if (!allocate_field(stream, dest, alloc_size, 1)) - return false; - bdest = *(pb_bytes_array_t**)dest; -#endif - } - else - { - if (alloc_size > field->data_size) - PB_RETURN_ERROR(stream, "bytes overflow"); - bdest = (pb_bytes_array_t*)dest; - } - - bdest->size = (pb_size_t)size; - return pb_read(stream, bdest->bytes, size); -} - -static bool checkreturn pb_dec_string(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - uint32_t size; - size_t alloc_size; - bool status; - if (!pb_decode_varint32(stream, &size)) - return false; - - /* Space for null terminator */ - alloc_size = size + 1; - - if (alloc_size < size) - PB_RETURN_ERROR(stream, "size too large"); - - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - { -#ifndef PB_ENABLE_MALLOC - PB_RETURN_ERROR(stream, "no malloc support"); -#else - if (!allocate_field(stream, dest, alloc_size, 1)) - return false; - dest = *(void**)dest; -#endif - } - else - { - if (alloc_size > field->data_size) - PB_RETURN_ERROR(stream, "string overflow"); - } - - status = pb_read(stream, (pb_byte_t*)dest, size); - *((pb_byte_t*)dest + size) = 0; - return status; -} - -static bool checkreturn pb_dec_submessage(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - bool status; - pb_istream_t substream; - const pb_field_t* submsg_fields = (const pb_field_t*)field->ptr; - - if (!pb_make_string_substream(stream, &substream)) - return false; - - if (field->ptr == NULL) - PB_RETURN_ERROR(stream, "invalid field descriptor"); - - /* New array entries need to be initialized, while required and optional - * submessages have already been initialized in the top-level pb_decode. */ - if (PB_HTYPE(field->type) == PB_HTYPE_REPEATED) - status = pb_decode(&substream, submsg_fields, dest); - else - status = pb_decode_noinit(&substream, submsg_fields, dest); - - if (!pb_close_string_substream(stream, &substream)) - return false; - return status; -} - -static bool checkreturn pb_dec_fixed_length_bytes(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - uint32_t size; - - if (!pb_decode_varint32(stream, &size)) - return false; - - if (size > PB_SIZE_MAX) - PB_RETURN_ERROR(stream, "bytes overflow"); - - if (size == 0) - { - /* As a special case, treat empty bytes string as all zeros for fixed_length_bytes. */ - memset(dest, 0, field->data_size); - return true; - } - - if (size != field->data_size) - PB_RETURN_ERROR(stream, "incorrect fixed length bytes size"); - - return pb_read(stream, (pb_byte_t*)dest, field->data_size); -} diff --git a/assign5/openTok/Pods/nanopb/pb_decode.h b/assign5/openTok/Pods/nanopb/pb_decode.h deleted file mode 100644 index 398b24a..0000000 --- a/assign5/openTok/Pods/nanopb/pb_decode.h +++ /dev/null @@ -1,175 +0,0 @@ -/* pb_decode.h: Functions to decode protocol buffers. Depends on pb_decode.c. - * The main function is pb_decode. You also need an input stream, and the - * field descriptions created by nanopb_generator.py. - */ - -#ifndef PB_DECODE_H_INCLUDED -#define PB_DECODE_H_INCLUDED - -#include "pb.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Structure for defining custom input streams. You will need to provide - * a callback function to read the bytes from your storage, which can be - * for example a file or a network socket. - * - * The callback must conform to these rules: - * - * 1) Return false on IO errors. This will cause decoding to abort. - * 2) You can use state to store your own data (e.g. buffer pointer), - * and rely on pb_read to verify that no-body reads past bytes_left. - * 3) Your callback may be used with substreams, in which case bytes_left - * is different than from the main stream. Don't use bytes_left to compute - * any pointers. - */ -struct pb_istream_s -{ -#ifdef PB_BUFFER_ONLY - /* Callback pointer is not used in buffer-only configuration. - * Having an int pointer here allows binary compatibility but - * gives an error if someone tries to assign callback function. - */ - int *callback; -#else - bool (*callback)(pb_istream_t *stream, pb_byte_t *buf, size_t count); -#endif - - void *state; /* Free field for use by callback implementation */ - size_t bytes_left; - -#ifndef PB_NO_ERRMSG - const char *errmsg; -#endif -}; - -/*************************** - * Main decoding functions * - ***************************/ - -/* Decode a single protocol buffers message from input stream into a C structure. - * Returns true on success, false on any failure. - * The actual struct pointed to by dest must match the description in fields. - * Callback fields of the destination structure must be initialized by caller. - * All other fields will be initialized by this function. - * - * Example usage: - * MyMessage msg = {}; - * uint8_t buffer[64]; - * pb_istream_t stream; - * - * // ... read some data into buffer ... - * - * stream = pb_istream_from_buffer(buffer, count); - * pb_decode(&stream, MyMessage_fields, &msg); - */ -bool pb_decode(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct); - -/* Same as pb_decode, except does not initialize the destination structure - * to default values. This is slightly faster if you need no default values - * and just do memset(struct, 0, sizeof(struct)) yourself. - * - * This can also be used for 'merging' two messages, i.e. update only the - * fields that exist in the new message. - * - * Note: If this function returns with an error, it will not release any - * dynamically allocated fields. You will need to call pb_release() yourself. - */ -bool pb_decode_noinit(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct); - -/* Same as pb_decode, except expects the stream to start with the message size - * encoded as varint. Corresponds to parseDelimitedFrom() in Google's - * protobuf API. - */ -bool pb_decode_delimited(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct); - -/* Same as pb_decode_delimited, except that it does not initialize the destination structure. - * See pb_decode_noinit - */ -bool pb_decode_delimited_noinit(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct); - -/* Same as pb_decode, except allows the message to be terminated with a null byte. - * NOTE: Until nanopb-0.4.0, pb_decode() also allows null-termination. This behaviour - * is not supported in most other protobuf implementations, so pb_decode_delimited() - * is a better option for compatibility. - */ -bool pb_decode_nullterminated(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct); - -#ifdef PB_ENABLE_MALLOC -/* Release any allocated pointer fields. If you use dynamic allocation, you should - * call this for any successfully decoded message when you are done with it. If - * pb_decode() returns with an error, the message is already released. - */ -void pb_release(const pb_field_t fields[], void *dest_struct); -#endif - - -/************************************** - * Functions for manipulating streams * - **************************************/ - -/* Create an input stream for reading from a memory buffer. - * - * Alternatively, you can use a custom stream that reads directly from e.g. - * a file or a network socket. - */ -pb_istream_t pb_istream_from_buffer(const pb_byte_t *buf, size_t bufsize); - -/* Function to read from a pb_istream_t. You can use this if you need to - * read some custom header data, or to read data in field callbacks. - */ -bool pb_read(pb_istream_t *stream, pb_byte_t *buf, size_t count); - - -/************************************************ - * Helper functions for writing field callbacks * - ************************************************/ - -/* Decode the tag for the next field in the stream. Gives the wire type and - * field tag. At end of the message, returns false and sets eof to true. */ -bool pb_decode_tag(pb_istream_t *stream, pb_wire_type_t *wire_type, uint32_t *tag, bool *eof); - -/* Skip the field payload data, given the wire type. */ -bool pb_skip_field(pb_istream_t *stream, pb_wire_type_t wire_type); - -/* Decode an integer in the varint format. This works for bool, enum, int32, - * int64, uint32 and uint64 field types. */ -#ifndef PB_WITHOUT_64BIT -bool pb_decode_varint(pb_istream_t *stream, uint64_t *dest); -#else -#define pb_decode_varint pb_decode_varint32 -#endif - -/* Decode an integer in the varint format. This works for bool, enum, int32, - * and uint32 field types. */ -bool pb_decode_varint32(pb_istream_t *stream, uint32_t *dest); - -/* Decode an integer in the zig-zagged svarint format. This works for sint32 - * and sint64. */ -#ifndef PB_WITHOUT_64BIT -bool pb_decode_svarint(pb_istream_t *stream, int64_t *dest); -#else -bool pb_decode_svarint(pb_istream_t *stream, int32_t *dest); -#endif - -/* Decode a fixed32, sfixed32 or float value. You need to pass a pointer to - * a 4-byte wide C variable. */ -bool pb_decode_fixed32(pb_istream_t *stream, void *dest); - -#ifndef PB_WITHOUT_64BIT -/* Decode a fixed64, sfixed64 or double value. You need to pass a pointer to - * a 8-byte wide C variable. */ -bool pb_decode_fixed64(pb_istream_t *stream, void *dest); -#endif - -/* Make a limited-length substream for reading a PB_WT_STRING field. */ -bool pb_make_string_substream(pb_istream_t *stream, pb_istream_t *substream); -bool pb_close_string_substream(pb_istream_t *stream, pb_istream_t *substream); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif diff --git a/assign5/openTok/Pods/nanopb/pb_encode.c b/assign5/openTok/Pods/nanopb/pb_encode.c deleted file mode 100644 index 089172c..0000000 --- a/assign5/openTok/Pods/nanopb/pb_encode.c +++ /dev/null @@ -1,869 +0,0 @@ -/* pb_encode.c -- encode a protobuf using minimal resources - * - * 2011 Petteri Aimonen <jpa@kapsi.fi> - */ - -#include "pb.h" -#include "pb_encode.h" -#include "pb_common.h" - -/* Use the GCC warn_unused_result attribute to check that all return values - * are propagated correctly. On other compilers and gcc before 3.4.0 just - * ignore the annotation. - */ -#if !defined(__GNUC__) || ( __GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 4) - #define checkreturn -#else - #define checkreturn __attribute__((warn_unused_result)) -#endif - -/************************************** - * Declarations internal to this file * - **************************************/ -typedef bool (*pb_encoder_t)(pb_ostream_t *stream, const pb_field_t *field, const void *src) checkreturn; - -static bool checkreturn buf_write(pb_ostream_t *stream, const pb_byte_t *buf, size_t count); -static bool checkreturn encode_array(pb_ostream_t *stream, const pb_field_t *field, const void *pData, size_t count, pb_encoder_t func); -static bool checkreturn encode_field(pb_ostream_t *stream, const pb_field_t *field, const void *pData); -static bool checkreturn default_extension_encoder(pb_ostream_t *stream, const pb_extension_t *extension); -static bool checkreturn encode_extension_field(pb_ostream_t *stream, const pb_field_t *field, const void *pData); -static void *pb_const_cast(const void *p); -static bool checkreturn pb_enc_varint(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_uvarint(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_svarint(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_fixed32(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_fixed64(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_bytes(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_string(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_submessage(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_fixed_length_bytes(pb_ostream_t *stream, const pb_field_t *field, const void *src); - -#ifdef PB_WITHOUT_64BIT -#define pb_int64_t int32_t -#define pb_uint64_t uint32_t - -static bool checkreturn pb_encode_negative_varint(pb_ostream_t *stream, pb_uint64_t value); -#else -#define pb_int64_t int64_t -#define pb_uint64_t uint64_t -#endif - -/* --- Function pointers to field encoders --- - * Order in the array must match pb_action_t LTYPE numbering. - */ -static const pb_encoder_t PB_ENCODERS[PB_LTYPES_COUNT] = { - &pb_enc_varint, - &pb_enc_uvarint, - &pb_enc_svarint, - &pb_enc_fixed32, - &pb_enc_fixed64, - - &pb_enc_bytes, - &pb_enc_string, - &pb_enc_submessage, - NULL, /* extensions */ - &pb_enc_fixed_length_bytes -}; - -/******************************* - * pb_ostream_t implementation * - *******************************/ - -static bool checkreturn buf_write(pb_ostream_t *stream, const pb_byte_t *buf, size_t count) -{ - size_t i; - pb_byte_t *dest = (pb_byte_t*)stream->state; - stream->state = dest + count; - - for (i = 0; i < count; i++) - dest[i] = buf[i]; - - return true; -} - -pb_ostream_t pb_ostream_from_buffer(pb_byte_t *buf, size_t bufsize) -{ - pb_ostream_t stream; -#ifdef PB_BUFFER_ONLY - stream.callback = (void*)1; /* Just a marker value */ -#else - stream.callback = &buf_write; -#endif - stream.state = buf; - stream.max_size = bufsize; - stream.bytes_written = 0; -#ifndef PB_NO_ERRMSG - stream.errmsg = NULL; -#endif - return stream; -} - -bool checkreturn pb_write(pb_ostream_t *stream, const pb_byte_t *buf, size_t count) -{ - if (stream->callback != NULL) - { - if (stream->bytes_written + count > stream->max_size) - PB_RETURN_ERROR(stream, "stream full"); - -#ifdef PB_BUFFER_ONLY - if (!buf_write(stream, buf, count)) - PB_RETURN_ERROR(stream, "io error"); -#else - if (!stream->callback(stream, buf, count)) - PB_RETURN_ERROR(stream, "io error"); -#endif - } - - stream->bytes_written += count; - return true; -} - -/************************* - * Encode a single field * - *************************/ - -/* Encode a static array. Handles the size calculations and possible packing. */ -static bool checkreturn encode_array(pb_ostream_t *stream, const pb_field_t *field, - const void *pData, size_t count, pb_encoder_t func) -{ - size_t i; - const void *p; - size_t size; - - if (count == 0) - return true; - - if (PB_ATYPE(field->type) != PB_ATYPE_POINTER && count > field->array_size) - PB_RETURN_ERROR(stream, "array max size exceeded"); - - /* We always pack arrays if the datatype allows it. */ - if (PB_LTYPE(field->type) <= PB_LTYPE_LAST_PACKABLE) - { - if (!pb_encode_tag(stream, PB_WT_STRING, field->tag)) - return false; - - /* Determine the total size of packed array. */ - if (PB_LTYPE(field->type) == PB_LTYPE_FIXED32) - { - size = 4 * count; - } - else if (PB_LTYPE(field->type) == PB_LTYPE_FIXED64) - { - size = 8 * count; - } - else - { - pb_ostream_t sizestream = PB_OSTREAM_SIZING; - p = pData; - for (i = 0; i < count; i++) - { - if (!func(&sizestream, field, p)) - return false; - p = (const char*)p + field->data_size; - } - size = sizestream.bytes_written; - } - - if (!pb_encode_varint(stream, (pb_uint64_t)size)) - return false; - - if (stream->callback == NULL) - return pb_write(stream, NULL, size); /* Just sizing.. */ - - /* Write the data */ - p = pData; - for (i = 0; i < count; i++) - { - if (!func(stream, field, p)) - return false; - p = (const char*)p + field->data_size; - } - } - else - { - p = pData; - for (i = 0; i < count; i++) - { - if (!pb_encode_tag_for_field(stream, field)) - return false; - - /* Normally the data is stored directly in the array entries, but - * for pointer-type string and bytes fields, the array entries are - * actually pointers themselves also. So we have to dereference once - * more to get to the actual data. */ - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER && - (PB_LTYPE(field->type) == PB_LTYPE_STRING || - PB_LTYPE(field->type) == PB_LTYPE_BYTES)) - { - if (!func(stream, field, *(const void* const*)p)) - return false; - } - else - { - if (!func(stream, field, p)) - return false; - } - p = (const char*)p + field->data_size; - } - } - - return true; -} - -/* In proto3, all fields are optional and are only encoded if their value is "non-zero". - * This function implements the check for the zero value. */ -static bool pb_check_proto3_default_value(const pb_field_t *field, const void *pData) -{ - pb_type_t type = field->type; - const void *pSize = (const char*)pData + field->size_offset; - - if (PB_HTYPE(type) == PB_HTYPE_REQUIRED) - { - /* Required proto2 fields inside proto3 submessage, pretty rare case */ - return false; - } - else if (PB_HTYPE(type) == PB_HTYPE_REPEATED) - { - /* Repeated fields inside proto3 submessage: present if count != 0 */ - return *(const pb_size_t*)pSize == 0; - } - else if (PB_HTYPE(type) == PB_HTYPE_ONEOF) - { - /* Oneof fields */ - return *(const pb_size_t*)pSize == 0; - } - else if (PB_HTYPE(type) == PB_HTYPE_OPTIONAL && field->size_offset) - { - /* Proto2 optional fields inside proto3 submessage */ - return *(const bool*)pSize == false; - } - - /* Rest is proto3 singular fields */ - - if (PB_ATYPE(type) == PB_ATYPE_STATIC) - { - if (PB_LTYPE(type) == PB_LTYPE_BYTES) - { - const pb_bytes_array_t *bytes = (const pb_bytes_array_t*)pData; - return bytes->size == 0; - } - else if (PB_LTYPE(type) == PB_LTYPE_STRING) - { - return *(const char*)pData == '\0'; - } - else if (PB_LTYPE(type) == PB_LTYPE_FIXED_LENGTH_BYTES) - { - /* Fixed length bytes is only empty if its length is fixed - * as 0. Which would be pretty strange, but we can check - * it anyway. */ - return field->data_size == 0; - } - else if (PB_LTYPE(type) == PB_LTYPE_SUBMESSAGE) - { - /* Check all fields in the submessage to find if any of them - * are non-zero. The comparison cannot be done byte-per-byte - * because the C struct may contain padding bytes that must - * be skipped. - */ - pb_field_iter_t iter; - if (pb_field_iter_begin(&iter, (const pb_field_t*)field->ptr, pb_const_cast(pData))) - { - do - { - if (!pb_check_proto3_default_value(iter.pos, iter.pData)) - { - return false; - } - } while (pb_field_iter_next(&iter)); - } - return true; - } - } - - { - /* Catch-all branch that does byte-per-byte comparison for zero value. - * - * This is for all pointer fields, and for static PB_LTYPE_VARINT, - * UVARINT, SVARINT, FIXED32, FIXED64, EXTENSION fields, and also - * callback fields. These all have integer or pointer value which - * can be compared with 0. - */ - pb_size_t i; - const char *p = (const char*)pData; - for (i = 0; i < field->data_size; i++) - { - if (p[i] != 0) - { - return false; - } - } - - return true; - } -} - -/* Encode a field with static or pointer allocation, i.e. one whose data - * is available to the encoder directly. */ -static bool checkreturn encode_basic_field(pb_ostream_t *stream, - const pb_field_t *field, const void *pData) -{ - pb_encoder_t func; - bool implicit_has; - const void *pSize = &implicit_has; - - func = PB_ENCODERS[PB_LTYPE(field->type)]; - - if (field->size_offset) - { - /* Static optional, repeated or oneof field */ - pSize = (const char*)pData + field->size_offset; - } - else if (PB_HTYPE(field->type) == PB_HTYPE_OPTIONAL) - { - /* Proto3 style field, optional but without explicit has_ field. */ - implicit_has = !pb_check_proto3_default_value(field, pData); - } - else - { - /* Required field, always present */ - implicit_has = true; - } - - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - { - /* pData is a pointer to the field, which contains pointer to - * the data. If the 2nd pointer is NULL, it is interpreted as if - * the has_field was false. - */ - pData = *(const void* const*)pData; - implicit_has = (pData != NULL); - } - - switch (PB_HTYPE(field->type)) - { - case PB_HTYPE_REQUIRED: - if (!pData) - PB_RETURN_ERROR(stream, "missing required field"); - if (!pb_encode_tag_for_field(stream, field)) - return false; - if (!func(stream, field, pData)) - return false; - break; - - case PB_HTYPE_OPTIONAL: - if (*(const bool*)pSize) - { - if (!pb_encode_tag_for_field(stream, field)) - return false; - - if (!func(stream, field, pData)) - return false; - } - break; - - case PB_HTYPE_REPEATED: { - pb_size_t count; - if (field->size_offset != 0) { - count = *(const pb_size_t*)pSize; - } else { - count = field->array_size; - } - if (!encode_array(stream, field, pData, count, func)) - return false; - break; - } - - case PB_HTYPE_ONEOF: - if (*(const pb_size_t*)pSize == field->tag) - { - if (!pb_encode_tag_for_field(stream, field)) - return false; - - if (!func(stream, field, pData)) - return false; - } - break; - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } - - return true; -} - -/* Encode a field with callback semantics. This means that a user function is - * called to provide and encode the actual data. */ -static bool checkreturn encode_callback_field(pb_ostream_t *stream, - const pb_field_t *field, const void *pData) -{ - const pb_callback_t *callback = (const pb_callback_t*)pData; - -#ifdef PB_OLD_CALLBACK_STYLE - const void *arg = callback->arg; -#else - void * const *arg = &(callback->arg); -#endif - - if (callback->funcs.encode != NULL) - { - if (!callback->funcs.encode(stream, field, arg)) - PB_RETURN_ERROR(stream, "callback error"); - } - return true; -} - -/* Encode a single field of any callback or static type. */ -static bool checkreturn encode_field(pb_ostream_t *stream, - const pb_field_t *field, const void *pData) -{ - switch (PB_ATYPE(field->type)) - { - case PB_ATYPE_STATIC: - case PB_ATYPE_POINTER: - return encode_basic_field(stream, field, pData); - - case PB_ATYPE_CALLBACK: - return encode_callback_field(stream, field, pData); - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } -} - -/* Default handler for extension fields. Expects to have a pb_field_t - * pointer in the extension->type->arg field. */ -static bool checkreturn default_extension_encoder(pb_ostream_t *stream, - const pb_extension_t *extension) -{ - const pb_field_t *field = (const pb_field_t*)extension->type->arg; - - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - { - /* For pointer extensions, the pointer is stored directly - * in the extension structure. This avoids having an extra - * indirection. */ - return encode_field(stream, field, &extension->dest); - } - else - { - return encode_field(stream, field, extension->dest); - } -} - -/* Walk through all the registered extensions and give them a chance - * to encode themselves. */ -static bool checkreturn encode_extension_field(pb_ostream_t *stream, - const pb_field_t *field, const void *pData) -{ - const pb_extension_t *extension = *(const pb_extension_t* const *)pData; - PB_UNUSED(field); - - while (extension) - { - bool status; - if (extension->type->encode) - status = extension->type->encode(stream, extension); - else - status = default_extension_encoder(stream, extension); - - if (!status) - return false; - - extension = extension->next; - } - - return true; -} - -/********************* - * Encode all fields * - *********************/ - -static void *pb_const_cast(const void *p) -{ - /* Note: this casts away const, in order to use the common field iterator - * logic for both encoding and decoding. */ - union { - void *p1; - const void *p2; - } t; - t.p2 = p; - return t.p1; -} - -bool checkreturn pb_encode(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct) -{ - pb_field_iter_t iter; - if (!pb_field_iter_begin(&iter, fields, pb_const_cast(src_struct))) - return true; /* Empty message type */ - - do { - if (PB_LTYPE(iter.pos->type) == PB_LTYPE_EXTENSION) - { - /* Special case for the extension field placeholder */ - if (!encode_extension_field(stream, iter.pos, iter.pData)) - return false; - } - else - { - /* Regular field */ - if (!encode_field(stream, iter.pos, iter.pData)) - return false; - } - } while (pb_field_iter_next(&iter)); - - return true; -} - -bool pb_encode_delimited(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct) -{ - return pb_encode_submessage(stream, fields, src_struct); -} - -bool pb_encode_nullterminated(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct) -{ - const pb_byte_t zero = 0; - - if (!pb_encode(stream, fields, src_struct)) - return false; - - return pb_write(stream, &zero, 1); -} - -bool pb_get_encoded_size(size_t *size, const pb_field_t fields[], const void *src_struct) -{ - pb_ostream_t stream = PB_OSTREAM_SIZING; - - if (!pb_encode(&stream, fields, src_struct)) - return false; - - *size = stream.bytes_written; - return true; -} - -/******************** - * Helper functions * - ********************/ - -#ifdef PB_WITHOUT_64BIT -bool checkreturn pb_encode_negative_varint(pb_ostream_t *stream, pb_uint64_t value) -{ - pb_byte_t buffer[10]; - size_t i = 0; - size_t compensation = 32;/* we need to compensate 32 bits all set to 1 */ - - while (value) - { - buffer[i] = (pb_byte_t)((value & 0x7F) | 0x80); - value >>= 7; - if (compensation) - { - /* re-set all the compensation bits we can or need */ - size_t bits = compensation > 7 ? 7 : compensation; - value ^= (pb_uint64_t)((0xFFu >> (8 - bits)) << 25); /* set the number of bits needed on the lowest of the most significant 7 bits */ - compensation -= bits; - } - i++; - } - buffer[i - 1] &= 0x7F; /* Unset top bit on last byte */ - - return pb_write(stream, buffer, i); -} -#endif - -bool checkreturn pb_encode_varint(pb_ostream_t *stream, pb_uint64_t value) -{ - pb_byte_t buffer[10]; - size_t i = 0; - - if (value <= 0x7F) - { - pb_byte_t v = (pb_byte_t)value; - return pb_write(stream, &v, 1); - } - - while (value) - { - buffer[i] = (pb_byte_t)((value & 0x7F) | 0x80); - value >>= 7; - i++; - } - buffer[i-1] &= 0x7F; /* Unset top bit on last byte */ - - return pb_write(stream, buffer, i); -} - -bool checkreturn pb_encode_svarint(pb_ostream_t *stream, pb_int64_t value) -{ - pb_uint64_t zigzagged; - if (value < 0) - zigzagged = ~((pb_uint64_t)value << 1); - else - zigzagged = (pb_uint64_t)value << 1; - - return pb_encode_varint(stream, zigzagged); -} - -bool checkreturn pb_encode_fixed32(pb_ostream_t *stream, const void *value) -{ - uint32_t val = *(const uint32_t*)value; - pb_byte_t bytes[4]; - bytes[0] = (pb_byte_t)(val & 0xFF); - bytes[1] = (pb_byte_t)((val >> 8) & 0xFF); - bytes[2] = (pb_byte_t)((val >> 16) & 0xFF); - bytes[3] = (pb_byte_t)((val >> 24) & 0xFF); - return pb_write(stream, bytes, 4); -} - -#ifndef PB_WITHOUT_64BIT -bool checkreturn pb_encode_fixed64(pb_ostream_t *stream, const void *value) -{ - uint64_t val = *(const uint64_t*)value; - pb_byte_t bytes[8]; - bytes[0] = (pb_byte_t)(val & 0xFF); - bytes[1] = (pb_byte_t)((val >> 8) & 0xFF); - bytes[2] = (pb_byte_t)((val >> 16) & 0xFF); - bytes[3] = (pb_byte_t)((val >> 24) & 0xFF); - bytes[4] = (pb_byte_t)((val >> 32) & 0xFF); - bytes[5] = (pb_byte_t)((val >> 40) & 0xFF); - bytes[6] = (pb_byte_t)((val >> 48) & 0xFF); - bytes[7] = (pb_byte_t)((val >> 56) & 0xFF); - return pb_write(stream, bytes, 8); -} -#endif - -bool checkreturn pb_encode_tag(pb_ostream_t *stream, pb_wire_type_t wiretype, uint32_t field_number) -{ - pb_uint64_t tag = ((pb_uint64_t)field_number << 3) | wiretype; - return pb_encode_varint(stream, tag); -} - -bool checkreturn pb_encode_tag_for_field(pb_ostream_t *stream, const pb_field_t *field) -{ - pb_wire_type_t wiretype; - switch (PB_LTYPE(field->type)) - { - case PB_LTYPE_VARINT: - case PB_LTYPE_UVARINT: - case PB_LTYPE_SVARINT: - wiretype = PB_WT_VARINT; - break; - - case PB_LTYPE_FIXED32: - wiretype = PB_WT_32BIT; - break; - - case PB_LTYPE_FIXED64: - wiretype = PB_WT_64BIT; - break; - - case PB_LTYPE_BYTES: - case PB_LTYPE_STRING: - case PB_LTYPE_SUBMESSAGE: - case PB_LTYPE_FIXED_LENGTH_BYTES: - wiretype = PB_WT_STRING; - break; - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } - - return pb_encode_tag(stream, wiretype, field->tag); -} - -bool checkreturn pb_encode_string(pb_ostream_t *stream, const pb_byte_t *buffer, size_t size) -{ - if (!pb_encode_varint(stream, (pb_uint64_t)size)) - return false; - - return pb_write(stream, buffer, size); -} - -bool checkreturn pb_encode_submessage(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct) -{ - /* First calculate the message size using a non-writing substream. */ - pb_ostream_t substream = PB_OSTREAM_SIZING; - size_t size; - bool status; - - if (!pb_encode(&substream, fields, src_struct)) - { -#ifndef PB_NO_ERRMSG - stream->errmsg = substream.errmsg; -#endif - return false; - } - - size = substream.bytes_written; - - if (!pb_encode_varint(stream, (pb_uint64_t)size)) - return false; - - if (stream->callback == NULL) - return pb_write(stream, NULL, size); /* Just sizing */ - - if (stream->bytes_written + size > stream->max_size) - PB_RETURN_ERROR(stream, "stream full"); - - /* Use a substream to verify that a callback doesn't write more than - * what it did the first time. */ - substream.callback = stream->callback; - substream.state = stream->state; - substream.max_size = size; - substream.bytes_written = 0; -#ifndef PB_NO_ERRMSG - substream.errmsg = NULL; -#endif - - status = pb_encode(&substream, fields, src_struct); - - stream->bytes_written += substream.bytes_written; - stream->state = substream.state; -#ifndef PB_NO_ERRMSG - stream->errmsg = substream.errmsg; -#endif - - if (substream.bytes_written != size) - PB_RETURN_ERROR(stream, "submsg size changed"); - - return status; -} - -/* Field encoders */ - -static bool checkreturn pb_enc_varint(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - pb_int64_t value = 0; - - if (field->data_size == sizeof(int_least8_t)) - value = *(const int_least8_t*)src; - else if (field->data_size == sizeof(int_least16_t)) - value = *(const int_least16_t*)src; - else if (field->data_size == sizeof(int32_t)) - value = *(const int32_t*)src; - else if (field->data_size == sizeof(pb_int64_t)) - value = *(const pb_int64_t*)src; - else - PB_RETURN_ERROR(stream, "invalid data_size"); - -#ifdef PB_WITHOUT_64BIT - if (value < 0) - return pb_encode_negative_varint(stream, (pb_uint64_t)value); - else -#endif - return pb_encode_varint(stream, (pb_uint64_t)value); -} - -static bool checkreturn pb_enc_uvarint(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - pb_uint64_t value = 0; - - if (field->data_size == sizeof(uint_least8_t)) - value = *(const uint_least8_t*)src; - else if (field->data_size == sizeof(uint_least16_t)) - value = *(const uint_least16_t*)src; - else if (field->data_size == sizeof(uint32_t)) - value = *(const uint32_t*)src; - else if (field->data_size == sizeof(pb_uint64_t)) - value = *(const pb_uint64_t*)src; - else - PB_RETURN_ERROR(stream, "invalid data_size"); - - return pb_encode_varint(stream, value); -} - -static bool checkreturn pb_enc_svarint(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - pb_int64_t value = 0; - - if (field->data_size == sizeof(int_least8_t)) - value = *(const int_least8_t*)src; - else if (field->data_size == sizeof(int_least16_t)) - value = *(const int_least16_t*)src; - else if (field->data_size == sizeof(int32_t)) - value = *(const int32_t*)src; - else if (field->data_size == sizeof(pb_int64_t)) - value = *(const pb_int64_t*)src; - else - PB_RETURN_ERROR(stream, "invalid data_size"); - - return pb_encode_svarint(stream, value); -} - -static bool checkreturn pb_enc_fixed64(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - PB_UNUSED(field); -#ifndef PB_WITHOUT_64BIT - return pb_encode_fixed64(stream, src); -#else - PB_UNUSED(src); - PB_RETURN_ERROR(stream, "no 64bit support"); -#endif -} - -static bool checkreturn pb_enc_fixed32(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - PB_UNUSED(field); - return pb_encode_fixed32(stream, src); -} - -static bool checkreturn pb_enc_bytes(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - const pb_bytes_array_t *bytes = NULL; - - bytes = (const pb_bytes_array_t*)src; - - if (src == NULL) - { - /* Treat null pointer as an empty bytes field */ - return pb_encode_string(stream, NULL, 0); - } - - if (PB_ATYPE(field->type) == PB_ATYPE_STATIC && - PB_BYTES_ARRAY_T_ALLOCSIZE(bytes->size) > field->data_size) - { - PB_RETURN_ERROR(stream, "bytes size exceeded"); - } - - return pb_encode_string(stream, bytes->bytes, bytes->size); -} - -static bool checkreturn pb_enc_string(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - size_t size = 0; - size_t max_size = field->data_size; - const char *p = (const char*)src; - - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - max_size = (size_t)-1; - - if (src == NULL) - { - size = 0; /* Treat null pointer as an empty string */ - } - else - { - /* strnlen() is not always available, so just use a loop */ - while (size < max_size && *p != '\0') - { - size++; - p++; - } - } - - return pb_encode_string(stream, (const pb_byte_t*)src, size); -} - -static bool checkreturn pb_enc_submessage(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - if (field->ptr == NULL) - PB_RETURN_ERROR(stream, "invalid field descriptor"); - - return pb_encode_submessage(stream, (const pb_field_t*)field->ptr, src); -} - -static bool checkreturn pb_enc_fixed_length_bytes(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - return pb_encode_string(stream, (const pb_byte_t*)src, field->data_size); -} - diff --git a/assign5/openTok/Pods/nanopb/pb_encode.h b/assign5/openTok/Pods/nanopb/pb_encode.h deleted file mode 100644 index 8bf78dd..0000000 --- a/assign5/openTok/Pods/nanopb/pb_encode.h +++ /dev/null @@ -1,170 +0,0 @@ -/* pb_encode.h: Functions to encode protocol buffers. Depends on pb_encode.c. - * The main function is pb_encode. You also need an output stream, and the - * field descriptions created by nanopb_generator.py. - */ - -#ifndef PB_ENCODE_H_INCLUDED -#define PB_ENCODE_H_INCLUDED - -#include "pb.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Structure for defining custom output streams. You will need to provide - * a callback function to write the bytes to your storage, which can be - * for example a file or a network socket. - * - * The callback must conform to these rules: - * - * 1) Return false on IO errors. This will cause encoding to abort. - * 2) You can use state to store your own data (e.g. buffer pointer). - * 3) pb_write will update bytes_written after your callback runs. - * 4) Substreams will modify max_size and bytes_written. Don't use them - * to calculate any pointers. - */ -struct pb_ostream_s -{ -#ifdef PB_BUFFER_ONLY - /* Callback pointer is not used in buffer-only configuration. - * Having an int pointer here allows binary compatibility but - * gives an error if someone tries to assign callback function. - * Also, NULL pointer marks a 'sizing stream' that does not - * write anything. - */ - int *callback; -#else - bool (*callback)(pb_ostream_t *stream, const pb_byte_t *buf, size_t count); -#endif - void *state; /* Free field for use by callback implementation. */ - size_t max_size; /* Limit number of output bytes written (or use SIZE_MAX). */ - size_t bytes_written; /* Number of bytes written so far. */ - -#ifndef PB_NO_ERRMSG - const char *errmsg; -#endif -}; - -/*************************** - * Main encoding functions * - ***************************/ - -/* Encode a single protocol buffers message from C structure into a stream. - * Returns true on success, false on any failure. - * The actual struct pointed to by src_struct must match the description in fields. - * All required fields in the struct are assumed to have been filled in. - * - * Example usage: - * MyMessage msg = {}; - * uint8_t buffer[64]; - * pb_ostream_t stream; - * - * msg.field1 = 42; - * stream = pb_ostream_from_buffer(buffer, sizeof(buffer)); - * pb_encode(&stream, MyMessage_fields, &msg); - */ -bool pb_encode(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct); - -/* Same as pb_encode, but prepends the length of the message as a varint. - * Corresponds to writeDelimitedTo() in Google's protobuf API. - */ -bool pb_encode_delimited(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct); - -/* Same as pb_encode, but appends a null byte to the message for termination. - * NOTE: This behaviour is not supported in most other protobuf implementations, so pb_encode_delimited() - * is a better option for compatibility. - */ -bool pb_encode_nullterminated(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct); - -/* Encode the message to get the size of the encoded data, but do not store - * the data. */ -bool pb_get_encoded_size(size_t *size, const pb_field_t fields[], const void *src_struct); - -/************************************** - * Functions for manipulating streams * - **************************************/ - -/* Create an output stream for writing into a memory buffer. - * The number of bytes written can be found in stream.bytes_written after - * encoding the message. - * - * Alternatively, you can use a custom stream that writes directly to e.g. - * a file or a network socket. - */ -pb_ostream_t pb_ostream_from_buffer(pb_byte_t *buf, size_t bufsize); - -/* Pseudo-stream for measuring the size of a message without actually storing - * the encoded data. - * - * Example usage: - * MyMessage msg = {}; - * pb_ostream_t stream = PB_OSTREAM_SIZING; - * pb_encode(&stream, MyMessage_fields, &msg); - * printf("Message size is %d\n", stream.bytes_written); - */ -#ifndef PB_NO_ERRMSG -#define PB_OSTREAM_SIZING {0,0,0,0,0} -#else -#define PB_OSTREAM_SIZING {0,0,0,0} -#endif - -/* Function to write into a pb_ostream_t stream. You can use this if you need - * to append or prepend some custom headers to the message. - */ -bool pb_write(pb_ostream_t *stream, const pb_byte_t *buf, size_t count); - - -/************************************************ - * Helper functions for writing field callbacks * - ************************************************/ - -/* Encode field header based on type and field number defined in the field - * structure. Call this from the callback before writing out field contents. */ -bool pb_encode_tag_for_field(pb_ostream_t *stream, const pb_field_t *field); - -/* Encode field header by manually specifing wire type. You need to use this - * if you want to write out packed arrays from a callback field. */ -bool pb_encode_tag(pb_ostream_t *stream, pb_wire_type_t wiretype, uint32_t field_number); - -/* Encode an integer in the varint format. - * This works for bool, enum, int32, int64, uint32 and uint64 field types. */ -#ifndef PB_WITHOUT_64BIT -bool pb_encode_varint(pb_ostream_t *stream, uint64_t value); -#else -bool pb_encode_varint(pb_ostream_t *stream, uint32_t value); -#endif - -/* Encode an integer in the zig-zagged svarint format. - * This works for sint32 and sint64. */ -#ifndef PB_WITHOUT_64BIT -bool pb_encode_svarint(pb_ostream_t *stream, int64_t value); -#else -bool pb_encode_svarint(pb_ostream_t *stream, int32_t value); -#endif - -/* Encode a string or bytes type field. For strings, pass strlen(s) as size. */ -bool pb_encode_string(pb_ostream_t *stream, const pb_byte_t *buffer, size_t size); - -/* Encode a fixed32, sfixed32 or float value. - * You need to pass a pointer to a 4-byte wide C variable. */ -bool pb_encode_fixed32(pb_ostream_t *stream, const void *value); - -#ifndef PB_WITHOUT_64BIT -/* Encode a fixed64, sfixed64 or double value. - * You need to pass a pointer to a 8-byte wide C variable. */ -bool pb_encode_fixed64(pb_ostream_t *stream, const void *value); -#endif - -/* Encode a submessage field. - * You need to pass the pb_field_t array and pointer to struct, just like - * with pb_encode(). This internally encodes the submessage twice, first to - * calculate message size and then to actually write it out. - */ -bool pb_encode_submessage(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif diff --git a/assign5/openTok/openTok.xcodeproj/project.pbxproj b/assign5/openTok/openTok.xcodeproj/project.pbxproj deleted file mode 100644 index 6b18bf9..0000000 --- a/assign5/openTok/openTok.xcodeproj/project.pbxproj +++ /dev/null @@ -1,429 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 51; - objects = { - -/* Begin PBXBuildFile section */ - 3E97DADC849CA11FF96930AA /* Pods_openTok.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0FB7AD07E0564CB6A5002A42 /* Pods_openTok.framework */; }; - 98027A882459E5D700A5E1D2 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98027A872459E5D700A5E1D2 /* AppDelegate.swift */; }; - 98027A8A2459E5D700A5E1D2 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98027A892459E5D700A5E1D2 /* SceneDelegate.swift */; }; - 98027A8C2459E5D700A5E1D2 /* MainController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98027A8B2459E5D700A5E1D2 /* MainController.swift */; }; - 98027A8F2459E5D700A5E1D2 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 98027A8D2459E5D700A5E1D2 /* Main.storyboard */; }; - 98027A912459E5D900A5E1D2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 98027A902459E5D900A5E1D2 /* Assets.xcassets */; }; - 98027A942459E5D900A5E1D2 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 98027A922459E5D900A5E1D2 /* LaunchScreen.storyboard */; }; - 98027A9C2459E6E100A5E1D2 /* PlayerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98027A9B2459E6E100A5E1D2 /* PlayerController.swift */; }; - 98027A9E2459E7A300A5E1D2 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 98027A9D2459E7A300A5E1D2 /* GoogleService-Info.plist */; }; - 98027AA02459EA3000A5E1D2 /* URLController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98027A9F2459EA3000A5E1D2 /* URLController.swift */; }; - 98027AA4245A89D200A5E1D2 /* RecordViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98027AA3245A89D200A5E1D2 /* RecordViewController.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 0FB7AD07E0564CB6A5002A42 /* Pods_openTok.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_openTok.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 918B4F0FA2B1B11665C64B57 /* Pods-openTok.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-openTok.debug.xcconfig"; path = "Target Support Files/Pods-openTok/Pods-openTok.debug.xcconfig"; sourceTree = "<group>"; }; - 97FF972675787B80913A44EA /* Pods-openTok.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-openTok.release.xcconfig"; path = "Target Support Files/Pods-openTok/Pods-openTok.release.xcconfig"; sourceTree = "<group>"; }; - 98027A842459E5D700A5E1D2 /* openTok.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = openTok.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 98027A872459E5D700A5E1D2 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; - 98027A892459E5D700A5E1D2 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; }; - 98027A8B2459E5D700A5E1D2 /* MainController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainController.swift; sourceTree = "<group>"; }; - 98027A8E2459E5D700A5E1D2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; }; - 98027A902459E5D900A5E1D2 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; - 98027A932459E5D900A5E1D2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; - 98027A952459E5D900A5E1D2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; - 98027A9B2459E6E100A5E1D2 /* PlayerController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerController.swift; sourceTree = "<group>"; }; - 98027A9D2459E7A300A5E1D2 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "openTok/GoogleService-Info.plist"; sourceTree = "<group>"; }; - 98027A9F2459EA3000A5E1D2 /* URLController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLController.swift; sourceTree = "<group>"; }; - 98027AA3245A89D200A5E1D2 /* RecordViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordViewController.swift; sourceTree = "<group>"; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 98027A812459E5D700A5E1D2 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 3E97DADC849CA11FF96930AA /* Pods_openTok.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 1465430F298A29CF1C1109AE /* Pods */ = { - isa = PBXGroup; - children = ( - 918B4F0FA2B1B11665C64B57 /* Pods-openTok.debug.xcconfig */, - 97FF972675787B80913A44EA /* Pods-openTok.release.xcconfig */, - ); - path = Pods; - sourceTree = "<group>"; - }; - 44F754585789A8803EAF1FE4 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 0FB7AD07E0564CB6A5002A42 /* Pods_openTok.framework */, - ); - name = Frameworks; - sourceTree = "<group>"; - }; - 98027A7B2459E5D700A5E1D2 = { - isa = PBXGroup; - children = ( - 98027A9D2459E7A300A5E1D2 /* GoogleService-Info.plist */, - 98027A862459E5D700A5E1D2 /* openTok */, - 98027A852459E5D700A5E1D2 /* Products */, - 1465430F298A29CF1C1109AE /* Pods */, - 44F754585789A8803EAF1FE4 /* Frameworks */, - ); - sourceTree = "<group>"; - }; - 98027A852459E5D700A5E1D2 /* Products */ = { - isa = PBXGroup; - children = ( - 98027A842459E5D700A5E1D2 /* openTok.app */, - ); - name = Products; - sourceTree = "<group>"; - }; - 98027A862459E5D700A5E1D2 /* openTok */ = { - isa = PBXGroup; - children = ( - 98027A8B2459E5D700A5E1D2 /* MainController.swift */, - 98027A9F2459EA3000A5E1D2 /* URLController.swift */, - 98027A9B2459E6E100A5E1D2 /* PlayerController.swift */, - 98027A872459E5D700A5E1D2 /* AppDelegate.swift */, - 98027A892459E5D700A5E1D2 /* SceneDelegate.swift */, - 98027A8D2459E5D700A5E1D2 /* Main.storyboard */, - 98027AA3245A89D200A5E1D2 /* RecordViewController.swift */, - 98027A902459E5D900A5E1D2 /* Assets.xcassets */, - 98027A922459E5D900A5E1D2 /* LaunchScreen.storyboard */, - 98027A952459E5D900A5E1D2 /* Info.plist */, - ); - path = openTok; - sourceTree = "<group>"; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 98027A832459E5D700A5E1D2 /* openTok */ = { - isa = PBXNativeTarget; - buildConfigurationList = 98027A982459E5D900A5E1D2 /* Build configuration list for PBXNativeTarget "openTok" */; - buildPhases = ( - E99490D609B2651F57F987DB /* [CP] Check Pods Manifest.lock */, - 98027A802459E5D700A5E1D2 /* Sources */, - 98027A812459E5D700A5E1D2 /* Frameworks */, - 98027A822459E5D700A5E1D2 /* Resources */, - 702483BA42201BBF852D0828 /* [CP] Embed Pods Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = openTok; - productName = openTok; - productReference = 98027A842459E5D700A5E1D2 /* openTok.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 98027A7C2459E5D700A5E1D2 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 1140; - LastUpgradeCheck = 1140; - ORGANIZATIONNAME = "Pete Keleher"; - TargetAttributes = { - 98027A832459E5D700A5E1D2 = { - CreatedOnToolsVersion = 11.4.1; - }; - }; - }; - buildConfigurationList = 98027A7F2459E5D700A5E1D2 /* Build configuration list for PBXProject "openTok" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 98027A7B2459E5D700A5E1D2; - productRefGroup = 98027A852459E5D700A5E1D2 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 98027A832459E5D700A5E1D2 /* openTok */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 98027A822459E5D700A5E1D2 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 98027A942459E5D900A5E1D2 /* LaunchScreen.storyboard in Resources */, - 98027A9E2459E7A300A5E1D2 /* GoogleService-Info.plist in Resources */, - 98027A912459E5D900A5E1D2 /* Assets.xcassets in Resources */, - 98027A8F2459E5D700A5E1D2 /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 702483BA42201BBF852D0828 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-openTok/Pods-openTok-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-openTok/Pods-openTok-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-openTok/Pods-openTok-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - E99490D609B2651F57F987DB /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-openTok-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 98027A802459E5D700A5E1D2 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 98027A8C2459E5D700A5E1D2 /* MainController.swift in Sources */, - 98027A882459E5D700A5E1D2 /* AppDelegate.swift in Sources */, - 98027A9C2459E6E100A5E1D2 /* PlayerController.swift in Sources */, - 98027AA4245A89D200A5E1D2 /* RecordViewController.swift in Sources */, - 98027AA02459EA3000A5E1D2 /* URLController.swift in Sources */, - 98027A8A2459E5D700A5E1D2 /* SceneDelegate.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 98027A8D2459E5D700A5E1D2 /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 98027A8E2459E5D700A5E1D2 /* Base */, - ); - name = Main.storyboard; - sourceTree = "<group>"; - }; - 98027A922459E5D900A5E1D2 /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 98027A932459E5D900A5E1D2 /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = "<group>"; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 98027A962459E5D900A5E1D2 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.4; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 98027A972459E5D900A5E1D2 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.4; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 98027A992459E5D900A5E1D2 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 918B4F0FA2B1B11665C64B57 /* Pods-openTok.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 2STLT7848V; - INFOPLIST_FILE = openTok/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = edu.maryland.cmsc436.spring2020.openTok; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 98027A9A2459E5D900A5E1D2 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 97FF972675787B80913A44EA /* Pods-openTok.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 2STLT7848V; - INFOPLIST_FILE = openTok/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = edu.maryland.cmsc436.spring2020.openTok; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 98027A7F2459E5D700A5E1D2 /* Build configuration list for PBXProject "openTok" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 98027A962459E5D900A5E1D2 /* Debug */, - 98027A972459E5D900A5E1D2 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 98027A982459E5D900A5E1D2 /* Build configuration list for PBXNativeTarget "openTok" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 98027A992459E5D900A5E1D2 /* Debug */, - 98027A9A2459E5D900A5E1D2 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 98027A7C2459E5D700A5E1D2 /* Project object */; -} diff --git a/assign5/openTok/openTok.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/assign5/openTok/openTok.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index c740a7c..0000000 --- a/assign5/openTok/openTok.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Workspace - version = "1.0"> - <FileRef - location = "self:openTok.xcodeproj"> - </FileRef> -</Workspace> diff --git a/assign5/openTok/openTok.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/assign5/openTok/openTok.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/assign5/openTok/openTok.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>IDEDidComputeMac32BitWarning</key> - <true/> -</dict> -</plist> diff --git a/assign5/openTok/openTok.xcodeproj/project.xcworkspace/xcuserdata/keleher.xcuserdatad/UserInterfaceState.xcuserstate b/assign5/openTok/openTok.xcodeproj/project.xcworkspace/xcuserdata/keleher.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 3bd5f5e0468ec8150d12aaf1ae717fc9c83d7f0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9289 zcmb_h33yZ0wqAQ@ZZn*doB~bKSZG10o#!&QO$vol3TaCjW7?j!p>0x<6bi^?tBA9r z4A*;cpe+K9i1R!v&R0Q2RB*b^2#R{2UZ=NCPLsC4^LzJw4?ml8&K}m<Yy8*Rja?nS zP&hmLO&~x)0ZLGT8Z;2skh)R~hI|44!c=dtsm+IPwW;AiS3_!`ak<zO4w->$+~MI& z)$ZBiYO%R=VA30)1znvx><x>I?BxzZJm_I0jDkcs2ht$}G9e4HAqR3H56Zy_E~tPR zFcT`F723cD%b^`QpcDKMfG$`8K?p$@*1%d|a2Z?<SHP8U6<iIQU>od!Ug(2<*bTSB zZE!o>0e8dw@Gv|J&%ulE4|pBkgty@k9D$?oF?<GJ!4L2w{0sgIet|!Ti6oFjl0+Qj zERsSdkaUtkibydjArr||;v_CoL8{4IQbXpE`D6iUAWO(nvWzs677`>O5+>bbCAolH zNH&m*$VPH0xf<>wo5(h@o!m@zk-Nw~@&I{^>?bdf1LPn%LXMIT$miq>@+J9&{7QZ! zzmq>GP(mqHP#uk<9OY>uwbEodj;7OWT1boNL^_q0(R#XoHqeE15nW7|(4}-4ZKlg< zn0C{ZbQN7o89kp~N-v|A(<|te^eTESy^j8k{+-@M_tCrQJ@j6BAHAPGKp&(J(TC|H z^ild4eVjf)pP?_(SLy3@ss8Scj)PzTBba~#3yfG$?api$SBDni?|{ndQ=2-xp-><2 zU}lsl`apmLreu9A-NU7p<`=sPib`A=xfO*48TqBTWf{eJg=HBfC508GMJ|`CxV+fI z36)OQf<Ul6)a7jwoq?wAPSGEZ61Kt^NZSoIutO3!;4Dan(M-kEOvAKH$KqK0Zb*St z7z^WY%6J&d^vuAr*bbbMhQGPXq}_e~=D@0optn=>a8rkptMxXP2mIk+prb<!dWv&$ zvvXYe$giv1nUP;n>dYw1D=*2&&dDn&&o0U-E-ZC<xN)%^adnwDxWF5#_l10o9pVCC zxXtbJw|0m);^D>*r6lv<sdmp7L*YQsi_;@6;q->R9_}ohTG|vwpNdIhIBQ(uAk{#i zqtP3zj8gS*qXx$!91R^>yEdmNJ3TqSU|o9h+MN7sd@d=>UbikP;Cz?_X}h2R3ZV#! zp#&x}BQr6M@yyIDyI?X3bt+85zokq-k^Y5UjDK%nxl56#tJ#NVDGiEv1P<TbZGlzQ z-j%*qFMjrL=@MU2%?>+{Qw;f9{nA1=hMRD`Ph2JM5L-Qb)4H$^r}@N?Jgd?l>cWU4 zla8Kb7BoQG9WWcJU=CEnT&RJ0Fdy7d3w2Nr3s?dh!A7!CERk86joDcebFi~mG8=sd zEQCd{7?!|N$%Nosd~Sp$Xhw4y!}3@@D`15Yb1KH?66RvdCDZb7yi;uKZfzBVLr#$_ z3uR7sN7&beN|w%76ZCa@gR85&s{`F(50_gewgiIW9B+@W)3-(}4|H~UgT7F}KPS*E zdg?-AaKNAjw!*KA1|L0KvRmxH<BQFM@{f?I^f!w=HQsQWq#H>W@;J&&dWrHXOE%dl zws?`p8Y!lS!sv4I#jc<j!Ut~{gM4UNl)dJNoqD*GF8LHuqLCEPJbaahONb5+s5Y_~ z)n-AK21rI2k+~TEr;_l6Vmw5Z+zqQBtru3ZlwRmzsj?F4Yh&`S42zwi1Cf|@9<1+! zb?_H9mSwP<=mzJ*MKGctE`SSR0~^QAX5;%|BWnE;HUTw!4ohF^tgo$XMltwWd}45k z^fu^e9KK4%I>+1U_l3Kg#f5k*`NX=E>ArJ8`gZ`XfoowiY*{2nM?c1$2KiA8Eva@p zedy@{KN>_I&f3~g?VcM+pivh83foU(@p?4N8(AirUA7cjO%Z9zwkJtan=*aLlS7E_ zgqxRDyXSO=r8rX>40>1h!%o-*TQP=5US%Hlz%8hm*u+7``eBd6nujwF*ld;960Qx* z_qDc#Im`wJ;ZE3#dEqWhvir~vs@*Z$s}lXK;Wo6nA>Zn~9o-^FSdmQj9=Lb$kkLN4 z54H~d5EaA&@F1k^*uiq&f=A#{B=;CR4o|?7@Dw}^&mf6twx|j;MT~aYpyDJqh|K8p z`uu~RJs3zOFPYmCT{}3&O4%glWE0tR50}-@gkG14VwNKkicvBxXF%F6GZxg`;b3=D zxH~AyCigtN&<p$7WH#*}yaX>J$FE>0d2P`kjk*YRHU;Cz)CGYq(O(;Amxb~M9Pn^< zBq-x1IY9(5n+!<S7wki^qe}jCj=a|{c&ks+wq^Yv^1p-d4l;8X-i7zz{l(1#Nw#i& z)xxl^6BClRvx}9nat3(v7GH-rF)J%eibJ8Sb__LbVlZof*XVC%k0hV2U|_jS@dNk} zEeX9ND%Pk<`rspp=`#(<D?fpM%Bgagpa+F8Jizq9r_y#(YW-i$m-X^FtnY;{SjAu% z_!>?~K6VTf#c?(Rlfuk?_!f0_l2xK=X0i0elDcR6{LP4Ek$u_6XJVub1Xp8BYih@s zW{S@7$ip(RpCn>Gv)L@?0Q`zl{|$b}6y4Mv3}R3jwvV)&RWaW?1PCFND8NLNL`Bp@ zL$pLk;z&F`8Hf?BHmb8>r>>45n$eQRBpgw@x=YLqg(agIE;VEobsQE49o)m&{E<XG zVA!Y5=ZB3-bcR|Du8#8K>cQM0RRx1K&RSU=t7mgq8$P*N%MkA+9N{JJB?6nzsw2)e zFCsNE0$qoUWOHM#L#&ePu$rNsa%Ov$E%zWvMe&V=_sQAtt^`#Zy&(~!N@h^(z~Hb_ zWWZ`!S;Xi_8abz~+Ku+#N75vF8rc-+%=C6)zLpI;Q?hJKu>+BaWRhG+>nB+xo8+(s ztbr};CwU~F6tG3CnTb*wN{>X0yc&6-tmkN+KGiAEcFr`tCMd4-1-e7E-e9XZU@GMj zzDCe_hTT2#x1qCTSx%B<IhieH)7~W0(Cg9n$#ham%1HUbPy{-lzSuIhlr3RR|GCGf zls=t)^2C&NB~j_jAhRH?kIW>M%)`#@BeO{r^Rh;kTQ7^DUS<)q$>|&q3xdQ=YCT-i zu(O^jyM9tf>Ls21`Lr{KoHMczJ;p+^NKQ8%t|-Dn<}gOw-CbRQU^r7gQ<SaYbB3SB zL(Y}Uo723$k9egcNTttdW3q)dk!A!_r;bM=PahGb#b+Lj9;TIaK-x~yMto#BX=m-M zgLN|hPSQ#IBtW`YfOWG~tcT?`NU2@IGz%lyU3yw1C;bQ-jgX1Ks~B{Pl37L0lgRXt z)npA>%evSK7G$BFh*lPp^)MdsN<IrCutEp1)g#E2(i*}kag~HfL-W0>BG3R0+&X-8 z0N}ctFz+DX9X1$Qj+($CqABR>!ibFPM+}=1*<A{UvO`=9FYJ&4OQe`3mys(FLz2tc z%3fHE{7FC_tH4m8L#*(1gvFqA@aW`g$mS^EBwN^OmMic0R|J>jI`TKRhMgD7D&%^y z<5c8E+F(5CNBO6*wJbel`r70OOp9*6o7{HV3Lmbx6ZMtG)<sru!&cl)?u{{YA6p+~ z=s{TDPaYx<lSde17qAV3Og&DXK9vL(dgIA+SmLFz^Cc21A`}o_$O3wiyn5P-0$lMr zmWFBULTSb2!;kSMdFRv><S?#yk6nZ-HcF6Hst;pjoP=3Zrgu#rcCru2CsG*sh<wa0 zVVCxikIAR(Qg&HHKha1kr@u&bnJoJ#Zado-&WsIY#xPm*IA4*I*h3&+lVju?a-5tX z-;(dx<?IS}CA*4U%{H-Xc9ZX6Ecp?wb}adc{LHRJyWNccXR*Jr?Q#!cpdy=(NkN8S z?(#Y4jp6Q)Y%`d1U4F^B(QPAc-P7eopxG?t_)u+7L@OSRtm1k^0ny-b`cetlI9FrE z;A@f^6F7H9FwotFJ%)1ZQFyyTVsqJQ37N??KvXO;0jb`O$-y<00lCbIk&~wjYu92o zAX{n-<QC<mCl?nM#QFkMN!2i-m#Wy7UaDbRqeX}8uBDL^4ak?qQv+Hg)w6BA)X4tI za-&f&I>Ag6P_fj4Y2iB7h!50)57)8Wn&=E0O^Q)-u)nkP=)h>265Cr^lp7s5n@)(W zNMqLzuE?O7aukow%%OSG7P;)kUYgHtlFVszH%bt*ZHtJYthpSKQ7gi_K`7&tOGsJ_ z>vtfGqm#fyC(|hss%S=>HJ4XzYmBx@2~{XnYR$O+YkTwq&ZO1F#p?}56UUn^Lc)lV zqY|w)yUlS{^5`)ssbiN`yN5KekcV1dxC70J$7Yf|Ah(pnAU5W(%TgwF4{%y#2%&2| zqMXV~C)SviSWNr;k-DtH7Yt#!AL<IAg$5BLML>oOCb`(IauNvPusgiE1G^QWc1)^K znz0h7(kYXj5$uZ4K@KXLd$9VHd8_X3Y!rixFa=X<b&Tq;bEjl+oC&*l0tbAZu$N0X zd;Em7bJ8<13koMYXU(pfTUWne(Nehs>ERsMz)CL8OO~2f$tAhD$=Uc{Zb4x-e#t3H zu1AI^=H;V221=B{(gd?TdPIy<nV}jvb4Fcou>E&1D?2AQFMpt=*{}++e_&Om6WzHh z)*~4La&<g;hG`?zbMg-q6_-prQ@M}qSGxy$EOnJGzf?G3+XQV-^f!rpC6fjl08^%B zO)D*z%<PmtYwvUx-&=-#Im<y;Mb?a&l~_@rUYanj_+>rS)m1t%@?jXlQx6|<V~;7) z7R5RuH76&}SyAXL&2X0Fy08<QUz$-|QkIk9EH5q0$u27@aFv!USu2S*9p#&!y$+8y zryA8clvv-KNe64@WzBaZT1$*-TINF*@<6Zktl?urw}{M;+l+XY|EWufd3{Kb8el4? zXr07W!@`)6$)x)lCgJDBONO^t7EfB1-BZ*e7Up_$3W^H~vhg~C2P^iBC*X}k5#BN^ zhaS91*aA1<t-+n}09NjA!<X<Q7GERq9v~Ajf35`eNnzwBU=o=^rXiRv$J+n|zS#S3 z!#@8evNMu>50Jy;L-Hl|@F`VM4K-r0bI`NtOgfv^VyC`|`e_#pVxN8`?V;<jAHNs- z@%Laa{(br-Jx+g9fI_24QMeQ{6qSnEiWbFs#RkP@#Wuxu#U90Nk$j2w1M)8{8~7dg zQ9R6gBj}M%qth{L4D^4b(y$*tmBLmG2hv+KG?vpUNZUi5)I}@k3}mvB&Z4tfKikP} zX1myKwujxqZruapX*HcoYv?>WpSo!+ru5s`BkXbZ8v6%(gB_4Us!)b0y}c{o^M^x` zPBsQrOoi5go}Y|zrGzPlDgr^Qyh2OlhPS(^O_cibg8Vwa+mE;|?DIz&I+*36jw&0L zgcRi`sg31t#if`|r7moxza@avqZu(aeUzMXhog3hepCn^>c#v(jI5=XHnQ6XQ;bMk zr2zwT_tG|Y$KXIa4PZ4$J7_2Mvpd;dc2_?tbp;Kwee5Cjuq2K%m3L9rq9=;BNbpQ& zn*RS(4bmR02I*>c_mFCko=4ZgyQG}m%kIJIxoM!HYiy6o<N|t;l(8?Q8`yp9{yw^q zUd$d~5B^6L-JjK3^lG|kc$VHww@UeZ3wyMeZex#OA2tGJI`Ni73Tmf9itY4f7;y`| zp58!jq&LwWw3qhLe!7!A!JcGKv8UNH>{<34d!FsTh3=A?`t%lhE4_{0PVc~~<OQ_g zEcPOMiM`BTVXxv_`oeIe=yp42FY<+49lloSLI=Z-{Mm_xd6QTfTHwQOf+!W_Tx@=% z@bDul6o$@?Di@_7e~xst!U!L+TNwK&?^}UzuLHYG2}3uKija<S{Bs%;n6fbNhjGB- z>uL-5@h+va8+#mqU`}2pCPLFGU-8bXd1bgca)gXi#wHe(xyoH7h2<GV#ZJ8QD$dK# zD9+C>&TzT%a*OgyOL4rQzNfg*Q<z`xtC6TJl7Dh?(~Bdu5Pec=c=34s7j3fBXX*3k zInuXYx}Uv1P@~Y7ViV<sugUOA>ekaYq@D%38k>gkIT3ID(jf;X;>FWEyt`Qf%P^K2 z@E&vw&7k?TgifMU@D9|8VQVH0pm}aa_3xy+=pNMa?etE(<$QuZg?E|H(fxRz`7+*U z{(~M>oTZql2r0HI_9<Rbe6ILGNtB4)lp3W@8Lu=btxCJnp-fheQKl-#DaR`dm6ggK z<>ks7mHU*BD-SE*Qyx)%p!`VriSkqB=gKdYUn{>+o=|?L{9a{LaVoP)P>oQHQdw1Y zl|z-R8ly^8jZ=+RrKzT>ysB-gUe&Xz1FBEeTJ=cv6m^}tUA;}+uimBJqrOdjhkCF2 z8TBjbH`E8!Z>bNd|Ed03{f+vB`aAVc>VK<$RsXI5jZtIMWNL~vC7LqLY)!q!qv_DB z(5%s1thq|FNpr1ci)Op#2F*>HUQNH|KF$4_Cp0f;4rz{RKGU4gs<e9TXl;sitTtC$ zp<Sq5tX-;Y(FV1vv=?eOX|K^<tKFi#Mf<4sW$jVzzqP+=f7gMI>Xf=d-85a9&Z(== zxpm8Q&AJv{n{K%-s9UT1yY434<GTI2S9EXbKGq%A{iOT1?pNLKaoKStadYEp<Ce#T z;%<!Vk9#fdP~5w5@5ddD`#SDq+z)a8iu)<<k9ZQVh*!mH;w|wL;wQyB<7dQI#?Owg zjSs}Hh!4eYiN7oU&G^ssO8qE(s=iF`)K}<d>SyVz^ws(r{d|3^-luQZcj^QB75X*$ zb^7)C^YvHhH|ej{Z_!_`zgd5`{$Bn4`UmyT>0i|!*1xAeqW?huh5oqydxODXHH<c- z7{(gTHe?#I4Y`JVL!m)5Y%x4$c;4`$;bp_ChNFfr3||?J8IBviHI6Z!V=OjKF-|j< z8Y_%5jkAnZMz?X1F<@L}WX2uF-NyaKBgT`)KTOzRGbv0{OfFNkNi;1too~9#)Mwgl zdcyRI=`GVC(_zzlrX!}$OkbG3G95D=H+^gRnNx5^ZXB1#P3ER@)44Lv$<5*Ba`QMh zSH~^jy18q)`?%M*L)<&uyWHp8SKKk~1os{HJ+I*fek7mB+j$3{%unDm`D{Ly&*w|| znfxriim&GD_yznzelfq4Z{b7y8vZ=~FFfNf<}c+h=da|i=C9*#=J)Wo@^|oi`F;Gu z{8Rih{B!(%{zd+6{s{j8{}KNQ{}q3XKhA&4pX7frYt1Gz)+Xizv)$}4C!5EZQ_UIX ziRMysx!Gl&VXijUnCF{o&GlxVIcQ#Q-eBHnzQlZ``D*hu=FR5a=9kQe%%7RRFn?t} zW<GBI)_l_ZgGFIcSu_@%CEjANm@K@-Vi{v8wKQ1Hv+TA!WckAKhoBcs0xt-{2w{|v zCKL%1g~`G+p;RarW(y6%Qo$p5g%+VrST1x3ox&Pnov>cGK-eH`6gCUngzJRu!VSVr z!tKIdVV`iXaKG@N@SO0xuwQslcw0CuyeAwLJ`_GqP$!rYxCC>8Eg>cGvBW15Ur2mA z@kru76Th=ktJ12rYOQfrz13*ttY&M9b*%Ml>jdjL)(mTwHOHD~EwENueb$xME3G$K zAGN+_{nGj`>(AC-tiRj9Mr|gW*(TUV+7fLx+jv`+EytE;E3i$rO|?z8mD!xOkgd=5 zvh7XVA=_cwd$wb?<F;>YCv892ezV8fO?KXHv5&G_?RLAvKGvRYFSS?Nm)YCx9rjLp zz<!>6z5RUq2Kz?)CH8Ih8|}B*AGbegf7<@6{dxNf_LuCh*k7~1ZvVvosr_^Nm-esi z-`G#szq5aD|Iz+mNhC?1G&ZR?X>L+;((0sZl5S0UGU<TB;;=eKJJKBmj$+3|$7DyP sqsme3nCEai>Kw})UPqHdbod<s#|p<9$2!OQ0W3-fe%~C9MIGn=H&(=Sb^rhX diff --git a/assign5/openTok/openTok.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/xcschememanagement.plist b/assign5/openTok/openTok.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 94e415b..0000000 --- a/assign5/openTok/openTok.xcodeproj/xcuserdata/keleher.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>SchemeUserState</key> - <dict> - <key>openTok.xcscheme_^#shared#^_</key> - <dict> - <key>orderHint</key> - <integer>13</integer> - </dict> - </dict> -</dict> -</plist> diff --git a/assign5/openTok/openTok.xcworkspace/contents.xcworkspacedata b/assign5/openTok/openTok.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 3bf16d2..0000000 --- a/assign5/openTok/openTok.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Workspace - version = "1.0"> - <FileRef - location = "group:openTok.xcodeproj"> - </FileRef> - <FileRef - location = "group:Pods/Pods.xcodeproj"> - </FileRef> -</Workspace> diff --git a/assign5/openTok/openTok.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/assign5/openTok/openTok.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/assign5/openTok/openTok.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>IDEDidComputeMac32BitWarning</key> - <true/> -</dict> -</plist> diff --git a/assign5/openTok/openTok.xcworkspace/xcuserdata/keleher.xcuserdatad/UserInterfaceState.xcuserstate b/assign5/openTok/openTok.xcworkspace/xcuserdata/keleher.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 6c414a03f385b20527621de239c94a92db4b5d14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46383 zcmeEPcVHC7_urZAyCJz$dUB)^LPC0>rbDQKgkHiWxsZb-7w!@|vV$E^6al-Cpde8J zu^=dl*cB1!q9S&&V!?*W@6B%Zk`UzU_xqFoAY8JyJLS#HXWqP>d8M?r%Hghyk3Y;H z1~V+fF+3wMBBM+QpJR8q9nPAG;Wk%Ur31bdhu1l4CxkmoXWGl^+<pwYZheWxXJpYZ z`+R$OR&%1a8Htg{7S-A6>>AqY%Why)#*695bYeO)eVBMAfk|YNm}Dk}NoCTQbS8r- zV1_conBmL_W+XF;naY$g<;+Z`hH)}(rjD7%%x4xeS20VO>zHNC&CDuhEprdEo@rnn zVjgB5VYV=jGLJJ)F;6qkGJBa9nAey$nf=TO=3VAJ=6&WQ^8xcQ^A+<o^9^&B`I-5J z`IY&N`3qqrpx!7RC7=|Piu$5{Xb{RoxhM}6prL3a8ik5bF`9rTqN!*aDn(^z2C76= zs2a^iE;I+tMGMg)q#=UtM0cUP(LLy1bRSxW)}sd0h&G^2XbakkwxLJS6KDr|4(&nD zqrK<_^ak38-bA0G&(P=S3v?QNiM~Q#qi@i+=sWZy`W>CaEaoteJ78}diKB2&9F2S7 z7~C7j;yBy~$Kzz&5BJBpI1i7&BXI?ufh(~C&&0EE6|TlL*okX#9bSkR;cM`<_&R(& zz5(BYZ^fH&6MhIkj32>U@K(GHKZ>{G$M6pPEPf8Zf?vh2;n(p&d<cJqzsBF-Z}E5d z4E`SffPch4;j{QRmSGVqvkI%SUTgpx$i}j9Y#%nBO<)t*BsQ5%VN=;OwjZ0#=CH%q z;p_-@Bs-2B&pO#!b~fu`-E19O&(2}zvh&#a>|*vBb_IJAyM|rMZeh2w+t^3h?d)Uh z<Lndclk5)mDfSum1@;YgAA6WR!hXYk%YMh6VZUd8V1HzPV$ZTav%j$CILxt}%6V}e zxIiw5i{tum@mvCz$R%;fTnd-UrE%$8e=dg`#tr9+xv^X|SHn5ET5dMy;@n&vSI^Di z=5h<UrQ9-ZIk$pa&8^`c;kIyFxozB|+;;9U?s4u3?n!P3_cXVcdx3j{+sD1h?dOhi z$GGpfGu-#w58RL3PuyAVXYLp7SME3NPoCp>z60;g`|uXtm+#DX;S>2JKABJ9Q~5ML zozLL=^8NV!d?r7bAHo;%qxmuXBz`jQ=Ii)+ehxpEpU2PV7w`-DMf_r(@Hg<c@VD}J z@^|su`N#Oj`6u`%`5pXI{7!xs|1|#$zlVQ?f0aMLzs(=y5ApBv@9`h;pYfmbXZfG` zU-)17-}v7JPT&PW5Cuu_5(0!kAxP*bgbCq7gb*o22|a~qp_dRN^cLcU1R+gG7cztb zVW==n7%q$uMhc^ZLSce1QJ5r57N!VO1)ESR%n=p{3xy?uCR`(2E8Hk76K)n(3bzTX zg*${hg?okjgeQd^!c)RdVVCf<@Qkoqcvg5$*dx3sydmrp4hu(wqryqy1K}6pSK&9| zcj27yhw!KHmvCNWL?rT}m)Jq{7K6l&Vkglm_7F3~zG6SIzc@e~C=L=c#Vj#f%n=8R zBgIi-kvLhLB9@5LMVsglXNpV3tHo=?YsKrt>%|+y8^vYfa&d)ti+H<uhqzvB5F5oN z@geaA@kQ|^@n!K9@m29P@pbVHai936__lald`J9H{7C#*{6zdz{6_p%5+qTQBw11< zRq~QLNZyi<WRU`-u2Ps3E=5SOQk;}84VH#T1=3Jym^54(A&rzqNrh6eG+8Q>$|bv0 zA=OAu>3Zn~=|*Xpv|L&t-6Y*Ct(0z&Zk5(Z_el3j_emS2P11wXHtA7mhxC-RQ+i7} zAiXUelnzOUr6bZ&>6mm}dPh1Ty(_&Zy)T`VzK~8!UrJv|KT3Z}e@W+MMn*E0z2pwE zx9lT#mb=JZ<p?=a?j^^`1LZ+-rko{b%Q^C3d8j;09xfNk<K#*5RC%UcBRgfcTqn<y z=gW)btK_Bf)$;Z7a(RV(pS(_9FE_}I@&@^S`2l&Syi0ysen#FcKPx{c?~$LE-<0>u zZ^;Mbx8;xJPvlSK&*abLFXYqmm-1Kg_wo<&uL`3eMN~Q{{z_-1i(*y6l|&^;Nmf#n zeoB8OQ^`^WE5nq@$`oa)GEFH_rYkd*SxS{st;|+jid(5u7AOl9qAXReR<2Q2C^soL zE31_?%H7I6N~7|y@`$oU*{W<)9#x)Jo>6uyuPCo7uPL7^Unr-QFO{#9ua$3<Z<X(q zGs^eM56X|qPs;DgIh9crRaL#zAhn~~N$sq5QG?Y`HByaN6VwcKkeaDxsd;LFI#eC0 zj#7)%@#+M%LY<{LRkylWy-Ho8YAR8$Rc}=9RM)8wsGHSC)JN6r>XYg&^=b8xdRRT8 z9#xO2$JKY#6Y9I_d+Ph@hw2yV8TEVhH}!Y*oO<4i_44tuc=>wydHH*Vcv-!Ac!hd} zc}08m@{0FL@fzfn>6PU*%xk#U2(OW2!)xlRstz$77;nahu`vEj(D;!>akK36-IL&N z^O`&^ysXORb~iG<jGu-zwvh>70yU1{_q8P@mVkoXyzx%gEO)J~%%1BktFN}#)RkDm zQ<IW1GV-&MW3zMeGh&l-<C9{ubF=efb5b&Lk~311GSc!h%$mC};Y{3SrYqBp>COZ* zA&iyj!Gtnl8m|eOs7acvDVnNzX&p8*5lkc##q?yNnO;l`)0>Iayfq(!?;!YYf*&II z4TAR(yr1B=v@oD9+hw=Ss&zVQ>fBjnb&fe8L6nzRy5!m`Z1q)jdF75er%RVB-1$z| z*fGQ1Q}kr^qOwYRwH*pDzK*G{$+f%d95uE&kX}kG@xyKIx*TV9ZIvAgETlq>yAB#| zWXra>L3W|lIqK$*vDZ3X&?7!(=ZtsMlso6TfePa)%jL4w%z)Zz>T>O+^)m`;Dx8qK z$X*2!k-glLyweza8Kg02HVdO9%Vt0JWwMyKjZ8nLKQn+C$P8jKHH+q}`Dy-IfEKus z$!2nxTqcjnX9jCQT2C!i8%EF$f=<(}>OG;%S#FPm;T-0ui)&j;Tn;=M<E*MOt1Yoa zT`GAYmH&()N-SwcO8s|Iq031Hy`uVB+A9}U(<V)crSB!{u+Ol$>)j)rHTjMzd(nL8 z|LP)Vy{pVliS<<5+@6A(I=ia^Aevq8s4BO+F08o-a4^5rX>$QOV*f$4Ej5{)U&xGO z;vQf|Gh>({rkEM4b=10O-LzoM`T#SYnZQhBCNYz>P%T`G&?2=cE$k384Q5>lGo7(9 zrF7nv0&FJ3UzfcKU^d6DF<NJ>Q;B8Gyx4hkY+~sz7mPyRK4aYgxjwT1B9(SmA7`z- zrr0^l^S7|dHs9{ban{t))X-S>Tt`LSAa|Y3RX5yGV;_)^5Fe?3%W+l>NJxyd*OYti z!?k`lEz(^^v+EDiGn&7Rs;F?=>josn#UEtsOa(K8shni+hZ<Y8eS&dmcaI%e1juZJ z$Bqdji$>|fee3pC>uu{=V!7qNZQD49eeR`N)~aEtE$xb@m$X@l@Vup2=9lJH#U{kX zx2DpiQ`x=5vi85F@;{G2V(P_50PbIO1kzI4jzB_kTuN(N=jybETo$ynrZp+OrB_>M zO-^dvt!XB9n)@}iEvbuiQhStGR{!hWnvr<XUWMCcr<&cU!#XATf=<n#05F!rC5*<z ztzWN&89=|9xu(S8KeA{<eVwhe%AV^0_U^2)x#n+Ru4b-f98*RXwcInyxSqMeD8sz5 zoLSNK#!BXvwl{8LR=2%zJ98%!*TCGNMK>^aX)$g2#yY(#dzDxQRsa+1+o#We;0%ME z&KbZg?XEeFGJ7mtY2x&Eb(6kEW+M}~f!V;^&pe>@)?zjIvWa<+*{t=^60{V$P6Pu- zEh!vcP*hx!ms?OgYD`H{-tfGf;(}2lONQl5yjX&~358iBi#!Re?MfI|P*jjTJZ}sX zL(4d*%OhKvZR@pWHnW|13^*iRDd#sb+Zl(E;t6I)1M{Sos3jZUcQU)yYe~j<J;Ust z<{2$L;|As#BP-=w&oO&o#F_`Q$X>Sr?mW*pfN#MUSoRk#jPGrYU)<ZeFe4+iw>2#_ zY4KvSlU`(ArX%u_me#<$qGhxlk$w7zq?cIw{G$<x(>Z%BtcqsoZ!w3Nxciv{%-hUC z=8)D`>!<bC2HejaVU9A#nB&?&ZID)=4Q*Mn%{A3nZwp=aISyyNyV&NMVQ*f8bEy1g zuJCP>n^K0kun%{Z=^_p!H&*zz$xHO5F{#KgqsCD)!(8Dbjl0cjd-Gl6UTZR7{#+!x zF?6SxZ4JzaTBZh@MxQXBGM~ZH_&M_hbDH^bqFa}Q=&n(nqZ*_zTXpT^@@7dBRv9fv z%hs~AA^&}shh^=J9rSZtKhEs?Z<+6zxJKqX=8TrB<ux)tFh6Sf+F&hgoYAOpMsqIS zknzpSuz|ndnR6wU?rl2e!am->{K5RmIQ~;Is4aI~@r9X9lFuWi4ZlDv;@aL2QD-J@ ztHl>dNJa`$kr(QKypa#GAYbH%{80c3L_w${>ZA?VMrwuH7_C?vr%li%X;ZXm+H|c{ zE7vNtN^PcAMT_Zzx}t8VI|@c2$clQPP!xv3Q3Q%aQK%=1M!mEe?FQ{`?GbISc2xUP z`->nSf~*835tK{NID%#pw1l8l1Z`+DcTgXF?u;n0EH)R0a)%qBYp*V?nh(qkhQ4f8 zNrej}jX_nm`kJ!JBD<SzCyudK3`nc6r`RguQ%jTLbs3;+Rz6KQ#OAIXker;JkrAJq zlA4m5k&&E`k&+1O6)j9pV&*PQPPZjMx>n07O4dmlRbpB6Kay0MYO6@Km9`@(JxPB< zicd~YNlr{lNlDUIt_vxO&qydOx3!@tL#Jr;|K3TZiDe0i2}$iJYSl^UNogsm&`<3< zDK$C0G{v4C--e`tI!Q(U50d_-lTtF0lhaaR<kHj9(oz#MU~t-#lwvC_P0L7ZOHz(b z(%65Wq>RLbgp9<Lw8Ye;^wiYUg!Bwukh@^ufFxUDSzD5Z=p>E*_ep}$0uZGqB_^iF zr)MOjB*tG9-SD*Bp3r9CM(8BLn*F~{xW7YpYGPtidU6tsTxxnkN<v0LGRR%+CtQ3+ zN@-F>8<NK8Bu)N*kd&O3k)E8|8Yt~~Kt@Jde9A@Ool=^fP-ZJ{%LB&iBu)K)kn}h3 zPD)7103@ZPrY9z)q$S5E#e+QBu9pBy87V1cZF*^nPEyJLgQWPx44aL<4SDL*dnr97 zJw7ElBR&C$Nl1%N1yHq0Vsc7bMR`J6T3dMAbdqfU50cU{DoQghHE_^X8L0`W7l(IR zT17=hTUJ@2lT=n>x$0kL-U$hb8A&OrX&GrL>8Z&nX&D*m2^Z<6(nJ{8vbOl1rPBoa z6aV^@OHN2k%SZw2!_-TOPla*3I7wwGsYz|XRI8IT<A3iaSauW2fVH%$PX|*%S~8H6 zk(88}kd~g2mXw;Fe6en_m8K@!Q`-W(UZ)9Uqxt{#&?P1$()~vOcuHEr#pYWnaHaJ0 zwq3M9Cui3GK5Dj#1bc!lrCk@bEV^kai5aPh$w?O-wWRop^0c<#UZRs!{lAae-|_B* zq*RcRQed<)Qc_c4;8HW-ecr<+JUpPZv^2efj+*|yjFzICn7Af%HM#~}i>^c0qZ`nT zXc=0LR%lMGR-3K4G`Ci#)oXLKx!SxYbTeA1|Exl{q19*&T;HzE*B0wPS81AdjkXA` zuchxfU0QbA3^_c`^GZ-+>DK;XrE~5GM~$P}R$F4}anZ+gi!jFt$IrGIFcm{Cnx>#; zj>GMMcYSylYF`R$u{rDO^5(&=FO@(cP5V;noHO8UyF90o?(ag1u=e%ndr?L7U^~vK zZ>?RdE@Q{aNL2;<cYoLDtopi2rwb}--zRkIFyC2K4sUJx3m3W{UbxT$+5-B94ZHv7 zL1x?iXfuohe6)qo_w*BQ;Vg_~j_`K$7!w3LB1?=noNLjOjdbV3eEbx8nh9z|JJBwU zXiFQJO=vgl8eFX{nM`Res42J4v%9C6FK)x_H8bieeUTXU+!;pyXO{CKdWDwr5_(y? zPP@KUIb$oJ0T-5F=Gu?mq40YP9YAlRgXj=CjE<nA=omV#-KZ_omTN1to3xv?mD(-Z zt=g(4bixC_51Qfkv38pWerucIcjp!O!R~P@kp5fnJ4503y|&tf-%k{NX90fj(bfR; z=qKJ1ZVvAs=)3{0zW`jf11K;8aNVITxe!ntzHH8d1uW}0!V=)<uD{P>ruV^J072M- zeX$?*#{oDH2jPym6Yi|tqus0Br>)c0YYkeXwn4jJd!Pw-H4%iZ27++7w$X#2&CLjU z=n8@^3xaS0AP6UFo0<`XQvg9Y6|JEk?Lj~f{lr@Yb9e{fOdUaZ5Fn_j6<fIgL1y}V zTwuUw2*Bsz|D1jlo<!kOh)3fwxCj^Hv3MLFk0;=X+7@lAwoQ9f+payPJ+3{WJ*n+z z!jnDlnT~C^6s^SN+EX6*Jgq&eJqO?RT!GK!fzNCTAD6b%gik$%&m4dce6(Ev9r}s4 zRGM&Dj5Py3O8`F4P;Rmm7|`za3@G$)SZ2JjqFIW}+&AJC2AGxun4bUp+-CY!_+AR8 z+wf|<2Cv1p<2&%3_%3`mzDIjOdr^Byds%x$dsTZ)dtG}&+t-Be^MGjsfaw7M(<bdr z510-Bm=3|W!&ks`dBF5I1=ADSeiKYjQ84WUFu_NA3xGsF@xJIKbA0#U7YsD*1vI@) z@$eF$>0o;_t&8zRkD9sO!21mpy$L8f^7pyS^oQ{W6h%kyQG5&^$M4`1_+9)SejlII zj%mlWceE4QyV`r&``StE1MO53KIK8tr+}i*0Y#^^4?QUQ1W@!jeEZ@GiY^a|ex@k; zMf=D^(eD&R=Kw|U(LM$Q(NDZ3y?J<9%<?*jSPnq+DZqgh0Ysm*2a*2?3uqhYuW4)t z)}mvG^#Kf>{`*X3`XIIkV2JI=c49lTUD&Q{H?}()%!aU5?JMnT?Hlb|?K|y^_PzFl z_M`Sw6B}w`h>gNFHX5yDW3;m#4E+iiItSnWxPqa}f+02?FvMnPKR08D?GG4Y2cR|d zqx}N-p&#Hx3(WD&Wd|D|$_EhrM)6PpAo{&Mh+GqV(F`-!D0Ym2qS1h&KmR_LnSKIW zMo~18oy1ONr?6AmX>18Qowc#0+IfN)f<WmR6T}k45yTTD5F`>LHL>L$I5`X<o2@2D zHt|G|YKYkcb-044%Y&!|6j2KaQcOr)1(0gLQ(%ttwd@TBp03vjL0$k2a~t5|ayEN2 zd#eGZTeRy4^8U{mZU+rSz|tM;o$Oug-RwQ=z3hGLI(9wVK#+wXUxNGy@+T;Opg@9x z2<k{sCxSXRu^T*KdaxNx4-?d-1x(#cFa=)$)8zrvP70=71a&pRwEL1^dXd$)f_Abm zQ!sU>d}aV}r(fD}Clh^dvIh(>y+y$k@}DytWj~}~I>sJn-(gR%@3QZ)@3SY_57<)# z^&lvepfG~M35p;nlAtJpdJ+^(P_HKTBM+E9ZwAv>1jV#~Db55_!WA%G9x(k%!SowJ zy-hIvK^MC}VX=b`L9yB*{TGN#fz9~fI8M~L6DLqW^#Ocvvet*7_;!f$6<#(od2_xx zs5lD+RpKQwnK?Rgp@1r`6W5vR!gb}kaoxFKE`+mk0I6hxQV2>VD2<?Wf-(r|OHe<8 z`V%yui3>AP#q~5$#q}m=U<;};O;lxHLDgkJ6_)|1;$TPyHKU3fa48nW<#LAn#DV-o zP!@pW((4^Jf-5x8G>W1r=Rao{$Jr>D#&Z+6iQFV^GB<^r%1z@+xakDt5tL8RV1kAa zR6x*Bf<U8tI6)%_8rj6brjq`%iks04rdb4yY5~(|6HLWdz;t=QG>?L5K0$>hm=;|U zOjmQ)8SLp=3Z^lX)7(JWQ&D^Ngw~tP<|ghI15hg|pvGPzlbK^J*FX_<J9h_nCwCWj zH+K(rFLxiej$2RAc!DMnG?Ac51WhJr3PDo|nnq9wLDQSKMh~JkVH>v@t>hje$ku|W za_w1yW@w8Es=NZJ%L6IcTWa8T5>#qJ>KT9(w;QdYAA-v0st3Pd)$47J_luk%Msd0r zWv2*vjl!y;J*?E3mX2n&x444_u->M?a$F*tnd3P3F$LB;+zIYo?mg~(?j-jCcZ&Ov z`-mW5Jyit3+glAmPJ(I)noW?4AU8pEP249QV4dc^<h}x6eM3-v3$W%91n(elB23WY zE6BP$$b$W*2JRd|b4+CYMUizLkOd!t=2B$AFF=-Qxy1{-e#W+wmng#m-Rw=gN|Cjo zJ+eATVVU90`{F&C0mJ+8fjY$a01C0IE|K5N(Up$`i1FR{?tCyG!dv+sd?+8rhw~tz zYXkumO9{G~plb-amLMqfdV+2s=*A{K%7hr-+gJ_xc!HL-K<p-SHN52tz%C2Gc#xzT z_<;m1Zw45j1pwo-(Hi<8peO<WgI@qJYz}t;KU`lC`C$}bH&cL&qySsl4q%qEW}YH` zoB^t_6jZlfB9ED43O|E_YAQdCFX5;2HolZE<I8zFUqR4q1g$2NytM?~PS71-olnqR z1l>*0JxzS22UOL~paQOTZwsi_nV@R80;<acD%g%{;6a`IJ`+?+0aSmxKgHk3>nCwL z`Q;Q)>j4~>me=`J{2BvIt0|fq|8s`Bd9a~r;_u<_<?rLy@$2~pzLDR+-_Jil(ES9# z?~Md)BIrSaHWSoD5QtE)5A{eBzsUophp~;{f>!d|2-?yDrbnrC^*CJvpSXgi%Y!D^ zk80qdm$#Z|dY-bVy}+X2L(n$LqTm<ZLhosEkJtEp29J7!LTWqZH~T4%daNCf@~z$J zivrAihxua$vW`+@fil(K<}-7=&%=RU1AmgBryBTE1T?K$TaoggQk6i0c9vK&|B>-g zA8M!^S4FLl`i!tSYU11;D_FC}FZgf4s+B*@f60Hvf6aqX_B27y5VV^h=%wc#;J@R~ z@Za!1@IMl?hoHl7kD#Ljy+Z*S35H&V!k%uGWS=_%w9uL_jr+PzTZyH!X@)ccOg-$b zf^x8Pc2qdP#<j%aYdixTJFqXB;{Xd-P^2r!ZZX&`s&mzs)z!P~ZB0W<EI|d?IkuWP zHh0?xX4B5`=fT#E|AYUN|BImK3EE503mXJRKmsP{MS@-;=#UmRtsuLZ<f1ZL73khs zJU74~+fhpu`+_~Us9iXiBqzkjgHbp&*Pi5bR)-C0R&mo+?F1PxCMX2-+f3z2p@TqA z<pgiRhoDyodbLsT6<`<pHG*E(mW<Wy@28eIYbqQw>Rrty=$)Z;&N8R1*jZmz*-W89 zP;&!?PC|Dk=zgKI&_(DfbR*~ug7y*gCPDk}7lMTl!7B71=q-W{5cD=daQHmdQSNY7 zk1GcYvNHQ5TWzh~2Bzs{_Q_6{1Dc{&Jk2qx2+YCFicK@IxPt6lJzG(IY2Ex<dmK&X zD6DkW*i%aq9AK(bVu{wRp*$(GJmt44FK)PFMkN^Fg|<yQs)c~KLNFY6*&KCYgAN$t zq|vLfv{&N@I-<o-%D1J)CQgb?8$I9bi$ozAW{!|V(6I&~g@9Hd;IlIwtzk9JxizEe z>!@ZM1<H6wd0k~#X6-4xa5H~jAq!0Fg?>VRVSq4D7$js8bb_FF33`v9_X&b2`N2lO zPL7Z(<O%s`rH&w&q8}3UIYD0l6Azn2v5;>ogGn|y2l~_QDx{7HN-Q1eWU!YPJ8OsA z=h&;7CqXU%E8H-hF32r*dT2E;UFdW>s0Hc>s^r>{KFq3u62U=%y`>ret1&9sHrF^q znRV*Igyf|7xRl=3*yO~;M%RsIwml$>5sHLjVXQEYAb4B*n4nJx`jnv0pgYsY*kfyL zu~iewCJlE?ik+PnJ9}dNq?~aTvGz%^L*3&iWsI+kEi8?#8{?RiJ#kWOQhID%yvyvm zX+jC38`63P%zRQNR55W63gv=bs1Rldm4ZW<DZqQ;mjr!H(6<DgA?OE!ej?~+f_{Ba zs1|Ajr%)@*7F>c`s3Yiif;$l0gWxoRhZ0;u@N9ywX~PtS`36(`3OoY*Go}c*%ms_X z8B`}%H=J)}4<=k?l=clcC-`TjwdFnS3%uGW@VgRA|9@8C#ZAjw(|ChX<oExWM#}py zw5e}h;7vw>KbBZB{uzy6m3gW1RvG1;{l^5-Heag1+l>N$DX|n^n!rM5xw{XnBh?PK z-3@aqr;nkM?e3GGJ>0zC>N+N?sw%F!bzj_LRQ20GUSokLJ6+`$hk>q=A*>UcKwuQs z3k^b}utB(ActF@FY!V(6Ks<!k@jnRqlOR~4&J)ZKj0naAvjlTZ!b7IOC~Py{K7_{! z<~;%<Xuj%N^aQI{<i*P(FA5+YHVAtO7MkTn;U$n4g_qG9`XN{Zd6E8tSK1CH*LzdY z&nR~aZ-KaoWf1#>gCH(qrM<YwA2%}{6He%|qVNvLikKd&|6L|C$0^|}imDHVkA#nf zPlQi}&xFr~FND*=mjrtg3_f!#1p5-~N3cJ^0R#sU97J%(CgE!js=jYV)mef&wV=v8 zCdVOHP<2^QC1OC82vfXsGpa-ZP$h~uRTM>q;4a#O@QYwLMYkvx^L;|}5&iV{5Yd+c zi=LK?0Tful?SX}cHN!;gEOyg@C3dC2vR)#SnIlw;1z?F`Vz?L~Mv75lPcd5TCB}%o z2@WMVjNovBBM6QpIEvt&1V<Cxi{O|hG0p&%m?$P;o0x)Dim-0?Hh@JiP#O;}xHuVJ zaIx-c;)>l5b-?ql+Wm;R6k2%%$C}U@LZMZF*3b{Zag<@fFF@8&bHEG5(T3fRd81ey zZvbr^1zJL*I6<69a3aA;?U1GmnBr93m4|QmP>Xq}E|!XR19#;Vcd3^u!>o3eIEMnS zN~{)ZM5kCQ&K6ywTdWi72~H<CgW$dd_anGJ!2<{$Nbn$nGYQUW66cy6O<ZJfG*Kfs zyM?3Wnd{_`D;(|eaI~8!>~1DF$AsOj6n3iscJLuMm%<Ky0qp$E;l5M6$3WTL6lM98 zGu=no+2D2{^Tp%LOdG_F2CN>SuqwDjCNsyw;tq<cN5n1SR&ks7sJLBxOnh8?LVS|o zVFV8+cm%;C2_8joA;F^w9z$>u!NpDDQyx_97M~TL19tX2!DCxcHG$yC1W%#tZ0Z$U zT^?NRr?`5H;Bh9d4pLklLYwJ_;PKi*{TJZM#~knz;`;`!-lMphNFnk8#nq(txDr-} zWd`W`0E~q-^M59uHX!x|h1j%9<TrDCC;m<$c1HYO{6YLt{7F13{w)3?{wn@P@N|N0 z1eX$AMsPX7c7iJio<VRW!Hy>JoCz_BF&LKweivu9K&;AST+S;1yDR{cd;wq*$jGyr z0VV|kz|b1w2N;&|V{YV0-J}p5Tv9LvS2ch`>OsL((;i%Sdow<yNGV!Jl+=?Vs`e6@ z%p85BzJMqxUP_P>r6eg?N|92fG$~zzMbJgCo8UTvVOg9*@LYoD5j>yZ1q3f_lKOcN zl__OGD^^Om1XD|E`g0Y*@Si}VfM+ee0;$UbDcEjnkYE*AY(i@6B_TCMDls56jY4V( zMTd<-N^1`(<+m_{TQQ7@lo`@Y16vM?t*bAQ+ssibEu`3*Ex9DOR43I-bELV_JZZiJ z0J@f7DCK&BZy@+af|n7zoZuA%-$d}uP0}I{w&2WE#}=et*@CUxOm4OI3bZZ{v{q4Q z-A3>&CbZT9w4~e78tG0dX5C7~tW~<0Ww8XA1HMjbGyv8>0k)b#<bDdUHSGb${$Xa? zEIn-C>LH3NYLWeSnamv9rN^0|2I(<^?`)8sAownA$y7KX8VOFi;0OmC6POOv%nZAv z7nz{V($ms2(r)Ql={aeS^t`lJdV%132)>u#`v_h~@Opw92yP^J1Ht!imR@2afTz7G zy(Yaby&>&mA_#r}Tm%C@+eq*xg5k{><bo!+wPYgrLj@msMY+Q!Iox?wjv3V10~{L} zw~dYS0{3_a_+te(W3ZR*Nk7i!a@gq3eL(B9rtiEGi=S~@4_{CR?r!05%5&2wH{Vw6 zsG47532a>eJszu~t|{6P0h^y?E^svrzTh0S^iaj^sICVuu})V)Qd}~43%=kkID{;p zQ&+B^$i!aotZ!O&UQS*{YEEogdTwqkIF3q=O$R?Dv3Yq(iD}7MS@1k%+`RPElGNmJ z#u3gW<4;0jZ`1fp`al9zuMN^E=|kxwf*&UM5rVgDkUo(<l|CbQE5WZ5ypvAzco^fh zzL1;!Cd1)HQGInaxX?6)zsNp=`ap(`?$j>Js9Ji~0gr;(Jt}t8RoV5|OzCT8*8|cw z(znug(i!P{g0~S2Li{d*cN6@)mSp1UC+Sy8`dR5`=@)_@C3ri*k8O~ClYVD@Bp7y3 zpP(-PjN{9;l(!+Y(B*)0u{s#Un07?9Ntg|e=8EjKaFzz+1;=2QPHkizXRE5Whh<6z zJ1=9b5ty+yH$Y}(@gfb7C0V9@zk}eX^u7<vY+ejTTgU2dkInoRIpAXX1LYvv0Z$YB z4DEohOpB3!OkYpU-DK-Uate$bDu>Y%FZ?XQ&uL-J^d6L>7$3Q(98J9&m)q)WqkMx( zO3mOP2(uh7i2r*~5J@g}Ih}P75yWCuz5D}$L#(}G`egL&*FR!FR>9C=!$%a2pHxy> z<*u8zu-Vml2X7yXuOGN1Zti8nUom(B&8h<yR9atWcWYP+(b$Pa^<`ytd%3;*P+*XE z$1dG3;uyWLQ)i9S_{Of?z)g7<EpXh(qI~eV3@O3Wu+w#<M`&2McSK}V&uDm3<XB*b zdMom)Y%|={S*#u0YB*{E5%7@mz_83nqq}|YvVhBTQR_T8t|)(GQEYY<;OC%s@7Or- zgfq5)R?(8V72TaQnbHc*@-`$SCK(>nH-M8WtpjzDu62ZY1(X%j{9_Boy20~}Co`}W zgLX<~tGiY+L%!WcnHcy+1s~`$+^v#Wj1qMs^+FE@c@NBN7zCcjgD5%KdEFaxa;X>c z#{9vCBk~eUSIA_RNWGjpTOIksX{P6CF`Oi~C<9m+i*Rt{sKU_~^Elnc|88U980c%` z>=beokG;?pZ1K1;raxJDK4GHX0qtG;PAD7$k0(z7-hW}oZ<so5%tda)Eu$w}h6qZS zZfnLy<Mc5{%F68(-ZLs4GiLz_<169h7igzE5!gDgKm7~9r-(Y#hgAcf)q`F}wT>zM zW_CQ26K_qhuv%9w_;7WN)4O)|Fjp~n*v$q1wFNmjP_Dj|SY&WO-hGs>ZzaR{R>FCH z6$Xe^gIn;yW3nbrm^jHQz6X(YI)bm&IL60T=B~{uEF4ZzSOc^eXl(ua=c5qN2mT$3 zrDe5#@(-^0azH$!+XJ8Z<?ga-hC%%qM*O0z)>X$aayZ-%n_E{)uZO^Oz^vjiIdDCN zVI;5Syl|Td8EmhyyBuZK!Qc$oI@ks)h&3@T(F&(`^z4r&`FH<SSJhLx>Aw*8c)4d4 z4THaNK>s!6wp@Ch4%geuY<We^*I&+Yj2j8pnGAzNYwNPd!1YkLF0G$6HVdwM!}Y@z zuKclZJrJ&sSJn@q*U1dS1}&&89uL>Sa6Po9bmS<w?hDtIW$v6waNQHG8!PPvbey2i z*w-C(1;ua;^|9Z&oMUMEUJS$aFSqCB8TYx0S<YdUhETZwxO+|!y|2@}pfZQj33YKt zXWE7q!ZmOq?k9WIV45Dv;k(q<71A={JD*!qHImkw3D;}wZoR$moj+PvSxm<)kzs_; zI#)5x3$zJv8k=7L*ZFWguhKPy-iP)I&(>DyID<YB{&3Zgp>2mYiuv}Mv9u2<E;O4f zZ!la#Uy08!<B$#f%{!S=_+18ZoIYf%5Xs5G%+arAfD8R<_*j90-tZX=scPWkf)s9M z7Tli!*PnWx)9*9~%~K0coZu1K!Bjy$^R5-*McJG4(K2Y<D4L6w`-NU^S#y1HP+v~) z157<UuY{OTHSpUCai>n{cjf_o)$lzB?$*Pz8F1aYmPEi&B2%c-YS2KR(^^h9*W!d6 z<$7I4KH5rywj7|jhFJj5C~bPnxsDL6C<#9OAUe?iE?%$A1u5n;vHJb~`aQGOmX_1D zo%Yl^8)$9a`quqr_VM%3Uv*G&6|~TZt3^j-0r)g_L5~}`TY6Kk@s=+2J!@;%-aNWs z+D4sX+IH(wSBazSt(9jkF={QNW!4_sX52=##)XcQ@^-j@x*(d-0sbU^n6bj&PxvGJ z7jQ+R8@<QB<DsXp6&`5cQ{*_{w*xR>BEUdanSO_kMHT$eacNIy%a|GETu=gH^?E60 zv-DCZ!m8mzN7k;7>tLwg2IE2Fmem7JDK=sOF|EhWsHN2mcxBNuofzxU6?<M|tPfju zzN*)v_x2I)sVRrNURhL8b4!=n+G!gXowL`rJf-7czkcM;BblYW<G00s9e;oP!|^}H zpKM7He=Po+_#^QR@Z>A@Hi)dXo88IoV)rpt__m9Ep53WmJq)q7o?##L<ZFv?V;;3d zI7LiZGooo5>ze0WYwWjbq26C+Z_)JTNX^uHt^G)}MhqRXe@0R3a@ukPV|4Uc=N;yq z;4OOh@=o#2@<!f0;3v^L6RyI%L%oN4cZ8=yyraBxy}Nq)!<gfg4m#f{!c4x<!o?=S zQxgfaeU*R%m(H_n&FyVHzbJ;RfQ%M?Mmd_J^{hf2U}hRM89c$P)9hCrA+1WNV#Y#E z4rVUU;evjpv%Lm*iM34{W8PERoM^H>h8LL$U;vxI6#!=%#aOv4E``f%zNXx&Km1T$ zWpM9UZV)^j2&R?kl#jJ;0hDg^7v*Rdr@r;funT=57FnJUrI)R@4)pVe2>FZ^qLRUV zp^q>Wt}|$=I{Q43Js2j(Sv%iFwGgeK307sd7Sxo*^|mI)C&21PWhR=2VSXH~%R(q< zUs=6tj&YBpe|Sa#c`5)R69zM3uv*7LtI{AQPbLK3849roiy;!sG-yX9jHC;Cb`e7$ z3gL2y1F?p=i&+Pe7dAuu!R^cr2v_ht^D^@Wa{zq*zYFWhrx0`S48$8ehY%9Mhr2)O z3@+FsPz*{$>1ZIt861wrpowTY#1*VT^$<(&YH+`~3StR1fIj@A;F<Ax^cr|ad<T69 zQ38KJze8L=FYt5M9ijsE!Ra^)4+FPlQz81_Y`g#>{oM>+ry3!;-;?-x{04XtIt6k3 z&O*#Sl?A6T5UVd8qVkObj~*2eiSH_Q8ARP{gt&XV*jLy?>?!tZ_BT%8{K4os7DjOh zM9M3J7<pH5E5PFLL5P3%B6kQ3!_IJjL1epbd<;aeE8r*aGay#ob^Ka>BgCY82{`np z{Lc_&E(pda4aRLE=m#zoRzNJct->DRZBT4E3mOrfLHA$)#B8&{QSf!*o#MmdbK*gW zv-T^*Rttgs@qB3#L`qvKt(BT!8|k3*xpYppKoqmS@+i3+qLZzJC}g`J-q@$|ImK6r zQU)l+5G{--cR&oVmz4LEA0eh!D8%m?tvVn+*B$CM^;L+v^&3Rk>gAQ=HN~sm>t?S_ zUVFUW@%phthYpb)GCNG_P}kw+4x2l?(BWi<U%mak<Gc&J%e|L)-|hXR_d)M(ePo{q zpDdqgJ_~%-`aI_Ime1D~*%E2VvDhqES?;#%v>daX_4W5n@Ezq_?YqLa$@ewiFZ@Km zNWVP4a=&Z*Hu$~Z_pv|gALgIqU*><c|NZ_i`F|Q91VjZC1k4Or9`H!O{(v)qeu2q> z;{xXe-W|9*@Kg{R6d6<yR28%`XnWAnpx--o@0ium-toqcTRI->_)Dj*oiaPwJ1y(9 zwbPMKzjwBF&g(p@^R1nCbbh}J*QHmN(Ou?txv$GhUB2!b(6wLJvaZXzZtr@c8}8Pt z+n8<(yKU&UuiM$~!QBUUukC(k_ZPZ<9UKYXz1b?~#nr$hWh28K97R);(n@})J< znq{rB-eG;wdZtIW9z%N6_h{&`zsI@IsL-*YOGCGYz8|K9rH567tq$88b|yR|d_?%7 z@Q1=rM92~85tR|QN4yg8OJr2!_{i%ccSL>>)hVhVYC+UPQSbHa&~s4F**zP39*!2G z)1zla-y40P7w(nPtFqVKz21t!F{v?*n0sU1?#=hk=v~vhvG=i9uh^{EIk6ALei#=N zH#}}>+>W?!`-JzI)aTYduk`sVJ|(^iR=0N({1S#HEKS&z@Izv+#InS@6AveKNXk!I zlJr#4_sKEI_T>ALkEi&jj7YgYWpB!#scEUM)Geu})56oHr`?lwEIlB-FnvY(s~LPo zcE*y7XEJ{4o7%Uo@Akgm^^5H{t6x*UFZxIIxA(ul|HlJD2iOKQ3^+B=I&k{H^#e~0 z>M_VRsBzFonPHjbnHw`d&x+2Pne}kix7qR8uIwkWf63{avp8o@E}J_zcUkWKJiolL zd3WWV%n!|<k^fNsnZYT87Y^PtgdZ|&$gM+;6?88sE7)9cW@y^b#Y0~l<~6Kn*j>Xu z8s2NTYxu4ac*M{Vw~csjWW>mtkvm2)qY6gdHtPMtsKVKWPmdNx7mmJr^k-ud#w;51 zN|Aq2Nl{bL&&AorD~sP9+jDIF*uCR?#!VTwdE77KbH}e5e`-RX35zGZF|o@;$Hb>5 ziIc`n+BoU#<h;piCVx65Wy*C^j!uo5I&bQ0)4EKnnzp;dr^HtB*mQpS_~}j4|FDg+ zHQLUW7L?vodZsL=?Dn#+$}`JXm!Gx|u&=UzUNN9zRmB%G2F$o^#_7sIm1`@%cH}tj za(q8?$jo&!f0;FE)}~qKtHxJtt(K~%SMRLxtC>~vqBGbz&-r$3Ozm~Gr)Kw^y=L|q z*D%*cH*!yPKUEh1FPQu4d)8lD|KXg0bMBt=>)dg3ADibpuV&u9`Mu`fIREnn`3oLc z$So{exOY*HMP$*3i?bFtT!pSGy=w20uqD?l`4o1>9wZ8xMc!N*zjW2opROK%^{#8W zU!z^~@wJ1meds#x>s;3zyT0G`>u%s~aNMx}#-tnXyz#GP<;z}Q9>09;@;_FTt$6*W zgq!ZT>HN(VH}7AWy7InTgj;HEIeP1$TOVBIyK2Fzk8c}s+moxUtCy|*X-&zR*VZPl zU3a^3d;RUF?ihZ@Q+I~ndCQ%D+*Ntkk-M|+-g-~Bdv3hvmwU_aJ$PT{eOuObU$=bS z@9Q1wk2ef%c(O6FaqR|S!<-GD-9PUBR~|@zVDrW<8<%hVb5qTxQxA@L@Wst(n>ROg zYg+jbeyIMT(+^L1_`oB%k36*{c1y$7psmZdG2805efjA0M~`kFwteqo>5pxBJmT?t zp74KS*^}tW`A?qNQMu#PQxl(hd*{%ddw2EQ^~BS0Pj7mr$1`{D4&1%+S>@Slo<0BE zg6GcesonGS^E00RcyGzxcVC$B!r>Q3zqtRUVK2S<a{kLNypr|GbFU6~^_kcDzP9uA z^w)R1k^07y`%?Bj@n*`KPwY?K|KwX~Z#{J&<G`-B`@j9{!9fR~Ka_ju<--Ms-#9Yz z$lFK99zA|+%CS?&%a4EYPSrc#pO|yv9JsOL-&^*+<^8oMyPa(OAo_!?r&3St{xJ8$ zeIFHl^zO%HAAj|U`;$LDz2>tHpRN5o<nzs6B!2PC>HO0NzMTB!r(e~6b?)oyzVZF$ zo^N}8`}lX6-|agy;moJsyS_jF!-^j}|G4R=<e&DQEj)Yj=jxx&{j%)W&c8nRTl#OW z{67Bo&(F>ML;T~8KcoNL_1Cb!-aB7?{ygmU)X!<NgVQ*7Oq=hJV*Ubii?DG%-CtU? zSl{OHY^s$To0E-K!3Gm-|6F(<c5HkZ8Zt3jmn;e(%JFEX2;PJjK_sdb%x%nirV*rw zjm$QXA)aGihuFn$K`^1i5I^WR#4!F4-t&F}8G?i8FP%^i6pkVxY)dbQSlkayK$FlE zJua~W&C=r%yFreai{`^|UK7L^J_S*RKL^?2E07+}qF>N&=nwQ4W-!K9+!rDU55zeT zKX^PY2N|Lk*Mkf};{>mP7{Ocd;}8+}4SW*f|Ne~s)TIc2)(TQYHk-#5u)`p>?<jTx zcm^wDXR*}~;dgex`vD&Xd>8OT!1+Kf&@0d<Fd#5G5OxFTKa7mO%#!B6&3^*32;QT+ zr<P;n-cvmho^oOHc>~;vWng2bh<-Eo!u!anVAvs@l@sJd=@&U!PSKA9_7V)|OmJ2O zd)hB;lzx-b<qQxQ(q&LIgA;<634Vp(*Yt~*=~+SOr8o8IM&^G^1Y|*?s7seb6BX6X zrw3L4A!RWHOVU$X&_OvDHsbT-d;ne?4WbkVk&lLa_3Mdbf?qYdYlvK6^o+d`w%@?< zzHhO!95&c&b=HK$z9}iztPz%(`Z0?<g4xvop+H&BiHba0E@B`e7Tjx)iwS;{22BH} z;_`S;O5^+F<^Wyv*)(QblTaZ~mu+&XTn2)eU9N!eL_yT>10NvxAi;+TK1%R$f=>|q zE(9j3qy|%-poy{`M3CUOFTd8mtVaSQ_|QMr`oENAT}un*>c#~4NQq^<8Ro!I8e2xK ztLms(S8Oef=4GGzp8`Jqv)UFJwH^DH%s6CXl=sd*?vzWJLU=lbIZcbzvRaSyGNY#V z{;fE7@=fv@CT^2_Gsyn8$hXR?<lE%c1fL}M1A<Qx{2{?`sQEF$pKOxX%D1DH@}2U{ z^kA9bPYK%qr^zfFIG?2F%5?G%gemKZfm>`VZ823Tf!G%iwJ0?|Ha$BrAI@6y5@NG* z<FjM4({q!vQ}eSE6Y|ri(d>Fq*nAqX$~bs5Za`sRx;37fFzTTQ#yjdNi{J#N$_`IT zEInISY~&~zSu_S>q&ZzQN};YgOt~FICotKH{ck9>boP)@>~vO@+FS)@t;UILYl=LN zOg6ev-U_B%@+SE~d9&OkKO{daKO%1-7|tU<C-@73PZRtl!Cw*lHNoFJ2tE3!yj^}w zeq4S6u6NM$`ELnpC2S;NqY3y7g)Z((`_=+f6+u9Uk+wMwFv+3^sPvZSYZe6fHEtEu zxNG&ZB;%Gpn9)H@S2!i8t<>Y{&ak_tP%|9!3k1ZYEjD8pw;4A$y@3#Sw4fq5uB@Zk zT1XjN=YV?-yPK*n7<Q~QrP&pG<yRnppZtRSqWqE!3&nQ?pCK5Iqkp(xepP-=eqDwb z#Xk~OBCH=_bsGw6v$dlUd)L#pI1mI3(^fcR{+lGN0vsFpbRC9nf0J5oyT_*1Uhb*N zB>td$f=-M>@?rUid{jOrAD7=D_$PwT68tm4a9;i^!JxMI`zHBa7`XST#*chTh6w|1 zT?zgJCIpNeBCJ3yXLIwKaSJmav?aR1jiQ_p6qWVvd<V5x1T5#(P^d!OT^dR{Z(gkp zB1M!JKr~->vC9s#p$FWC{BSmA#=vWzl}?1*`4EEEQAQ^pq#f*X*4M(sfn&2OTP?(6 z&Yn+$=7OpOB|?uV2o{%m1r!FJj%Y(bw!OmXvU{pCk_WcLhD=OL=xv2iYKflUkn-2^ zx1i-Be?#z}4KfV<Uo=QIty4eIcW3F1GJE?+`7B*Gf7Avy$k4mzspX<>6DI#A|3M=W z{wSZ*1{0QPl+VfM;4l2w!U~%cDOlk=btybyv9`o~Bq@qnvZ4}}^^~l5D;CcaU&3-N zPXd%6c%lRnmT%B&qw}xJrI@x(tI|~gJLBdiE5U>nTgd34fFr#1>s#uGP-4KITs{ul zEIs8z3fP7GMp&7!3I!RfKA`lbh*J6}@r3m<z~n<%3#EjLJ1uDU445%GqiW#9(?M;< z0Z0*-PT2-<9(<U9GkY*qNrzS`X@u?2pkxph6o&qGAYsdBpwUjy=xGm+me`?6wvyXY zY93*ITl#8<QqZ=qhASXdZB#}mBb8A~A@tT5!uk_7fUqz`L3)RE+{kAuW6>HWLYY8q zj#m)26R3B26E@gbny4xb%(t>x^nlrAL`&3>2*>R3NaqK|VC3zl2HyH|0ZKL<bF&9~ z`nP#L(F0{;9iZHJR87@<h>1>vfM!=Y%Vt5Q?zE=nM|!kvJzn~Z=Imy#+7vq|kSL`} znNm*J&V=nk*sdFt3S|apYO&o2+Z`5F80<ikxHj{VTK?ze<<z@eK<)4gB0$>VW|@7M z9TajBAk`4t90)oCeA-r3HQy{Hr*N#n{(<nEN{9pwdGuE6@~Kio1Iof|)RL#raFV6* z<+jxL@_1nVErY7Zg@re^OR`wAx%J9iI;G|iwnu|9kFcS%Z9VFN5rM^ig&o>ao&y5? z3|Oc<p@a%@-3B#_m|Yu`#mZI662gWNHk_~#T2hH6xtX_L5Ye1QZTBpJW}$J0_5@W@ zO8sxLdEPl;VB`Orj8uWdZ2YwfL_cm+u2ZfjY!qR8>dxcnoYn`JV#Q5yG~8~R1?;&Q zMj;c%c%C$4Cm-x}J<GIN_)6tg+OxM1wpRlaVSuKqCuj4rL)UFX3&d^aTdUkb^W9F^ z-VMr~gpH-d_(FhH&qA*+J;n&!OGn^7Wu3B~uyKS<CTyDLrAOJIY+`~oDEBK5C>sge zhp@o15;iCx+bB(hO{D7}*h5W)qFYp0rqFLKVwDBHQW{6tAf9erJ)L3ggqyI;*~ZJQ z*@ErLlNYOZ2k?NMgiWE7Kh;pJY>`dEGFNueOEC+1R@r;8LS6vkUm|QeB|d{PJW7s7 z-l0-XSY~Zzo048vjx%wOC~qkHlsA?A%3I0-<!$Ala!5I>98r!c#|Ybxu>A=;fUpAz zJBYBEgv}ysHequJn@d<=g876U{D|_7assV^?e_Pnpsk#O>yMO=6>tnk*dc@+4XUdw zFu)=zbQ5+g{W^}YGYET=0VrQnuJa6JiN$L4z=-;)ItLu(=ubdxkLnx_*W-7USQ3pj zeuQnFqZ+VF*(4};y1}smWq4F%XvR`=QE+!s%OzA{$`UP|tyiPRyDGHRRZ=05;?j5y zJxafrv>KwSHP>EY0~*0)h}+?&(#se-W!7+E1Y@3Nk_THu`X)hGt<egz(y~g&9D8}& zT);%l$IW7_$>05fq~<DhLJTT;Ua}_~ZVwG6hR!O#(5dt@VGA0RUkR(nr2f09^ar!6 zQTbE(i?G88JJK_YRHQ->gLbn>6_^MW1mxiq%_Bfn7brFw6PCFQw3*;vGZktF6}<Dd zFTfA2RAHqAZ>NMUG?(ty-5!>y8TyT|$<_>p;r5EUV&@oo_Ge)Zsa@4>uuqYVwyNEM zMSx}%4Pi!y)QDXML)q${zNiwmSl>-iLsaYJRu3E19*m>)4U_mVHQZS9kEl^<PsT@$ zR(q*2YHu}GjpMVS22<oUb&IF9@DfUio}wDuH?-Uaw<bEFqbkh2EzbxGi|z!%RuC5a ze6E0q*`D_VW4#AKoU*@MCoMD1!*o6GAv#-B6Tx4InxrPHDQc<;0@6gnP9<y!VQqv3 zx0Hv}zG^>cOMi8MI&e};?PGPi2s??elL<RzTn!w!_Kdc4GP*2V%`x5(bgk(*#_KD6 zKWOfDhpSP|r5jW9E#hy}n04oi&#Ay}rh)w(R0ZmN#m-q5dd@J@4&$?F+UdIZ1ZjgV zOxWzT!)O-B<mu`_kjh~bkey<dQH<8mGN|`Wc8aOUeuDW-ov2PyC#zGSJEk(9s?*dG z;cC^!y@|F0tV-1~X1ZFY0^1L8gCaQ9tps_rzPe^)J@tbG$h6nckbP}$`j%CKE^!&W zJ&mD(1p$o!16V$FUXfP=q5dEX+%obG2fsF+;>=oF-@LFmXBk1?S>V;cZh2c{{LeT4 zGe&8K3YhB%%T_TAo(V7$oEzYPbS535ze@n)09h~0W|Ul|LM%)A9@hqmEd$+_xizYw zm+)VtH-K9U`;qEw!dABMpE`9Oun)Cfoukertb?#K2|H_pIv?<}kg!!ceySmcA)OY( z95v-2U$)`@{svnb0(={UIN-3lFzjO{FEJh))i0&hUrpE=E$N_o9YErG^#+isL4knE zvuz5Z`3dVJ?26;+GIhDSLcIyn->j}wZ&8P-tJK@n)#@6xzfhsx0TaI5SyoSV=i780 zRVoHyvjUVN=@t;(f(8d)bVjx9N_eXQSk&2b9c5I>9@a)s(5=z8TbkLyh3S3UJf-za zHYotlFOb{()*{n-JbKZ2#)2d~pRl!rT~4_HZ1}RvS~I}A)VnDI1dA0GBxe{e%CEFV zMklUkwrx-w)JAm!VO@lE6Sl5}<+Pp3&6D%uGj@wHW9!?@*h9=`puF)Z%+bdg;0NCk z7Pe>&eC|-6x;T6r)twZI7ehAOt*tMua+DbyB-ZV$2d7{r^M6K#jiM%XxB9I5oVrJS zUfrv{puVWSqyl4EKp^G@3(N$Tud4_PZvYx$31OEK_Ub0}Rr-<)KdaO?4Mz&<+l0MF z7p<ugAA6nYM}fV8inmw%DE#Yw6x5SoX{CNZ*lU|Dt<;ae(&}P<6wJ{+t$wXrS*c%v zl@&|lnu-&(J{R+uVCMKiJ*%5osXu{<6?@|)a+FwNJqtN~4>VYb$!FsV!I_o2-rW*? z)<E<h>YvS<Zs2~*>1t+Sl=C#Ie^E&58*&#u)AM>UUdVV!Z^N~8_SfizX=eHc-~M59 z+q^h088%71crU?A^a4TeX2OD;4{vj~-tVP&sdBnk2g0r*?Ctt8d#4sQfeL5zU1_2& zpV6yHhS+B8Owj5)lD|i)HLDBo>P)K(^a}Fo=+%j^w-I(VVS&G_y&tC08fFu`LN11l zlRnKalDdHxa6jF3p#D}l#x~d3!Gr14_G$B8Vo{lsp7B}RJfvh6fxo&IYXEqm4r-G` zFP$=Hlh$xA@NnGV1=}HaG(ga%MfwXWyb8OWRn1$Gw8duX7%%X~()>Q_6-U^+n$O<6 z5<uYgO7u!1?A?UD&$HlprF!+fh`j98kBRUaK-hbzz<sZ_#M9kjnO7Tb_RI>iz49-X ze=y`PAnZDtA3_ATj1m;EM;F+k;}$MVfRO00Wg5S@w-v5a)9ChTM%v=Vx~Y)YC^>qR zFW2ir6QRfn;Sj2shFP8%Zgc7HI<DgII%n;KaA)aE*jje`G3dJWu#k-`g7w*6Zb%Jw z*9R6KNmf)Z!|caDATX$7r_NovcIyhJLex4Z0#1lqoxH&5sBTRL(mouc7!QoY6uWB@ zJcGj+`Zfs33fxc+oR^L*D98m%lLB}-a!@G@Y(E?>H@v>N!I}eHRf5c)Q)P3zjkVa~ zDb+x(8y@Q?v?FY8h%F8_I7Xcwxw|0OsCKZcR<8#rC@7x?#w<oUL#)#f9K{NftYI0B z$v924_-MT5Yhiq+AKhy41M{O^F}-8s(gqA1lm|9Zg++!f6hM^@hBY}I{-&nEIHY7) z<KZVUB^9hok`vOb<AC12Nnl?1Hxe<(r!eb0)EYz;HgDcFizIXphjL%L>rfw1p-fJt zN6@qE^WD(0xaQFtXP99%BxzDZisq$R4y9)#fEkx=u~Y<xkM<g)!^Vy+$TgHBbj^s? zkLbpeCR3{?@S2#Akd&LBnwu4yn~|6on~{;66`P)soe-Owla-nfpPiPHmz6PPA#Et& zFF84W@xjcj?3|046+vIOuB9=X4!5zTbSQst!jOWYAby$SVGwC_L-SEyNZV(v%hFRA z##xt~8qobMyN@Q#33Se6W{n)>0fSL_<H%gNJ(}vAw8(RfqjRUl&x0M!)THtRdudW? zd^;VInan&!V^)Ly=_b%V-2qx7M?p{IEK*Sr=$OW#c+fFTMk$~rl8!P!Q)B=dgtAZ$ z=$sBlLs1E`qZ@#cK8SXsXCdnL`=BRsM%NEHhyFz8F~SlK0}WF{N5qa@crIRwmqSF; zd+|p62!0JTOTWS2;qO^*Hj3@d_G1TvZfPM)Z9(9lN85wixwQJnmV&kiG^H~bw)AEa zz=UKFsKSh6rZCgQ2f?4q)8Y%_e({KSLVQm=DSiwpp<jq!N=WJn?h=MbL#5%;NU2a7 zBNa>IqzRxTS}i%j?7a@m-4{rUB~7|ox=y-5S_k&WuSut5e^43CmWySlTq`e@m&q&O z`1lq$I$jMe%X;OuiVoO^DOABAJhj}$K@U%6V@t$d^WuJWp=%AiErLG@9)sNK|H z)d~uw;c6tjME6q%s|6s^k5E5VzXhdI>?L`1fMqJoE5a+vE86QBuh+cZ@OsnhtqzqP z>O0KsFu%h>P$;#6VtKfCr1x&`*S+8H-sipF`<VAP-aq*uA8#KYAB&HlPl%7zr-x6N zPrOfpPohsUsGDZ{<oM+IjPV)kGu~&C&lFHUo#j*Q<Mf&Bv)$)8pO<}J^?BWApU)wm zBR<D`-tl?Y=MPJFOQxm3GSo8MGS)KHQfirHsj<{rT$Y8FMWCp9y=ATCUdu+yW0qZ( zJ)pAsiRE+4Y0KA^Z!Kpme_GD_B45@w#W&k`nC}QsWF75W<U7T8n(uVqQr~jl3g0!p zFZzD#*U>N5FV!!@ub<xlzma|u{7U_5{A&GNesz9x{2ugs)bCkPb$!Y26~BFc`~431 z9rSz0@08!qet-Fk{!#vM{v-X%{b&2T{N4Wb{!2j-_8R}|{BQGr%72&tGyc!|@A2R3 z|DylP{;&GK?!V7}zyAUMgZ_v8kNO|?KjD8q00poCe1I4r2dDuZ0(=7e0s;d%1#}Gv z4(JgO4yv@h0(u8z1oR6S5HKj<xqyA3QhOlaVBqM$X@S!NO9RUTKMDLk@W;TjfxiUJ z4Z0@ix}Y0^mUUD*cI?=>V^>hFy|-gi$A>|=c3Y?TP6Ij(>Xg+fr_&3a4s<%$>2Rl` zoyT=9>um2lqqC#)>CQiQ{<ZV(o&V^vsLPFAmUp?S%gU~nuHCzabnVeKtm}rZ+d$R! z@vcvHOY4@~Ex+54ZbQ4h-0e`eBi)X5d#C%v?iJlDyU*-i)%~09zX$sS`v&_52L^Wx z?i}1TxO;F&aF5`y;Pl|W!To~=f<kU~aBgsZ@Q~o4!NY?`2G0s!7Q7|+K=4l?K_UG^ zriUyExi4f>NK?qeAzMOrgzO2~8}eev%OS6ZydJVIWPiw8A@7B}A96C}RLJR&Z$r*m z87sDOR@tgrJ6L_JU9G*WvDQ>;j&+E2sCBq?w6(}O);iug6_kDFTW_}BVqIljZCwkB zzjs;hvEFB0Z*8>hu<o=zZQX5s&icId1?x-JSFEpD->|-E{j!JLBeut=9_}7%dOY3Z zgC2i{b`OmVjSh_ojSWo=9Tb`sniHBAIykf-bXe$w(5ay%p|;S9(8|!6p;e&^L$3;5 z9(qgYs?gP;cZS{_dT;2u&@G`)haLz$7<xGLXz20K6QS>go(w$|`cdd7p}&Qm3;i?n zd>9I2!}u^UOb%1SI)wRz^$r^r<_x<v?1`{rVSk4A2+s^J39k&F6<!_g44)TH!mkd$ zHvIbV8^f1}-xPjV_`2|h@D1S)hBt*j9KI!dclhh!Z-u`deklBS_=)iM!cT^O6aIUI zPlRuTe?(wJ$B51mT_d_jghcd+2m_Voz7hQ+21aB?WJlyi<VOsN7#cA=Vr0auh-DF5 zA`V3S6d4rRKXQ8HlF0iaH$^r@J{-9P)SmZ5?u~pg^5w`^BVUi)7x_-)$;eZYA4Ps1 zc{=i|$ZsP5h&&%9MJZ7oqq;=}M_HpHqN1Xrqhg}^Mh%Xd5;ZMqdQ@ptc~nJIWz@{5 zs;HW%+Nf)zu8+DgYI)R6Q7fZvjk+yrP1NmCcShYE^;FccsB=BL_sr^9*7L@mkM!Kv z^Q)de_57vhZ#~aNbI~25eWHD%{i6e;J4Sbjj*9Lb9Ty!Rof4fEoe|wHdT8{B=)&l! z(WTMl(G{SMT^;R=o*k`4-xS>#eSh@E=m(>lq92al61^>Yd-UVcPe#8H{buxA(Qii| ziarv3Ec%`3ccb5r{vi6p=)Zb(@0Hc7tk?CuHurj~*N-uNF$pn!V+O<wiph!@8dDTA zHfDUx#F)u3Q)5bEs$yoxxMS*L7Q`%yxhh7BSsAk`W_3)%|21{re@&f>AHdyOM;(aP z>qfnf3_{lNkU{o>aLC}0!66}0u~zG>)+`cEHc3cMNJ7=tYTed_xVMN}ZLfRpt!Ui? zr0UK0b$|K(^gMsV^ZC3#4{jB14Q?H76K)G`D{dR^2<{B-A?`7*8TSnL9QP9U8uu3W z9@m2Vi0_T>i_gGk;s@df;RoY~;)ml$;z!}f;Cc9Rya&G;e-i&UA%g%AV8Ras2f;-^ z2_8a(kRtp<SWNhtu#~Wju!69Ku${1zu$ypzaEQ=IXd;{^Tq0a0JR&?JJSV&)yd!)d zv=Z8g-H8K<cp{OQL!=S`VlI(I<PiBp5m8DkBbF1*#L2`8;<v=<#P5l-h;xWP5El?@ ziCc-6h^^T}v-7eiX9u#^q)Y0jv(IH;%)Xp`C%ZZOS@!enm)Wng-;&ysx{$h&dXV~% z`jPsR29U;($RvOSl9(heiBA%e#3YzxCjCgVk{l!#$xZT+f}}7hN{W+`r1hkYY4BA~ zY9MVV?IP_V?IRr^9VQ(i-N|W}Gdf3<Gc6~SQ=fA&=N-8}c_?`Vc@%j}THOL<kjx;n z$a!Qgxsa?P7n3z)glr&}rwj9Q$dzO_*-H+PBjhL<BiE9DBX1@*k&ly4lK(?KLq1Qw zM7~PCLB37CM{Xgvkw1~YP});EQo2yOQMyxlQhHPRQiv2eWi};F*+IEN`9d8<<x$J2 z)2K73v#4{ZR;ruoqXwuUYJ?i4V$`M771UMKwbYH&&D5>bZPX*wW7PB1E7WV$o78*M z2h_*ZW@;;~3vDoM7;PkNG;J(x0*yc;(I_-J4Wt#)6f_mBm{vm5(n@J%G$YMKn@p>q zxoN-Aj?tdbd(pG$#q@>rI{FU!L3$(oDE&D74E-woI{ha7HvKOBKK&K_J-vnA2DAe@ z0G)s?Kqim{j0MI6cpwL$05kvqM1TsI3Va8A56lMU0Sf>NU<aH43V4CVz%RhBz;a*( zunJfUtOqs#n}B+t0XPG^OhW?tMBPN&#N`u@PJ94%0(*gdzzi@G90raB$AdVK0A_<Z zARFX^LQn$AK?qcWYS0W$0q250f)>yYR)KEN2L`}8a3#1K+y@>68^NRCAK;(hDex?K z0lW<U4ZZ|lgKxq2U<=p=e#&i^+ab4eZr9w=x%}LU+(7Pz+*7&l7=suS86^xO!_1h% zn97*VurTb5N=6mK&G0h(j09s5V+ms^V+CUsV=ZGnV>e?T;{fAN#u>&r#zn?8#tp`8 z#$CoM#%E>*a{zM?a|m-dGmANfIgW{A5}7$n5mU;{XUdrnQ^8a-OPD%lDbv6#XF8Za zGY_SiL|4{$7Q~v%!dP2ayIK2K2U&+%Ct2rNmsnR=*I74Nw^?^tFIaC`?^&&^&+K;W zj_l6t{_KHiR*}WdW>eX8HpphPIcz>#$X2t<+4I>8**111yNc~$``Oj(2s_5EWv^xb z&fdu0%&uoQuy?R`vG=g|u@ABjvv09K=Vj#y@}}km^ET(5&wIn^#~I8S#u=Gr8h8$k zGm(?aVR7;}Tn?X8#3|;KaC964r#wwKrf`1XEa12~0Zuh1!ijSdoI1`T&RWiP&PmRH zIA=KLIhQzBIX5`BIrlgZIZrsBx$U_fxt+OPxnFU6a=+&G;r8QZatCs$Torc#_b2W? z?k!$t-gusbSHYXbo6DQe`;q731$iM}gcs#uyjtEe-YVW2-g@3<UOlgYx1HC-JIlMo zyTZH9yTiN3d%%0dd(ZF4|As%9Ka4+;Kbk+5KY>r+llT-qouAJy<QMUkd^I2DYx#P9 z8Q;h^^C$DG_{;cB{6~Tw0)jv#SRhCWwh8tN4hfD3jtWi*E(@*+ZU}A*?h5V;9tqwG zS_N%_&%%zv&cbfO?!rOBA;RH8yf8;d5z>VWAxp>+@`MUunXp_qNmwDACY&x@D6|Ug zLZ`4%cv^T(cvE;scwhKP*erY}Y!S8zKa1LnI*Gc7vPJnKgUBQLB~4xGMcYI>MSDbt zMNOjPqLZS(MAt<x#C^nr#987o;&I{$VnECk=ZSe@u~;USiy?8b*etFThr|hSop`bM z7x6OjI`IbaX7N_>cJWT}esPodwD`LCsU%avl}wS$l>8{MN*ofWq*_uZSuFWQvP`l< zvPyDTa#C_x@<8%f@>KF%@=Een@<G~3+Ev<J+DqC;njy`U4wPm|iBgGlrZga3B3&ol zD%~$VBt0TMCOskjOL|IrRr)~sQraf#BFm8Vmu1QZ%0|ctGPaB>6Uf9enM^J#lBr~{ ztU@+THbXW`Hdi)Zwoqo1Rmxnlh%73@WC__R*>%}X*=^aq{1N$t{OtUkd}{vOd}n@D zzB}KSe<c4*{<-`M`Iig&7mO?zRWPPtT*2ft`k7ZSzhGg(>4F;tw+ikQ+?S7)Q{_^5 zfgF-6<;8N1TrW>Y&GJd|3b{>QDR;?Hxkv7k2jwAoL>^6Jp@h6%en$STa9|;$5Gh0p zR~H^Fd{Fqj@Kxd4G#dT_b%T09y`Vl&Kd3)602&32gC;-(hzwC700JQiln-ej1TsJ- zr~>*Hnht#r*`Xk`6j~0ggw{aop^eZMr~%pm?S}S2XQ2zwCFlxt4Y~o{hVDZ5p@+~D z=xI^6G*QYgno$%h+FEp_=#yfIf}s#7#0r_BKvAqHQ<N*riYbb372hdlC}t{b3YP*^ zcoo%(up+9!6w4GV6k8PA6+0Ds6bBWD6-|m`ii?VSiWWti;<K{7vXio_vb(aEvX3%D zIY5b15|tz+SxHp_%3LK=nWy9`1xk_9tgKS5QXW@6Q+=(Xsx+zvs-$YEYPo8qYPD*! zYL{xSYQO4`s!`RXI;J|Wx}dtKx~zJjYF0f{y->YXeNcT={iE)o?yt^N4^;n4Jw!cT zO;nTA6!k<kL(Num)R4MVJzG6by+CbI+tp4rs`jb_>QI_rtx&I4uT`&CZ%}Vi*Q*=U z+toYOd(`{XSJkb>LyPl@&BdPL^~I-(pToW20q`Jr2s{iP3zJ|9OoJ!FxiAxE!})L# ztb~hUU7Bzi;Bt5tJQsGt9@qy5;Tkvw*TPA7C0q|5gHOPJ!KdMK@J09vd>y_8--RE* zAK_2%my-4+9ZNcwbSvpm@^wj{l8lnf5^{;6<cE?}$)1uMnvR;W8j)tQ=6lU-%{<L~ zO{K=Ksn&!wQ4OZ4)g(2)Y1U}gX*Ou;H4T~_nq8XXnv<IInv0ryn#Y=E&EJ~Wnzxz{ znpSN$ZKigDmY^kRDO$P~)H1bsTAo&@m1q&IQESpp(oWG%)qba)p`EFnt(~WxuZ?T# zwHLK5x*<BYZj#QgTdg~)JEc3TyP&(IyRCbod#d|e_d@qd_eS4N-&x;P-(BBZ-&fyX zKR`c5KTc26=jxgIJiS0K(o6OEdY!&PZ_`)mtMnedUtg_{=wtd?eM-Mbze!)OZ_sbo z@6_+s@6#XDAJ!kyAJhM#e^}bNbbM)k>CDnt>5kHCr5}+&NER{%8HY?jC<qf_BOHW> z2oMpXLNtgDK@bx%38_H7O#?YA;znXf5~)KLBflcck(J15WINJ`Tt==TH<3HYedH0+ zjQowfMBX6p%X*Z3UDl_pUs?aM0cC^A2A2&j8(x-GHoA;kW-N1;ttvZF_RP@FKsOW{ z<{9h;rvWv13=u=hu*k5)u+*^3@S9<!VYQ*bu*<N=u;0*VXfhl(oG@H5TsJ&1JU6^F zyfL&GJ{mq5z8JqY4mJ)mjx>%ojx~-q0>(UJfze<z87CX38ox7sZ=7wMXIx;k7{kV> z5i`~rQ^rNcpN+p7e>1K$t~PEl?loR8J~n<S?_WN?oLip$Sf;$Hys`X5`I++T<xk3A zmcJ=~U*2kJXX<F`V*1L|!^AdeO><0Elh+h5g-kUj%#<*tOe;+5O&d*HObw<zrv0Wv zrbbhf>A87`Sz=b0HRj3Y>1j7H$NYoYX09|>nLTEoIcmntb>@}k-_4uM_2zBnz2*bv z!{#IAqvliQv*ugohvp~dXXY2?_vTjfKjtr!+E3~>sqdsg7MrEg;<qF%KU-E<wpjLC z4q1*^j#*Av{<565+_2oX+_OBiJh42pys*5o4zMz;ldUz@n01kLxplpDqjiUMzqQeN z$$G_l*ZRQv$oj<k-r8zyvwpU<w{^7jwDq?2wPo0b*oNAM+s4^gHja&N6WOG;0vlvg z+KO!@Hmyx>n`)b8n{JzFJ8C;;yI{LyyJ{b5pJ2z^iS`_OwY|>1$iBqB)PBwW*xqb^ zW`E%zJMtV{2j3xdC>?4C?9e(EIaWKiJ9attIu1AvJDMEF9VZ=E9XA}e9d{iM9FHB% zj%SYNmD!c-%8E*?vZ3;H<<rWR^b=~&^jK6sXQuO;|C<+bj&zcpR43rfb+VisC*LV_ zN}Mt$;+*9~oj*BOIWIULJJSsyS5H@OS3g&#>l@cd*J#&R*8~^AmF-fxoUWy=t*(Qv zQ?9eF3$DwqYp$EFJFfe#H?H@t7FV0=lj}=WhpNt1U8@FE(W(lnW>qb&+E8^p4J+HD zozSjmceEGU8y$%f(HxY5(oqm)pb}J$LZ~uLFLfw_8c-uT1D%D=MdzanQ7h_4tI;qT zMdN4!U5>6qSEK9D4d^CxFM0qyj5eXi(G%z+^ey@U{fK^Yw{v%J_jdPj_jPBuN4Rlr zqC3Y;bp!5Px6mzd%iINS$gOm%-46FE_dfRt_h0VQ?sM*o?#u3G_Xl^2yVc$1$?%Nu zjPm^3Gv0&u5IqbJ)5G%Qc?vvQPpQY?F?l9?rh2~f{OGZI93H2q%H#3)JOR%N&wkHk z&l_)scZ7GWcY>GTC3yjFu9xM_^K!jfZ>4vucdz$=_mH>Id)j-?*TL7@*Uy*f`^Goe zH`K@V$$Sc*+E?P!`AU6p-=DrO{+|B6{{H@f{vrNh{t^Bxf3CkYjZmliXZq*(=lSRR zYyHdoEBved>--!1oBWObKmF(Y7yVcK*ZnvBPyMg`@BA(Pwm^qK=Rns$_dw6UzXD?e zxdC|q4wwVe0y6@$0&@eFfIUzds0z3PSYUBrO<+@?KCmsYGjJeqIB+CzEbvF*df-9e zb+A{kPcS1mAUG&EBse^n6&w>B7sLgL!JHs92nChF;$TTo7es=FV0oIyP6>V+oF1GR zoE@AS^aa-iZv~sHdsPpvCRQt|jn&@jU#c6bZ&g35eo_6p`dxKP^~ccHp@E?xq2Zyd z(CAQ3Xkv&FVu!dPNhm)g4;6)!q0-Rg(45f1kS$ahstN@{p-?0g3&le#LmNYlp{CH; z(8Ew`=$~-saNqENa8@`wOiIICN>~!sho^<@;h(}w!b`);!z;sU!dJuh!q3C6!f(SL z!XLw*(s;LLWME`yWJF|C<lhlOBs(%OQW7bRSR?*ObtDprMOH@|B0D0xBl{v3BljW? zB99|aBQ24($fufiHQj1*Y9uvC&FmU?O{(Vinu9fsHBB|gYfjYsS#zQ0W=%`Ym*}8q zc64IY9Gx1CN0&sGMwdrdM7KnDM)ySbM-N4hM^8ro6Fn0>7rhm2j<t*Riw%wqi;awp zis578m@FobeIE<PHpULdZpL26K4U|$;aC<n1{;UrFd~+NQ86i2fI*lNE5=GNBUXV; z!)9Q!usK*IR)u*mKbF8!*dpv_Y#p`%+l19)yRl=~3G6TI6m}VVj=hP06(1hQ$GLGq zTpX9B$#PL#6^G;6cxl`apBG;cUl_N>?eWTZRoor-#RKtBJQ80YKM{Xk+ozUV3)k9e zf2}=Gd$aaYZFBA4wJ&O0(u2yK5?vBsC3+-!CH|Edo*0=Jofx0MC5Q=9A}>*pP$X0d zIH6A<31h;Pn4MUbSeH1IIGVVTc$oN{?3f&!9GA>Vb7>%%n`9+LNolem2_=<DbrMNd zB<Cc9$yD;!<ZsDU$+gMfliQLzlDm?7lKYYek~fkcQ$thq6h9?ONmB)>!c<XeQfhW; zUTQ(glCq~NQ~p#q6-~uciPZAc+SKo<O{x0SuGHSt{?wsVW9rY;h1A{Dlhm`+i`45> pYwDlW=eqWF9qW444XC5kF_%pHUt-ar!~f2nivO2jq_0b6{1<GWW?cXP diff --git a/assign5/openTok/openTok.xcworkspace/xcuserdata/keleher.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/assign5/openTok/openTok.xcworkspace/xcuserdata/keleher.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist deleted file mode 100644 index 349475e..0000000 --- a/assign5/openTok/openTok.xcworkspace/xcuserdata/keleher.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Bucket - uuid = "4564FE7B-F436-43F6-822B-A181F599C280" - type = "0" - version = "2.0"> -</Bucket> diff --git a/assign5/openTok/openTok/AppDelegate.swift b/assign5/openTok/openTok/AppDelegate.swift deleted file mode 100644 index a1e8667..0000000 --- a/assign5/openTok/openTok/AppDelegate.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// AppDelegate.swift -// openTok -// -// Created by Pete Keleher on 4/29/20. -// Copyright © 2020 Pete Keleher. All rights reserved. -// - -import UIKit -import Firebase -import FirebaseDatabase - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - - - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - // Override point for customization after application launch. - - FirebaseApp.configure() - return true - } - - // MARK: UISceneSession Lifecycle - - func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { - // Called when a new scene session is being created. - // Use this method to select a configuration to create the new scene with. - return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) - } - - func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) { - // Called when the user discards a scene session. - // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. - // Use this method to release any resources that were specific to the discarded scenes, as they will not return. - } - - -} - diff --git a/assign5/openTok/openTok/Assets.xcassets/AppIcon.appiconset/Contents.json b/assign5/openTok/openTok/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 9221b9b..0000000 --- a/assign5/openTok/openTok/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "20x20" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "20x20" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "29x29" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "29x29" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "40x40" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "40x40" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "60x60" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "60x60" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "20x20" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "20x20" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "29x29" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "29x29" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "40x40" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "40x40" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "76x76" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "76x76" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "83.5x83.5" - }, - { - "idiom" : "ios-marketing", - "scale" : "1x", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/assign5/openTok/openTok/Assets.xcassets/Contents.json b/assign5/openTok/openTok/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/assign5/openTok/openTok/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/assign5/openTok/openTok/Base.lproj/LaunchScreen.storyboard b/assign5/openTok/openTok/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index 865e932..0000000 --- a/assign5/openTok/openTok/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM"> - <dependencies> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/> - <capability name="Safe area layout guides" minToolsVersion="9.0"/> - <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> - </dependencies> - <scenes> - <!--View Controller--> - <scene sceneID="EHf-IW-A2E"> - <objects> - <viewController id="01J-lp-oVM" sceneMemberID="viewController"> - <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3"> - <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/> - <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/> - </view> - </viewController> - <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/> - </objects> - <point key="canvasLocation" x="53" y="375"/> - </scene> - </scenes> -</document> diff --git a/assign5/openTok/openTok/Base.lproj/Main.storyboard b/assign5/openTok/openTok/Base.lproj/Main.storyboard deleted file mode 100644 index 8484286..0000000 --- a/assign5/openTok/openTok/Base.lproj/Main.storyboard +++ /dev/null @@ -1,197 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="16096" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="9Wh-Pb-tRi"> - <device id="retina6_1" orientation="portrait" appearance="light"/> - <dependencies> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/> - <capability name="Safe area layout guides" minToolsVersion="9.0"/> - <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> - </dependencies> - <scenes> - <!--Main Controller--> - <scene sceneID="tne-QT-ifu"> - <objects> - <viewController id="BYZ-38-t0r" customClass="MainController" customModule="openTok" customModuleProvider="target" sceneMemberID="viewController"> - <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC"> - <rect key="frame" x="0.0" y="0.0" width="414" height="896"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <stackView opaque="NO" contentMode="scaleToFill" misplaced="YES" axis="vertical" distribution="fillEqually" alignment="top" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="fEG-oc-9Mk"> - <rect key="frame" x="161" y="395" width="92" height="130"/> - <subviews> - <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="wZz-aR-xeQ"> - <rect key="frame" x="0.0" y="0.0" width="76" height="30"/> - <state key="normal" title="PlayVideos"/> - <connections> - <segue destination="LiZ-q7-qYu" kind="show" id="efN-3L-LA2"/> - </connections> - </button> - <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="TL8-Kd-gsN"> - <rect key="frame" x="0.0" y="50" width="82" height="30"/> - <state key="normal" title="Upload URL"/> - <connections> - <segue destination="8Re-pa-lXc" kind="show" id="Jk4-Sc-64b"/> - </connections> - </button> - <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="bO7-Gb-vAL"> - <rect key="frame" x="0.0" y="100" width="92" height="30"/> - <state key="normal" title="Record Video"/> - <connections> - <segue destination="CVf-eZ-JsW" kind="show" id="Xfn-5L-3p0"/> - </connections> - </button> - </subviews> - </stackView> - </subviews> - <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/> - <constraints> - <constraint firstItem="fEG-oc-9Mk" firstAttribute="centerY" secondItem="6Tk-OE-BBY" secondAttribute="centerY" id="6jt-aN-gRt"/> - <constraint firstItem="fEG-oc-9Mk" firstAttribute="centerX" secondItem="6Tk-OE-BBY" secondAttribute="centerX" id="CpJ-dO-iys"/> - </constraints> - <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/> - </view> - <navigationItem key="navigationItem" id="ZJU-2z-cdM"/> - </viewController> - <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/> - </objects> - <point key="canvasLocation" x="1363.768115942029" y="128.57142857142856"/> - </scene> - <!--Record View Controller--> - <scene sceneID="0sX-gH-lbo"> - <objects> - <viewController id="CVf-eZ-JsW" customClass="RecordViewController" customModule="openTok" customModuleProvider="target" sceneMemberID="viewController"> - <view key="view" contentMode="scaleToFill" id="Kh6-5D-Mow"> - <rect key="frame" x="0.0" y="0.0" width="414" height="896"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/> - <viewLayoutGuide key="safeArea" id="M69-7R-COg"/> - </view> - <navigationItem key="navigationItem" id="nQb-qF-9NM"/> - </viewController> - <placeholder placeholderIdentifier="IBFirstResponder" id="tpI-D2-aoV" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/> - </objects> - <point key="canvasLocation" x="1771" y="815"/> - </scene> - <!--Tok Player Controller--> - <scene sceneID="FFW-j8-WLq"> - <objects> - <viewController id="LiZ-q7-qYu" customClass="TokPlayerController" customModule="openTok" customModuleProvider="target" sceneMemberID="viewController"> - <view key="view" contentMode="scaleToFill" id="Fa6-2Z-7Qy"> - <rect key="frame" x="0.0" y="0.0" width="414" height="896"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/> - <viewLayoutGuide key="safeArea" id="RI3-t9-fpa"/> - </view> - <navigationItem key="navigationItem" id="TXy-fO-EQH"/> - </viewController> - <placeholder placeholderIdentifier="IBFirstResponder" id="6IQ-sr-rte" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/> - </objects> - <point key="canvasLocation" x="2437.68115942029" y="627.45535714285711"/> - </scene> - <!--URL Controller--> - <scene sceneID="doB-Wo-1lO"> - <objects> - <viewController id="8Re-pa-lXc" customClass="URLController" customModule="openTok" customModuleProvider="target" sceneMemberID="viewController"> - <view key="view" contentMode="scaleToFill" id="RGn-wQ-NQF"> - <rect key="frame" x="0.0" y="0.0" width="414" height="896"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="61" translatesAutoresizingMaskIntoConstraints="NO" id="Yg5-fJ-RGT"> - <rect key="frame" x="93" y="282" width="228" height="386"/> - <subviews> - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DZH-IG-cLn"> - <rect key="frame" x="0.0" y="0.0" width="228" height="50"/> - <fontDescription key="fontDescription" type="system" pointSize="17"/> - <color key="textColor" systemColor="systemRedColor" red="1" green="0.23137254900000001" blue="0.18823529410000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> - <nil key="highlightedColor"/> - </label> - <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="top" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="WV3-0Y-kU2"> - <rect key="frame" x="0.0" y="111" width="228" height="62.5"/> - <subviews> - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Name:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="t4O-Uy-O0L"> - <rect key="frame" x="0.0" y="0.0" width="49" height="20.5"/> - <fontDescription key="fontDescription" type="system" weight="thin" pointSize="17"/> - <nil key="textColor"/> - <nil key="highlightedColor"/> - </label> - <textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="SCU-6S-Fd1"> - <rect key="frame" x="0.0" y="28.5" width="228" height="34"/> - <constraints> - <constraint firstAttribute="width" secondItem="SCU-6S-Fd1" secondAttribute="height" multiplier="114:17" id="RsJ-HT-5Fi"/> - <constraint firstAttribute="width" constant="228" id="Wv6-wQ-xDU"/> - </constraints> - <fontDescription key="fontDescription" type="system" pointSize="20"/> - <textInputTraits key="textInputTraits"/> - </textField> - </subviews> - </stackView> - <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="top" spacing="2" translatesAutoresizingMaskIntoConstraints="NO" id="Iuh-MW-IWT"> - <rect key="frame" x="0.0" y="234.5" width="228" height="56.5"/> - <subviews> - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="URL:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tSS-9B-3EB"> - <rect key="frame" x="0.0" y="0.0" width="35" height="20.5"/> - <fontDescription key="fontDescription" type="system" weight="thin" pointSize="17"/> - <nil key="textColor"/> - <nil key="highlightedColor"/> - </label> - <textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Cbg-cF-9fZ"> - <rect key="frame" x="0.0" y="22.5" width="228" height="34"/> - <constraints> - <constraint firstAttribute="width" constant="228" id="9Qe-mb-hhd"/> - <constraint firstAttribute="width" secondItem="Cbg-cF-9fZ" secondAttribute="height" multiplier="114:17" id="msk-Td-ACL"/> - </constraints> - <fontDescription key="fontDescription" type="system" pointSize="20"/> - <textInputTraits key="textInputTraits"/> - </textField> - </subviews> - </stackView> - <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="F9M-9b-ggh"> - <rect key="frame" x="0.0" y="352" width="228" height="34"/> - <fontDescription key="fontDescription" type="boldSystem" pointSize="18"/> - <state key="normal" title="Upload"/> - <connections> - <action selector="uploadAction:" destination="8Re-pa-lXc" eventType="touchUpInside" id="Ptl-2u-P9H"/> - </connections> - </button> - </subviews> - <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> - </stackView> - </subviews> - <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/> - <constraints> - <constraint firstItem="Yg5-fJ-RGT" firstAttribute="centerY" secondItem="pEO-Pe-oGj" secondAttribute="centerY" id="eqb-t2-8LE"/> - <constraint firstItem="Yg5-fJ-RGT" firstAttribute="centerX" secondItem="pEO-Pe-oGj" secondAttribute="centerX" id="v0G-6X-UxY"/> - </constraints> - <viewLayoutGuide key="safeArea" id="pEO-Pe-oGj"/> - </view> - <navigationItem key="navigationItem" id="0Mi-Ay-21T"/> - <connections> - <outlet property="errorLabelOutlet" destination="DZH-IG-cLn" id="wmr-Jx-JfI"/> - <outlet property="nameTextOutlet" destination="SCU-6S-Fd1" id="oqy-ER-G2D"/> - <outlet property="uploadOutlet" destination="F9M-9b-ggh" id="eM2-IH-CJo"/> - <outlet property="urlTextOutlet" destination="Cbg-cF-9fZ" id="FLb-G6-fIz"/> - </connections> - </viewController> - <placeholder placeholderIdentifier="IBFirstResponder" id="hTn-lD-KvX" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/> - </objects> - <point key="canvasLocation" x="2112" y="-112"/> - </scene> - <!--Navigation Controller--> - <scene sceneID="8cW-vh-P3n"> - <objects> - <navigationController automaticallyAdjustsScrollViewInsets="NO" id="9Wh-Pb-tRi" sceneMemberID="viewController"> - <toolbarItems/> - <navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="BYs-f1-d6S"> - <rect key="frame" x="0.0" y="44" width="414" height="44"/> - <autoresizingMask key="autoresizingMask"/> - </navigationBar> - <nil name="viewControllers"/> - <connections> - <segue destination="BYZ-38-t0r" kind="relationship" relationship="rootViewController" id="JGJ-kB-Kd1"/> - </connections> - </navigationController> - <placeholder placeholderIdentifier="IBFirstResponder" id="cKC-i3-eki" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/> - </objects> - <point key="canvasLocation" x="453.62318840579712" y="128.57142857142856"/> - </scene> - </scenes> -</document> diff --git a/assign5/openTok/openTok/GoogleService-Info.plist b/assign5/openTok/openTok/GoogleService-Info.plist deleted file mode 100644 index f7fb9fc..0000000 --- a/assign5/openTok/openTok/GoogleService-Info.plist +++ /dev/null @@ -1,36 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CLIENT_ID</key> - <string>611428037433-ke7a2g2gqvugk421ior8t4qruc5rq4pv.apps.googleusercontent.com</string> - <key>REVERSED_CLIENT_ID</key> - <string>com.googleusercontent.apps.611428037433-ke7a2g2gqvugk421ior8t4qruc5rq4pv</string> - <key>API_KEY</key> - <string>AIzaSyBpofWHiEw8Bi6FCY2nLUtZR8wxT86s--s</string> - <key>GCM_SENDER_ID</key> - <string>611428037433</string> - <key>PLIST_VERSION</key> - <string>1</string> - <key>BUNDLE_ID</key> - <string>edu.maryland.cmsc436.spring2020.openTok</string> - <key>PROJECT_ID</key> - <string>navpractice-8aa4b</string> - <key>STORAGE_BUCKET</key> - <string>navpractice-8aa4b.appspot.com</string> - <key>IS_ADS_ENABLED</key> - <false></false> - <key>IS_ANALYTICS_ENABLED</key> - <false></false> - <key>IS_APPINVITE_ENABLED</key> - <true></true> - <key>IS_GCM_ENABLED</key> - <true></true> - <key>IS_SIGNIN_ENABLED</key> - <true></true> - <key>GOOGLE_APP_ID</key> - <string>1:611428037433:ios:9e53d5edb4e3798176aee8</string> - <key>DATABASE_URL</key> - <string>https://navpractice-8aa4b.firebaseio.com</string> -</dict> -</plist> \ No newline at end of file diff --git a/assign5/openTok/openTok/Info.plist b/assign5/openTok/openTok/Info.plist deleted file mode 100644 index 2a3483c..0000000 --- a/assign5/openTok/openTok/Info.plist +++ /dev/null @@ -1,64 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>$(DEVELOPMENT_LANGUAGE)</string> - <key>CFBundleExecutable</key> - <string>$(EXECUTABLE_NAME)</string> - <key>CFBundleIdentifier</key> - <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>$(PRODUCT_NAME)</string> - <key>CFBundlePackageType</key> - <string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string> - <key>CFBundleShortVersionString</key> - <string>1.0</string> - <key>CFBundleVersion</key> - <string>1</string> - <key>LSRequiresIPhoneOS</key> - <true/> - <key>UIApplicationSceneManifest</key> - <dict> - <key>UIApplicationSupportsMultipleScenes</key> - <false/> - <key>UISceneConfigurations</key> - <dict> - <key>UIWindowSceneSessionRoleApplication</key> - <array> - <dict> - <key>UISceneConfigurationName</key> - <string>Default Configuration</string> - <key>UISceneDelegateClassName</key> - <string>$(PRODUCT_MODULE_NAME).SceneDelegate</string> - <key>UISceneStoryboardFile</key> - <string>Main</string> - </dict> - </array> - </dict> - </dict> - <key>UILaunchStoryboardName</key> - <string>LaunchScreen</string> - <key>UIMainStoryboardFile</key> - <string>Main</string> - <key>UIRequiredDeviceCapabilities</key> - <array> - <string>armv7</string> - </array> - <key>UISupportedInterfaceOrientations</key> - <array> - <string>UIInterfaceOrientationPortrait</string> - <string>UIInterfaceOrientationLandscapeLeft</string> - <string>UIInterfaceOrientationLandscapeRight</string> - </array> - <key>UISupportedInterfaceOrientations~ipad</key> - <array> - <string>UIInterfaceOrientationPortrait</string> - <string>UIInterfaceOrientationPortraitUpsideDown</string> - <string>UIInterfaceOrientationLandscapeLeft</string> - <string>UIInterfaceOrientationLandscapeRight</string> - </array> -</dict> -</plist> diff --git a/assign5/openTok/openTok/MainController.swift b/assign5/openTok/openTok/MainController.swift deleted file mode 100644 index d6891d3..0000000 --- a/assign5/openTok/openTok/MainController.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// ViewController.swift -// openTok -// -// Created by Pete Keleher on 4/29/20. -// Copyright © 2020 Pete Keleher. All rights reserved. -// - -import UIKit -import Firebase -import FirebaseDatabase - -class MainController: UIViewController { - - let root = Database.database().reference() - - override func viewDidLoad() { - super.viewDidLoad() - - } - - func verifyUrl(urlString: String?) -> Bool { - guard let urlString = urlString, - let url = URL(string: urlString) else { - return false - } - - return UIApplication.shared.canOpenURL(url) - } -} - diff --git a/assign5/openTok/openTok/PlayerController.swift b/assign5/openTok/openTok/PlayerController.swift deleted file mode 100644 index 3a66dba..0000000 --- a/assign5/openTok/openTok/PlayerController.swift +++ /dev/null @@ -1,258 +0,0 @@ -// -// PlayController.swift -// tik -// -// Created by Pete Keleher on 4/27/20. -// Copyright © 2020 Pete Keleher. All rights reserved. -// - -import UIKit -import AVKit -import AVFoundation -import Firebase - -// MARK: Definitions -enum Feelings: String { - case yes = "ðŸ‘ðŸ»" - case no = "👎ðŸ»" -} -struct Vid { - var name: String - var id: String - var url: String - var likes: String -} - - -class TokPlayerController: UIViewController { - - // MARK: Properties - var feelingsButton = UIButton() - var descriptionLabel = UILabel() - var likesLabel = UILabel() - let directoryID = "keleher" - - var currentVid = 0 - var playerCreated = false - var player: AVPlayer? - var playerLayer = AVPlayerLayer() - var vids: [Vid] = [] - var vidsSeen: [String:Bool] = [:] - var _refHandle: UInt? - - var currentFeeling = Feelings.no { - didSet { - feelingsButton.setTitle(currentFeeling.rawValue, for: UIControl.State.normal) - if currentFeeling == .yes { - root.child("urls/\(vids[currentVid].id)/likes/\(directoryID)").setValue("1") - let nlikes = "\(Int(vids[currentVid].likes)! + 1)" - likesLabel.text = nlikes - } - } - } - - let root = Database.database().reference() - - // MARK: Overrides - override func viewDidLoad() { - super.viewDidLoad() - - root.child("urls").childByAutoId().setValue(["name": "Neo romps happily in the snow", "url": "https://sedna.cs.umd.edu/436clips/vids/neo.mp4"]) - root.child("urls").childByAutoId().setValue(["name": "Meditation Sheep", "url": "https://sedna.cs.umd.edu/436clips/vids/sheep.mp4"]) - root.child("urls").childByAutoId().setValue(["name": "Beautiful Sunset", "url": "https://sedna.cs.umd.edu/436clips/vids/sunset.mp4"]) - root.child("urls").childByAutoId().setValue(["name": "Horses", "url": "https://sedna.cs.umd.edu/436clips/vids/horses.mp4"]) - - readSeen() - } - - override func viewWillDisappear(_ animated: Bool) { - if (self.isMovingFromParent || self.isBeingDismissed) { - playerLayer.player = nil - player = nil - print("DISAPPEARING: moving \(self.isMovingFromParent), being dismissed: \(self.isBeingDismissed)") - } - } - - deinit { - print("DE-INITING!!!") - if let refHandle = _refHandle { - self.root.removeObserver(withHandle: refHandle) - } - } - - @objc private func thumbsUp() { - if currentFeeling == .no { - currentFeeling = .yes - } - } - - // Only called once at beginning. Reads seen, then sets up observer - private func readSeen() { - root.child("seen/\(directoryID)").observeSingleEvent(of: .value, with: { (snapshot) in - for child in snapshot.children { - if let data = child as? DataSnapshot { - self.vidsSeen[data.key] = true - } - } - - // - self._refHandle = self.root.child("urls").observe(.value, with: { (snapshot) in - - let initialVidCount = self.vids.count - self.vids = [] - - for child in snapshot.children { - if let data = child as? DataSnapshot { - var vidMap: [String:String] = [:] - - vidMap["id"] = data.key - for child in data.children { - if let snap = child as? DataSnapshot { - let key = snap.key - if key == "likes" { - vidMap["likes"] = "\(snap.childrenCount)" - } else if let value = snap.value as? String { - vidMap[key] = value - } - } - } - if let name = vidMap["name"], let urlStr = vidMap["url"], let id = vidMap["id"] { - self.vids.append(Vid(name: name, id: id, url: urlStr, likes: vidMap["likes"] ?? "0")) - } - } - } - - // by not-seen, likes - if self.vids.count != initialVidCount { - self.sortVids() - self.currentVid = self.vids.count - 1 - self.next() - } - - if !self.playerCreated { - self.createPlayer() - self.playerCreated = true - } - }) { (error) in - print(error.localizedDescription) - } - - }) - } - - - private func createPlayer() { - player = AVPlayer() - - playerLayer = AVPlayerLayer(player: player!) - resize(size: view.frame) - self.view.layer.addSublayer(playerLayer) - - let recogDown = UITapGestureRecognizer(target: self, action: #selector(swiper)) - view.addGestureRecognizer(recogDown) - - feelingsButton = UIButton(frame: CGRect(x: -3, y: 60, width: 40, height: 40)) - feelingsButton.setTitle(currentFeeling.rawValue, for: UIControl.State.normal) - feelingsButton.addTarget(self, action: #selector(thumbsUp), for: .touchUpInside) - view.addSubview(feelingsButton) - feelingsButton.frame = CGRect(x: -3, y: 60, width: 40, height: 40) - - descriptionLabel = UILabel() - descriptionLabel.numberOfLines = 0 - descriptionLabel.translatesAutoresizingMaskIntoConstraints = false - descriptionLabel.lineBreakMode = .byWordWrapping - view.addSubview(descriptionLabel) - NSLayoutConstraint.activate([ - descriptionLabel.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor), - descriptionLabel.trailingAnchor.constraint(lessThanOrEqualTo: view.layoutMarginsGuide.trailingAnchor, constant: -30.0), - descriptionLabel.leadingAnchor.constraint(greaterThanOrEqualTo: view.layoutMarginsGuide.leadingAnchor, constant: 20), - ]) - descriptionLabel.text = vids[currentVid].name - descriptionLabel.numberOfLines = 0 - descriptionLabel.textColor = UIColor.white - - likesLabel = UILabel() - likesLabel.textColor = .red - likesLabel.text = vids[currentVid].likes - likesLabel.translatesAutoresizingMaskIntoConstraints = false - likesLabel.lineBreakMode = .byWordWrapping - view.addSubview(likesLabel) - NSLayoutConstraint.activate([ - likesLabel.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor), - likesLabel.trailingAnchor.constraint(lessThanOrEqualTo: view.layoutMarginsGuide.trailingAnchor, constant: 0.0), - ]) - - NotificationCenter.default.addObserver(self, selector: #selector(videoDidEnd), name: - NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil) - - - if let urlStr = vids.first?.url, let url = URL(string: urlStr) { - player?.replaceCurrentItem(with: AVPlayerItem(url: url)) - player?.play() - } - } - - override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { - resize(size: CGRect(origin: CGPoint(), size: size)) - } - - private func resize(size: CGRect) { - playerLayer.frame = size - playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill - } - - private func sortVids() { - let notSeen = vids.filter({ vidsSeen[$0.id] == nil }) - let seen = vids.filter({ vidsSeen[$0.id] != nil }).sorted(by: {$0.likes > $1.likes}) - vids = seen + notSeen - } - - private func next() { - if currentVid >= (vids.count - 1) { - sortVids() - currentVid = vids.count - 1 - } - currentVid = (1 + currentVid) % vids.count - - if vidsSeen[vids[currentVid].id] == nil { - vidsSeen[vids[currentVid].id] = true - root.child("seen/\(directoryID)/\(vids[currentVid].id)").setValue("1") - } - - currentFeeling = .no - likesLabel.text = vids[currentVid].likes - if let url = URL(string: vids[currentVid].url) { - descriptionLabel.text = vids[currentVid].name - print("Playing '\(vids[currentVid].name)") - player?.replaceCurrentItem(with: AVPlayerItem(url: url)) - player?.play() - } - } - - @objc func videoDidEnd(notification: NSNotification) { - next() - print("ended") - } - - // @objc func viewingDone() { - // navigationController?.popViewController(animated: true) - // } - - @objc func swiper(recog: UIGestureRecognizer) { - next() - print("default in swipe") - } - - - - /* - // MARK: - Navigation - - // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - // Get the new view controller using segue.destination. - // Pass the selected object to the new view controller. - } - */ - -} diff --git a/assign5/openTok/openTok/RecordViewController.swift b/assign5/openTok/openTok/RecordViewController.swift deleted file mode 100644 index e556e6d..0000000 --- a/assign5/openTok/openTok/RecordViewController.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// RecordViewController.swift -// openTok -// -// Created by Pete Keleher on 4/30/20. -// Copyright © 2020 Pete Keleher. All rights reserved. -// - -import UIKit -import AVKit - -class RecordViewController: UIViewController { - - override func viewDidLoad() { - super.viewDidLoad() - - let player = AVPlayer(url: URL(string: "https://sedna.cs.umd.edu/436clips/vids/horses.mp4")!) - let playerLayer = AVPlayerLayer(player: player) - playerLayer.frame = view.frame - playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill - self.view.layer.addSublayer(playerLayer) - player.play() - } - - - /* - // MARK: - Navigation - - // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - // Get the new view controller using segue.destination. - // Pass the selected object to the new view controller. - } - */ - -} diff --git a/assign5/openTok/openTok/SceneDelegate.swift b/assign5/openTok/openTok/SceneDelegate.swift deleted file mode 100644 index 76cc34b..0000000 --- a/assign5/openTok/openTok/SceneDelegate.swift +++ /dev/null @@ -1,53 +0,0 @@ -// -// SceneDelegate.swift -// openTok -// -// Created by Pete Keleher on 4/29/20. -// Copyright © 2020 Pete Keleher. All rights reserved. -// - -import UIKit - -class SceneDelegate: UIResponder, UIWindowSceneDelegate { - - var window: UIWindow? - - - func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { - // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. - // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. - // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). - guard let _ = (scene as? UIWindowScene) else { return } - } - - func sceneDidDisconnect(_ scene: UIScene) { - // Called as the scene is being released by the system. - // This occurs shortly after the scene enters the background, or when its session is discarded. - // Release any resources associated with this scene that can be re-created the next time the scene connects. - // The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead). - } - - func sceneDidBecomeActive(_ scene: UIScene) { - // Called when the scene has moved from an inactive state to an active state. - // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. - } - - func sceneWillResignActive(_ scene: UIScene) { - // Called when the scene will move from an active state to an inactive state. - // This may occur due to temporary interruptions (ex. an incoming phone call). - } - - func sceneWillEnterForeground(_ scene: UIScene) { - // Called as the scene transitions from the background to the foreground. - // Use this method to undo the changes made on entering the background. - } - - func sceneDidEnterBackground(_ scene: UIScene) { - // Called as the scene transitions from the foreground to the background. - // Use this method to save data, release shared resources, and store enough scene-specific state information - // to restore the scene back to its current state. - } - - -} - diff --git a/assign5/openTok/openTok/URLController.swift b/assign5/openTok/openTok/URLController.swift deleted file mode 100644 index 76e5b74..0000000 --- a/assign5/openTok/openTok/URLController.swift +++ /dev/null @@ -1,58 +0,0 @@ -// -// URLController.swift -// openTok -// -// Created by Pete Keleher on 4/29/20. -// Copyright © 2020 Pete Keleher. All rights reserved. -// - -import UIKit -import FirebaseDatabase - -class URLController: UIViewController { - - let root = Database.database().reference() - - @IBOutlet weak var nameTextOutlet: UITextField! - @IBOutlet weak var urlTextOutlet: UITextField! - @IBOutlet weak var errorLabelOutlet: UILabel! - @IBOutlet weak var uploadOutlet: UIButton! - - @IBAction func uploadAction(_ sender: UIButton) { - if let name = nameTextOutlet.text, let url = urlTextOutlet.text { - - root.child("urls").childByAutoId().setValue(["name": name, "url": url]) { - (error:Error?, ref:DatabaseReference) in - if let error = error { - self.errorLabelOutlet.text = "Data could not be saved: \(error)." - } else { - self.errorLabelOutlet.text = "" - print("data saved succesfully to Firebase") - self.navigationController?.popViewController(animated: true) - } - } - } - - } - - override func viewDidLoad() { - super.viewDidLoad() - - nameTextOutlet.text = "" - urlTextOutlet.text = "" - - uploadOutlet.layer.cornerRadius = 15 - } - - - /* - // MARK: - Navigation - - // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - // Get the new view controller using segue.destination. - // Pass the selected object to the new view controller. - } - */ - -} -- GitLab