diff --git a/.gitmodules b/.gitmodules index cd77084..e374d4f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "logos"] path = logos url = git@github.com:theos/logos.git +[submodule "CocoaHTTPServer"] + path = CocoaHTTPServer + url = https://github.com/robbiehanson/CocoaHTTPServer.git diff --git a/CocoaHTTPServer b/CocoaHTTPServer new file mode 160000 index 0000000..52b2a64 --- /dev/null +++ b/CocoaHTTPServer @@ -0,0 +1 @@ +Subproject commit 52b2a64e9cbdb5f09cc915814a5fb68a45dd3707 diff --git a/MessagesBridge.xcodeproj/project.pbxproj b/MessagesBridge.xcodeproj/project.pbxproj index a86c464..d3e0f25 100644 --- a/MessagesBridge.xcodeproj/project.pbxproj +++ b/MessagesBridge.xcodeproj/project.pbxproj @@ -7,10 +7,70 @@ objects = { /* Begin PBXBuildFile section */ - CD14F185219E2A6800E7DD22 /* NSData+AES.m in Sources */ = {isa = PBXBuildFile; fileRef = CD14F184219E2A6800E7DD22 /* NSData+AES.m */; }; + 1AA43E8F219EBB2D00EDF1A7 /* MBIMJSONDataResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AA43E8E219EBB2D00EDF1A7 /* MBIMJSONDataResponse.m */; }; + 1AA43E91219EBC2C00EDF1A7 /* MBIMHTTPConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCFE3219EB45300E2C237 /* MBIMHTTPConnection.m */; }; + 1AA43E95219EC38E00EDF1A7 /* MBIMHTTPUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AA43E94219EC38E00EDF1A7 /* MBIMHTTPUtilities.m */; }; + 1ACFCF26219EB2AC00E2C237 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 1ACFCDFB219EB2AB00E2C237 /* Info.plist */; }; + 1ACFCF27219EB2AC00E2C237 /* LICENSE.txt in Resources */ = {isa = PBXBuildFile; fileRef = 1ACFCDFC219EB2AB00E2C237 /* LICENSE.txt */; }; + 1ACFCF29219EB2AC00E2C237 /* README.markdown in Resources */ = {isa = PBXBuildFile; fileRef = 1ACFCDFE219EB2AB00E2C237 /* README.markdown */; }; + 1ACFCF2A219EB2AC00E2C237 /* HTTPConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCE00219EB2AB00E2C237 /* HTTPConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCF2B219EB2AC00E2C237 /* HTTPLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCE01219EB2AB00E2C237 /* HTTPLogging.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCF2C219EB2AC00E2C237 /* HTTPMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCE02219EB2AB00E2C237 /* HTTPMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCF2D219EB2AC00E2C237 /* WebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCE03219EB2AB00E2C237 /* WebSocket.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCF2E219EB2AC00E2C237 /* HTTPAuthenticationRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCE04219EB2AB00E2C237 /* HTTPAuthenticationRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCF2F219EB2AC00E2C237 /* HTTPAsyncFileResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCE06219EB2AB00E2C237 /* HTTPAsyncFileResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCF30219EB2AC00E2C237 /* HTTPErrorResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCE07219EB2AB00E2C237 /* HTTPErrorResponse.m */; }; + 1ACFCF31219EB2AC00E2C237 /* HTTPDataResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCE08219EB2AB00E2C237 /* HTTPDataResponse.m */; }; + 1ACFCF32219EB2AC00E2C237 /* HTTPRedirectResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCE09219EB2AB00E2C237 /* HTTPRedirectResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCF33219EB2AC00E2C237 /* HTTPDynamicFileResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCE0A219EB2AB00E2C237 /* HTTPDynamicFileResponse.m */; }; + 1ACFCF34219EB2AC00E2C237 /* HTTPFileResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCE0B219EB2AB00E2C237 /* HTTPFileResponse.m */; }; + 1ACFCF35219EB2AC00E2C237 /* HTTPAsyncFileResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCE0C219EB2AB00E2C237 /* HTTPAsyncFileResponse.m */; }; + 1ACFCF36219EB2AC00E2C237 /* HTTPRedirectResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCE0D219EB2AB00E2C237 /* HTTPRedirectResponse.m */; }; + 1ACFCF37219EB2AC00E2C237 /* HTTPDataResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCE0E219EB2AB00E2C237 /* HTTPDataResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCF38219EB2AC00E2C237 /* HTTPErrorResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCE0F219EB2AB00E2C237 /* HTTPErrorResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCF39219EB2AC00E2C237 /* HTTPFileResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCE10219EB2AB00E2C237 /* HTTPFileResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCF3A219EB2AC00E2C237 /* HTTPDynamicFileResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCE11219EB2AB00E2C237 /* HTTPDynamicFileResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCF3B219EB2AC00E2C237 /* HTTPServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCE12219EB2AB00E2C237 /* HTTPServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCF3C219EB2AC00E2C237 /* HTTPMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCE13219EB2AB00E2C237 /* HTTPMessage.m */; }; + 1ACFCF3D219EB2AC00E2C237 /* HTTPConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCE14219EB2AB00E2C237 /* HTTPConnection.m */; }; + 1ACFCF3E219EB2AC00E2C237 /* WebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCE15219EB2AB00E2C237 /* WebSocket.m */; }; + 1ACFCF3F219EB2AC00E2C237 /* HTTPResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCE16219EB2AB00E2C237 /* HTTPResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCF40219EB2AC00E2C237 /* MultipartFormDataParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCE18219EB2AB00E2C237 /* MultipartFormDataParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCF41219EB2AC00E2C237 /* MultipartMessageHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCE19219EB2AB00E2C237 /* MultipartMessageHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCF42219EB2AC00E2C237 /* MultipartMessageHeaderField.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCE1A219EB2AB00E2C237 /* MultipartMessageHeaderField.m */; }; + 1ACFCF43219EB2AC00E2C237 /* MultipartFormDataParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCE1B219EB2AB00E2C237 /* MultipartFormDataParser.m */; }; + 1ACFCF44219EB2AC00E2C237 /* MultipartMessageHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCE1C219EB2AB00E2C237 /* MultipartMessageHeader.m */; }; + 1ACFCF45219EB2AC00E2C237 /* MultipartMessageHeaderField.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCE1D219EB2AB00E2C237 /* MultipartMessageHeaderField.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCF46219EB2AC00E2C237 /* HTTPAuthenticationRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCE1E219EB2AB00E2C237 /* HTTPAuthenticationRequest.m */; }; + 1ACFCF47219EB2AC00E2C237 /* DDNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCE20219EB2AB00E2C237 /* DDNumber.m */; }; + 1ACFCF48219EB2AC00E2C237 /* DDData.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCE21219EB2AB00E2C237 /* DDData.m */; }; + 1ACFCF49219EB2AC00E2C237 /* DDRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCE22219EB2AB00E2C237 /* DDRange.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCF4A219EB2AC00E2C237 /* DDNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCE23219EB2AB00E2C237 /* DDNumber.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCF4B219EB2AC00E2C237 /* DDRange.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCE24219EB2AB00E2C237 /* DDRange.m */; }; + 1ACFCF4C219EB2AC00E2C237 /* DDData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCE25219EB2AB00E2C237 /* DDData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCF4D219EB2AC00E2C237 /* HTTPServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCE26219EB2AB00E2C237 /* HTTPServer.m */; }; + 1ACFCFCA219EB2AC00E2C237 /* DDTTYLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCF09219EB2AC00E2C237 /* DDTTYLogger.m */; }; + 1ACFCFCB219EB2AC00E2C237 /* DDLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCF0A219EB2AC00E2C237 /* DDLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCFCC219EB2AC00E2C237 /* DDAbstractDatabaseLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCF0B219EB2AC00E2C237 /* DDAbstractDatabaseLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCFCD219EB2AC00E2C237 /* DDASLLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCF0C219EB2AC00E2C237 /* DDASLLogger.m */; }; + 1ACFCFCE219EB2AC00E2C237 /* DDFileLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCF0D219EB2AC00E2C237 /* DDFileLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCFCF219EB2AC00E2C237 /* ContextFilterLogFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCF0F219EB2AC00E2C237 /* ContextFilterLogFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCFD0219EB2AC00E2C237 /* DispatchQueueLogFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCF10219EB2AC00E2C237 /* DispatchQueueLogFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCFD1219EB2AC00E2C237 /* ContextFilterLogFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCF11219EB2AC00E2C237 /* ContextFilterLogFormatter.m */; }; + 1ACFCFD2219EB2AC00E2C237 /* DispatchQueueLogFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCF12219EB2AC00E2C237 /* DispatchQueueLogFormatter.m */; }; + 1ACFCFD3219EB2AC00E2C237 /* README.txt in Resources */ = {isa = PBXBuildFile; fileRef = 1ACFCF13219EB2AC00E2C237 /* README.txt */; }; + 1ACFCFD4219EB2AC00E2C237 /* DDLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCF14219EB2AC00E2C237 /* DDLog.m */; }; + 1ACFCFD5219EB2AC00E2C237 /* About.txt in Resources */ = {isa = PBXBuildFile; fileRef = 1ACFCF15219EB2AC00E2C237 /* About.txt */; }; + 1ACFCFD6219EB2AC00E2C237 /* DDTTYLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCF16219EB2AC00E2C237 /* DDTTYLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCFD7219EB2AC00E2C237 /* DDAbstractDatabaseLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCF17219EB2AC00E2C237 /* DDAbstractDatabaseLogger.m */; }; + 1ACFCFD8219EB2AC00E2C237 /* DDFileLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCF18219EB2AC00E2C237 /* DDFileLogger.m */; }; + 1ACFCFD9219EB2AC00E2C237 /* DDASLLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCF19219EB2AC00E2C237 /* DDASLLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCFDA219EB2AC00E2C237 /* GCDAsyncSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACFCF1B219EB2AC00E2C237 /* GCDAsyncSocket.m */; }; + 1ACFCFDB219EB2AC00E2C237 /* About.txt in Resources */ = {isa = PBXBuildFile; fileRef = 1ACFCF1C219EB2AC00E2C237 /* About.txt */; }; + 1ACFCFDC219EB2AC00E2C237 /* GCDAsyncSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCF1D219EB2AC00E2C237 /* GCDAsyncSocket.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACFCFDF219EB31400E2C237 /* CocoaHTTPServer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1ACFCDE2219EB28A00E2C237 /* CocoaHTTPServer.framework */; }; + 1ACFCFE1219EB37000E2C237 /* CocoaHTTPServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACFCFE0219EB37000E2C237 /* CocoaHTTPServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; CD14F18E219E2DB400E7DD22 /* CryptoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CD14F18D219E2DB400E7DD22 /* CryptoTests.m */; }; - CD14F194219E2F9C00E7DD22 /* NSData+AES.m in Sources */ = {isa = PBXBuildFile; fileRef = CD14F184219E2A6800E7DD22 /* NSData+AES.m */; }; - CD14F19E219E306C00E7DD22 /* GCDWebServerDataResponse+Crypto.m in Sources */ = {isa = PBXBuildFile; fileRef = CD14F19D219E306C00E7DD22 /* GCDWebServerDataResponse+Crypto.m */; }; CD602056219B5DFD0024D9C5 /* MBIMBridgeOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = CD602055219B5DFD0024D9C5 /* MBIMBridgeOperation.m */; }; CD60205C219B623F0024D9C5 /* MBIMMessagesListOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = CD60205B219B623F0024D9C5 /* MBIMMessagesListOperation.m */; }; CD60205F219B674B0024D9C5 /* MBIMConversationListOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = CD60205E219B674B0024D9C5 /* MBIMConversationListOperation.m */; }; @@ -22,11 +82,17 @@ CDF6233A219A8A5600690038 /* MBIMBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A0C446A219A4BC300F2AC00 /* MBIMBridge.m */; }; CDF6233D219A8AF700690038 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A0C445F219A45B400F2AC00 /* Foundation.framework */; }; CDF6233E219A8AFC00690038 /* IMCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A0C4467219A45D500F2AC00 /* IMCore.framework */; }; - CDF6233F219A8B0100690038 /* GCDWebServers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDF62324219A869000690038 /* GCDWebServers.framework */; }; CDF62343219A9BE200690038 /* ContactsFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDF62342219A9BE200690038 /* ContactsFoundation.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 1ACFCFDD219EB30E00E2C237 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 1A0C443F219A38E100F2AC00 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1ACFCDE1219EB28A00E2C237; + remoteInfo = CocoaHTTPServer; + }; CD83E16A219BE9AB00F4CCEA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1A0C443F219A38E100F2AC00 /* Project object */; @@ -34,62 +100,6 @@ remoteGlobalIDString = CD83E160219BE91500F4CCEA; remoteInfo = agentHook; }; - CDF6231D219A869000690038 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CDF62312219A869000690038 /* GCDWebServer.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 8DD76FB20486AB0100D96B5E; - remoteInfo = "GCDWebServer (Mac)"; - }; - CDF6231F219A869000690038 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CDF62312219A869000690038 /* GCDWebServer.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = E2DDD1F61BE69EE4002CE867; - remoteInfo = "GCDWebServer (iOS)"; - }; - CDF62321219A869000690038 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CDF62312219A869000690038 /* GCDWebServer.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = E2DDD1C71BE698A8002CE867; - remoteInfo = "GCDWebServer (tvOS)"; - }; - CDF62323219A869000690038 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CDF62312219A869000690038 /* GCDWebServer.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = CEE28CD11AE004D800F4023C; - remoteInfo = "GCDWebServers (Mac)"; - }; - CDF62325219A869000690038 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CDF62312219A869000690038 /* GCDWebServer.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = CEE28CEF1AE0051F00F4023C; - remoteInfo = "GCDWebServers (iOS)"; - }; - CDF62327219A869000690038 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CDF62312219A869000690038 /* GCDWebServer.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = E2DDD18B1BE69404002CE867; - remoteInfo = "GCDWebServers (tvOS)"; - }; - CDF62329219A869000690038 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CDF62312219A869000690038 /* GCDWebServer.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = E24039251BA09207000B7089; - remoteInfo = "Tests (Mac)"; - }; - CDF6233B219A8A6600690038 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CDF62312219A869000690038 /* GCDWebServer.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = CEE28CD01AE004D800F4023C; - remoteInfo = "GCDWebServers (Mac)"; - }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -118,13 +128,76 @@ 1A33B43C219A5ACD0034485A /* OSXDebugDefaults.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = OSXDebugDefaults.xcconfig; sourceTree = ""; }; 1A33B43D219A5ACD0034485A /* ReleaseDefaults.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ReleaseDefaults.xcconfig; sourceTree = ""; }; 1A33B43E219A5BD80034485A /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; - CD14F183219E2A6800E7DD22 /* NSData+AES.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSData+AES.h"; sourceTree = ""; }; - CD14F184219E2A6800E7DD22 /* NSData+AES.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSData+AES.m"; sourceTree = ""; }; + 1AA43E8D219EBB2D00EDF1A7 /* MBIMJSONDataResponse.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MBIMJSONDataResponse.h; sourceTree = ""; }; + 1AA43E8E219EBB2D00EDF1A7 /* MBIMJSONDataResponse.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MBIMJSONDataResponse.m; sourceTree = ""; }; + 1AA43E93219EC38E00EDF1A7 /* MBIMHTTPUtilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MBIMHTTPUtilities.h; sourceTree = ""; }; + 1AA43E94219EC38E00EDF1A7 /* MBIMHTTPUtilities.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MBIMHTTPUtilities.m; sourceTree = ""; }; + 1ACFCDE2219EB28A00E2C237 /* CocoaHTTPServer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CocoaHTTPServer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1ACFCDE5219EB28A00E2C237 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 1ACFCDFB219EB2AB00E2C237 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 1ACFCDFC219EB2AB00E2C237 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; + 1ACFCDFE219EB2AB00E2C237 /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.markdown; sourceTree = ""; }; + 1ACFCE00219EB2AB00E2C237 /* HTTPConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPConnection.h; sourceTree = ""; }; + 1ACFCE01219EB2AB00E2C237 /* HTTPLogging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPLogging.h; sourceTree = ""; }; + 1ACFCE02219EB2AB00E2C237 /* HTTPMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPMessage.h; sourceTree = ""; }; + 1ACFCE03219EB2AB00E2C237 /* WebSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSocket.h; sourceTree = ""; }; + 1ACFCE04219EB2AB00E2C237 /* HTTPAuthenticationRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPAuthenticationRequest.h; sourceTree = ""; }; + 1ACFCE06219EB2AB00E2C237 /* HTTPAsyncFileResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPAsyncFileResponse.h; sourceTree = ""; }; + 1ACFCE07219EB2AB00E2C237 /* HTTPErrorResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTTPErrorResponse.m; sourceTree = ""; }; + 1ACFCE08219EB2AB00E2C237 /* HTTPDataResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTTPDataResponse.m; sourceTree = ""; }; + 1ACFCE09219EB2AB00E2C237 /* HTTPRedirectResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPRedirectResponse.h; sourceTree = ""; }; + 1ACFCE0A219EB2AB00E2C237 /* HTTPDynamicFileResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTTPDynamicFileResponse.m; sourceTree = ""; }; + 1ACFCE0B219EB2AB00E2C237 /* HTTPFileResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTTPFileResponse.m; sourceTree = ""; }; + 1ACFCE0C219EB2AB00E2C237 /* HTTPAsyncFileResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTTPAsyncFileResponse.m; sourceTree = ""; }; + 1ACFCE0D219EB2AB00E2C237 /* HTTPRedirectResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTTPRedirectResponse.m; sourceTree = ""; }; + 1ACFCE0E219EB2AB00E2C237 /* HTTPDataResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPDataResponse.h; sourceTree = ""; }; + 1ACFCE0F219EB2AB00E2C237 /* HTTPErrorResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPErrorResponse.h; sourceTree = ""; }; + 1ACFCE10219EB2AB00E2C237 /* HTTPFileResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPFileResponse.h; sourceTree = ""; }; + 1ACFCE11219EB2AB00E2C237 /* HTTPDynamicFileResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPDynamicFileResponse.h; sourceTree = ""; }; + 1ACFCE12219EB2AB00E2C237 /* HTTPServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPServer.h; sourceTree = ""; }; + 1ACFCE13219EB2AB00E2C237 /* HTTPMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTTPMessage.m; sourceTree = ""; }; + 1ACFCE14219EB2AB00E2C237 /* HTTPConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTTPConnection.m; sourceTree = ""; }; + 1ACFCE15219EB2AB00E2C237 /* WebSocket.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebSocket.m; sourceTree = ""; }; + 1ACFCE16219EB2AB00E2C237 /* HTTPResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPResponse.h; sourceTree = ""; }; + 1ACFCE18219EB2AB00E2C237 /* MultipartFormDataParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultipartFormDataParser.h; sourceTree = ""; }; + 1ACFCE19219EB2AB00E2C237 /* MultipartMessageHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultipartMessageHeader.h; sourceTree = ""; }; + 1ACFCE1A219EB2AB00E2C237 /* MultipartMessageHeaderField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MultipartMessageHeaderField.m; sourceTree = ""; }; + 1ACFCE1B219EB2AB00E2C237 /* MultipartFormDataParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MultipartFormDataParser.m; sourceTree = ""; }; + 1ACFCE1C219EB2AB00E2C237 /* MultipartMessageHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MultipartMessageHeader.m; sourceTree = ""; }; + 1ACFCE1D219EB2AB00E2C237 /* MultipartMessageHeaderField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultipartMessageHeaderField.h; sourceTree = ""; }; + 1ACFCE1E219EB2AB00E2C237 /* HTTPAuthenticationRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTTPAuthenticationRequest.m; sourceTree = ""; }; + 1ACFCE20219EB2AB00E2C237 /* DDNumber.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDNumber.m; sourceTree = ""; }; + 1ACFCE21219EB2AB00E2C237 /* DDData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDData.m; sourceTree = ""; }; + 1ACFCE22219EB2AB00E2C237 /* DDRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDRange.h; sourceTree = ""; }; + 1ACFCE23219EB2AB00E2C237 /* DDNumber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDNumber.h; sourceTree = ""; }; + 1ACFCE24219EB2AB00E2C237 /* DDRange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDRange.m; sourceTree = ""; }; + 1ACFCE25219EB2AB00E2C237 /* DDData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDData.h; sourceTree = ""; }; + 1ACFCE26219EB2AB00E2C237 /* HTTPServer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTTPServer.m; sourceTree = ""; }; + 1ACFCF09219EB2AC00E2C237 /* DDTTYLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDTTYLogger.m; sourceTree = ""; }; + 1ACFCF0A219EB2AC00E2C237 /* DDLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDLog.h; sourceTree = ""; }; + 1ACFCF0B219EB2AC00E2C237 /* DDAbstractDatabaseLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDAbstractDatabaseLogger.h; sourceTree = ""; }; + 1ACFCF0C219EB2AC00E2C237 /* DDASLLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDASLLogger.m; sourceTree = ""; }; + 1ACFCF0D219EB2AC00E2C237 /* DDFileLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDFileLogger.h; sourceTree = ""; }; + 1ACFCF0F219EB2AC00E2C237 /* ContextFilterLogFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContextFilterLogFormatter.h; sourceTree = ""; }; + 1ACFCF10219EB2AC00E2C237 /* DispatchQueueLogFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DispatchQueueLogFormatter.h; sourceTree = ""; }; + 1ACFCF11219EB2AC00E2C237 /* ContextFilterLogFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContextFilterLogFormatter.m; sourceTree = ""; }; + 1ACFCF12219EB2AC00E2C237 /* DispatchQueueLogFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DispatchQueueLogFormatter.m; sourceTree = ""; }; + 1ACFCF13219EB2AC00E2C237 /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; + 1ACFCF14219EB2AC00E2C237 /* DDLog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDLog.m; sourceTree = ""; }; + 1ACFCF15219EB2AC00E2C237 /* About.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = About.txt; sourceTree = ""; }; + 1ACFCF16219EB2AC00E2C237 /* DDTTYLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDTTYLogger.h; sourceTree = ""; }; + 1ACFCF17219EB2AC00E2C237 /* DDAbstractDatabaseLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDAbstractDatabaseLogger.m; sourceTree = ""; }; + 1ACFCF18219EB2AC00E2C237 /* DDFileLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDFileLogger.m; sourceTree = ""; }; + 1ACFCF19219EB2AC00E2C237 /* DDASLLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDASLLogger.h; sourceTree = ""; }; + 1ACFCF1B219EB2AC00E2C237 /* GCDAsyncSocket.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDAsyncSocket.m; sourceTree = ""; }; + 1ACFCF1C219EB2AC00E2C237 /* About.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = About.txt; sourceTree = ""; }; + 1ACFCF1D219EB2AC00E2C237 /* GCDAsyncSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDAsyncSocket.h; sourceTree = ""; }; + 1ACFCFE0219EB37000E2C237 /* CocoaHTTPServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CocoaHTTPServer.h; sourceTree = ""; }; + 1ACFCFE2219EB45300E2C237 /* MBIMHTTPConnection.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MBIMHTTPConnection.h; sourceTree = ""; }; + 1ACFCFE3219EB45300E2C237 /* MBIMHTTPConnection.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MBIMHTTPConnection.m; sourceTree = ""; }; CD14F18B219E2DB400E7DD22 /* Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; CD14F18D219E2DB400E7DD22 /* CryptoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CryptoTests.m; sourceTree = ""; }; CD14F18F219E2DB400E7DD22 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CD14F19C219E306C00E7DD22 /* GCDWebServerDataResponse+Crypto.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "GCDWebServerDataResponse+Crypto.h"; sourceTree = ""; }; - CD14F19D219E306C00E7DD22 /* GCDWebServerDataResponse+Crypto.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "GCDWebServerDataResponse+Crypto.m"; sourceTree = ""; }; CD602054219B5DFD0024D9C5 /* MBIMBridgeOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MBIMBridgeOperation.h; sourceTree = ""; }; CD602055219B5DFD0024D9C5 /* MBIMBridgeOperation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MBIMBridgeOperation.m; sourceTree = ""; }; CD60205A219B623F0024D9C5 /* MBIMMessagesListOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MBIMMessagesListOperation.h; sourceTree = ""; }; @@ -138,7 +211,6 @@ CD83E161219BE91500F4CCEA /* libagentHook.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libagentHook.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; CD83E165219BE91600F4CCEA /* agentHook.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = agentHook.m; sourceTree = ""; }; CD83E1B5219BF78E00F4CCEA /* hookAgent.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = hookAgent.sh; sourceTree = ""; }; - CDF62312219A869000690038 /* GCDWebServer.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = GCDWebServer.xcodeproj; path = GCDWebServer/GCDWebServer.xcodeproj; sourceTree = ""; }; CDF62332219A895D00690038 /* kordophoned */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = kordophoned; sourceTree = BUILT_PRODUCTS_DIR; }; CDF62334219A895D00690038 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; CDF62340219A9AAA00690038 /* EmailFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = EmailFoundation.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.Internal.sdk/System/Library/PrivateFrameworks/EmailFoundation.framework; sourceTree = DEVELOPER_DIR; }; @@ -146,6 +218,13 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 1ACFCDDE219EB28A00E2C237 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; CD14F188219E2DB400E7DD22 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -164,8 +243,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 1ACFCFDF219EB31400E2C237 /* CocoaHTTPServer.framework in Frameworks */, CDF62343219A9BE200690038 /* ContactsFoundation.framework in Frameworks */, - CDF6233F219A8B0100690038 /* GCDWebServers.framework in Frameworks */, CDF6233E219A8AFC00690038 /* IMCore.framework in Frameworks */, CDF6233D219A8AF700690038 /* Foundation.framework in Frameworks */, ); @@ -178,12 +257,12 @@ isa = PBXGroup; children = ( 1A33B43E219A5BD80034485A /* README.md */, - CDF62312219A869000690038 /* GCDWebServer.xcodeproj */, CDF62333219A895D00690038 /* kordophone */, 1A33B439219A5ACD0034485A /* Config Files */, 1A0C445C219A457C00F2AC00 /* Pilfered Headers */, CD83E162219BE91600F4CCEA /* agentHook */, CD14F18C219E2DB400E7DD22 /* Tests */, + 1ACFCDE3219EB28A00E2C237 /* CocoaHTTPServer */, 1A0C4448219A38E100F2AC00 /* Products */, 1A0C445E219A45B400F2AC00 /* Frameworks */, ); @@ -195,6 +274,7 @@ CDF62332219A895D00690038 /* kordophoned */, CD83E161219BE91500F4CCEA /* libagentHook.dylib */, CD14F18B219E2DB400E7DD22 /* Tests.xctest */, + 1ACFCDE2219EB28A00E2C237 /* CocoaHTTPServer.framework */, ); name = Products; sourceTree = ""; @@ -227,6 +307,8 @@ CD60204C219B5D710024D9C5 /* Operations */, 1A0C4469219A4BC300F2AC00 /* MBIMBridge.h */, 1A0C446A219A4BC300F2AC00 /* MBIMBridge.m */, + 1ACFCFE2219EB45300E2C237 /* MBIMHTTPConnection.h */, + 1ACFCFE3219EB45300E2C237 /* MBIMHTTPConnection.m */, ); path = Bridge; sourceTree = ""; @@ -242,15 +324,146 @@ path = "Config Files"; sourceTree = ""; }; - CD14F182219E2A4C00E7DD22 /* Crypto */ = { + 1AA43E90219EBB3400EDF1A7 /* Utilities */ = { isa = PBXGroup; children = ( - CD14F183219E2A6800E7DD22 /* NSData+AES.h */, - CD14F184219E2A6800E7DD22 /* NSData+AES.m */, - CD14F19C219E306C00E7DD22 /* GCDWebServerDataResponse+Crypto.h */, - CD14F19D219E306C00E7DD22 /* GCDWebServerDataResponse+Crypto.m */, + 1AA43E8D219EBB2D00EDF1A7 /* MBIMJSONDataResponse.h */, + 1AA43E8E219EBB2D00EDF1A7 /* MBIMJSONDataResponse.m */, + 1AA43E93219EC38E00EDF1A7 /* MBIMHTTPUtilities.h */, + 1AA43E94219EC38E00EDF1A7 /* MBIMHTTPUtilities.m */, ); - path = Crypto; + path = Utilities; + sourceTree = ""; + }; + 1ACFCDE3219EB28A00E2C237 /* CocoaHTTPServer */ = { + isa = PBXGroup; + children = ( + 1ACFCFE0219EB37000E2C237 /* CocoaHTTPServer.h */, + 1ACFCDFF219EB2AB00E2C237 /* Core */, + 1ACFCDFB219EB2AB00E2C237 /* Info.plist */, + 1ACFCDFC219EB2AB00E2C237 /* LICENSE.txt */, + 1ACFCDFE219EB2AB00E2C237 /* README.markdown */, + 1ACFCF07219EB2AC00E2C237 /* Vendor */, + 1ACFCDE5219EB28A00E2C237 /* Info.plist */, + ); + path = CocoaHTTPServer; + sourceTree = ""; + }; + 1ACFCDFF219EB2AB00E2C237 /* Core */ = { + isa = PBXGroup; + children = ( + 1ACFCE00219EB2AB00E2C237 /* HTTPConnection.h */, + 1ACFCE01219EB2AB00E2C237 /* HTTPLogging.h */, + 1ACFCE02219EB2AB00E2C237 /* HTTPMessage.h */, + 1ACFCE03219EB2AB00E2C237 /* WebSocket.h */, + 1ACFCE04219EB2AB00E2C237 /* HTTPAuthenticationRequest.h */, + 1ACFCE05219EB2AB00E2C237 /* Responses */, + 1ACFCE12219EB2AB00E2C237 /* HTTPServer.h */, + 1ACFCE13219EB2AB00E2C237 /* HTTPMessage.m */, + 1ACFCE14219EB2AB00E2C237 /* HTTPConnection.m */, + 1ACFCE15219EB2AB00E2C237 /* WebSocket.m */, + 1ACFCE16219EB2AB00E2C237 /* HTTPResponse.h */, + 1ACFCE17219EB2AB00E2C237 /* Mime */, + 1ACFCE1E219EB2AB00E2C237 /* HTTPAuthenticationRequest.m */, + 1ACFCE1F219EB2AB00E2C237 /* Categories */, + 1ACFCE26219EB2AB00E2C237 /* HTTPServer.m */, + ); + path = Core; + sourceTree = ""; + }; + 1ACFCE05219EB2AB00E2C237 /* Responses */ = { + isa = PBXGroup; + children = ( + 1ACFCE06219EB2AB00E2C237 /* HTTPAsyncFileResponse.h */, + 1ACFCE07219EB2AB00E2C237 /* HTTPErrorResponse.m */, + 1ACFCE08219EB2AB00E2C237 /* HTTPDataResponse.m */, + 1ACFCE09219EB2AB00E2C237 /* HTTPRedirectResponse.h */, + 1ACFCE0A219EB2AB00E2C237 /* HTTPDynamicFileResponse.m */, + 1ACFCE0B219EB2AB00E2C237 /* HTTPFileResponse.m */, + 1ACFCE0C219EB2AB00E2C237 /* HTTPAsyncFileResponse.m */, + 1ACFCE0D219EB2AB00E2C237 /* HTTPRedirectResponse.m */, + 1ACFCE0E219EB2AB00E2C237 /* HTTPDataResponse.h */, + 1ACFCE0F219EB2AB00E2C237 /* HTTPErrorResponse.h */, + 1ACFCE10219EB2AB00E2C237 /* HTTPFileResponse.h */, + 1ACFCE11219EB2AB00E2C237 /* HTTPDynamicFileResponse.h */, + ); + path = Responses; + sourceTree = ""; + }; + 1ACFCE17219EB2AB00E2C237 /* Mime */ = { + isa = PBXGroup; + children = ( + 1ACFCE18219EB2AB00E2C237 /* MultipartFormDataParser.h */, + 1ACFCE19219EB2AB00E2C237 /* MultipartMessageHeader.h */, + 1ACFCE1A219EB2AB00E2C237 /* MultipartMessageHeaderField.m */, + 1ACFCE1B219EB2AB00E2C237 /* MultipartFormDataParser.m */, + 1ACFCE1C219EB2AB00E2C237 /* MultipartMessageHeader.m */, + 1ACFCE1D219EB2AB00E2C237 /* MultipartMessageHeaderField.h */, + ); + path = Mime; + sourceTree = ""; + }; + 1ACFCE1F219EB2AB00E2C237 /* Categories */ = { + isa = PBXGroup; + children = ( + 1ACFCE20219EB2AB00E2C237 /* DDNumber.m */, + 1ACFCE21219EB2AB00E2C237 /* DDData.m */, + 1ACFCE22219EB2AB00E2C237 /* DDRange.h */, + 1ACFCE23219EB2AB00E2C237 /* DDNumber.h */, + 1ACFCE24219EB2AB00E2C237 /* DDRange.m */, + 1ACFCE25219EB2AB00E2C237 /* DDData.h */, + ); + path = Categories; + sourceTree = ""; + }; + 1ACFCF07219EB2AC00E2C237 /* Vendor */ = { + isa = PBXGroup; + children = ( + 1ACFCF08219EB2AC00E2C237 /* CocoaLumberjack */, + 1ACFCF1A219EB2AC00E2C237 /* CocoaAsyncSocket */, + ); + path = Vendor; + sourceTree = ""; + }; + 1ACFCF08219EB2AC00E2C237 /* CocoaLumberjack */ = { + isa = PBXGroup; + children = ( + 1ACFCF09219EB2AC00E2C237 /* DDTTYLogger.m */, + 1ACFCF0A219EB2AC00E2C237 /* DDLog.h */, + 1ACFCF0B219EB2AC00E2C237 /* DDAbstractDatabaseLogger.h */, + 1ACFCF0C219EB2AC00E2C237 /* DDASLLogger.m */, + 1ACFCF0D219EB2AC00E2C237 /* DDFileLogger.h */, + 1ACFCF0E219EB2AC00E2C237 /* Extensions */, + 1ACFCF14219EB2AC00E2C237 /* DDLog.m */, + 1ACFCF15219EB2AC00E2C237 /* About.txt */, + 1ACFCF16219EB2AC00E2C237 /* DDTTYLogger.h */, + 1ACFCF17219EB2AC00E2C237 /* DDAbstractDatabaseLogger.m */, + 1ACFCF18219EB2AC00E2C237 /* DDFileLogger.m */, + 1ACFCF19219EB2AC00E2C237 /* DDASLLogger.h */, + ); + path = CocoaLumberjack; + sourceTree = ""; + }; + 1ACFCF0E219EB2AC00E2C237 /* Extensions */ = { + isa = PBXGroup; + children = ( + 1ACFCF0F219EB2AC00E2C237 /* ContextFilterLogFormatter.h */, + 1ACFCF10219EB2AC00E2C237 /* DispatchQueueLogFormatter.h */, + 1ACFCF11219EB2AC00E2C237 /* ContextFilterLogFormatter.m */, + 1ACFCF12219EB2AC00E2C237 /* DispatchQueueLogFormatter.m */, + 1ACFCF13219EB2AC00E2C237 /* README.txt */, + ); + path = Extensions; + sourceTree = ""; + }; + 1ACFCF1A219EB2AC00E2C237 /* CocoaAsyncSocket */ = { + isa = PBXGroup; + children = ( + 1ACFCF1B219EB2AC00E2C237 /* GCDAsyncSocket.m */, + 1ACFCF1C219EB2AC00E2C237 /* About.txt */, + 1ACFCF1D219EB2AC00E2C237 /* GCDAsyncSocket.h */, + ); + path = CocoaAsyncSocket; sourceTree = ""; }; CD14F18C219E2DB400E7DD22 /* Tests */ = { @@ -265,6 +478,7 @@ CD60204C219B5D710024D9C5 /* Operations */ = { isa = PBXGroup; children = ( + 1AA43E90219EBB3400EDF1A7 /* Utilities */, CD602054219B5DFD0024D9C5 /* MBIMBridgeOperation.h */, CD602055219B5DFD0024D9C5 /* MBIMBridgeOperation.m */, CD60205A219B623F0024D9C5 /* MBIMMessagesListOperation.h */, @@ -295,24 +509,9 @@ path = agentHook; sourceTree = ""; }; - CDF62313219A869000690038 /* Products */ = { - isa = PBXGroup; - children = ( - CDF6231E219A869000690038 /* GCDWebServer */, - CDF62320219A869000690038 /* GCDWebServer.app */, - CDF62322219A869000690038 /* GCDWebServer.app */, - CDF62324219A869000690038 /* GCDWebServers.framework */, - CDF62326219A869000690038 /* GCDWebServers.framework */, - CDF62328219A869000690038 /* GCDWebServers.framework */, - CDF6232A219A869000690038 /* Tests.xctest */, - ); - name = Products; - sourceTree = ""; - }; CDF62333219A895D00690038 /* kordophone */ = { isa = PBXGroup; children = ( - CD14F182219E2A4C00E7DD22 /* Crypto */, CD83E150219BDB4F00F4CCEA /* Hooking */, 1A0C446D219A4BCD00F2AC00 /* Bridge */, CDF62334219A895D00690038 /* main.m */, @@ -323,6 +522,41 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ + 1ACFCDDF219EB28A00E2C237 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 1ACFCFCB219EB2AC00E2C237 /* DDLog.h in Headers */, + 1ACFCF40219EB2AC00E2C237 /* MultipartFormDataParser.h in Headers */, + 1ACFCF2F219EB2AC00E2C237 /* HTTPAsyncFileResponse.h in Headers */, + 1ACFCF37219EB2AC00E2C237 /* HTTPDataResponse.h in Headers */, + 1ACFCF45219EB2AC00E2C237 /* MultipartMessageHeaderField.h in Headers */, + 1ACFCF3A219EB2AC00E2C237 /* HTTPDynamicFileResponse.h in Headers */, + 1ACFCFCC219EB2AC00E2C237 /* DDAbstractDatabaseLogger.h in Headers */, + 1ACFCFD6219EB2AC00E2C237 /* DDTTYLogger.h in Headers */, + 1ACFCF4C219EB2AC00E2C237 /* DDData.h in Headers */, + 1ACFCF2D219EB2AC00E2C237 /* WebSocket.h in Headers */, + 1ACFCF49219EB2AC00E2C237 /* DDRange.h in Headers */, + 1ACFCF32219EB2AC00E2C237 /* HTTPRedirectResponse.h in Headers */, + 1ACFCF2E219EB2AC00E2C237 /* HTTPAuthenticationRequest.h in Headers */, + 1ACFCFDC219EB2AC00E2C237 /* GCDAsyncSocket.h in Headers */, + 1ACFCF4A219EB2AC00E2C237 /* DDNumber.h in Headers */, + 1ACFCFE1219EB37000E2C237 /* CocoaHTTPServer.h in Headers */, + 1ACFCF3F219EB2AC00E2C237 /* HTTPResponse.h in Headers */, + 1ACFCF39219EB2AC00E2C237 /* HTTPFileResponse.h in Headers */, + 1ACFCFCF219EB2AC00E2C237 /* ContextFilterLogFormatter.h in Headers */, + 1ACFCF3B219EB2AC00E2C237 /* HTTPServer.h in Headers */, + 1ACFCF41219EB2AC00E2C237 /* MultipartMessageHeader.h in Headers */, + 1ACFCF38219EB2AC00E2C237 /* HTTPErrorResponse.h in Headers */, + 1ACFCF2B219EB2AC00E2C237 /* HTTPLogging.h in Headers */, + 1ACFCFD0219EB2AC00E2C237 /* DispatchQueueLogFormatter.h in Headers */, + 1ACFCF2C219EB2AC00E2C237 /* HTTPMessage.h in Headers */, + 1ACFCFD9219EB2AC00E2C237 /* DDASLLogger.h in Headers */, + 1ACFCFCE219EB2AC00E2C237 /* DDFileLogger.h in Headers */, + 1ACFCF2A219EB2AC00E2C237 /* HTTPConnection.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; CD83E15D219BE91500F4CCEA /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -333,6 +567,24 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ + 1ACFCDE1219EB28A00E2C237 /* CocoaHTTPServer */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1ACFCDF0219EB28A00E2C237 /* Build configuration list for PBXNativeTarget "CocoaHTTPServer" */; + buildPhases = ( + 1ACFCDDD219EB28A00E2C237 /* Sources */, + 1ACFCDDE219EB28A00E2C237 /* Frameworks */, + 1ACFCDDF219EB28A00E2C237 /* Headers */, + 1ACFCDE0219EB28A00E2C237 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = CocoaHTTPServer; + productName = CocoaHTTPServer; + productReference = 1ACFCDE2219EB28A00E2C237 /* CocoaHTTPServer.framework */; + productType = "com.apple.product-type.framework"; + }; CD14F18A219E2DB400E7DD22 /* Tests */ = { isa = PBXNativeTarget; buildConfigurationList = CD14F190219E2DB400E7DD22 /* Build configuration list for PBXNativeTarget "Tests" */; @@ -378,8 +630,8 @@ buildRules = ( ); dependencies = ( + 1ACFCFDE219EB30E00E2C237 /* PBXTargetDependency */, CD83E16B219BE9AB00F4CCEA /* PBXTargetDependency */, - CDF6233C219A8A6600690038 /* PBXTargetDependency */, ); name = kordophoned; productName = kordophone; @@ -395,6 +647,9 @@ LastUpgradeCheck = 1100; ORGANIZATIONNAME = "James Magahern"; TargetAttributes = { + 1ACFCDE1219EB28A00E2C237 = { + CreatedOnToolsVersion = 9.3; + }; CD14F18A219E2DB400E7DD22 = { CreatedOnToolsVersion = 11.0; }; @@ -413,78 +668,35 @@ knownRegions = ( en, Base, + English, ); mainGroup = 1A0C443E219A38E100F2AC00; productRefGroup = 1A0C4448219A38E100F2AC00 /* Products */; projectDirPath = ""; - projectReferences = ( - { - ProductGroup = CDF62313219A869000690038 /* Products */; - ProjectRef = CDF62312219A869000690038 /* GCDWebServer.xcodeproj */; - }, - ); projectRoot = ""; targets = ( CDF62331219A895D00690038 /* kordophoned */, CD83E160219BE91500F4CCEA /* agentHook */, CD14F18A219E2DB400E7DD22 /* Tests */, + 1ACFCDE1219EB28A00E2C237 /* CocoaHTTPServer */, ); }; /* End PBXProject section */ -/* Begin PBXReferenceProxy section */ - CDF6231E219A869000690038 /* GCDWebServer */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.executable"; - path = GCDWebServer; - remoteRef = CDF6231D219A869000690038 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CDF62320219A869000690038 /* GCDWebServer.app */ = { - isa = PBXReferenceProxy; - fileType = wrapper.application; - path = GCDWebServer.app; - remoteRef = CDF6231F219A869000690038 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CDF62322219A869000690038 /* GCDWebServer.app */ = { - isa = PBXReferenceProxy; - fileType = wrapper.application; - path = GCDWebServer.app; - remoteRef = CDF62321219A869000690038 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CDF62324219A869000690038 /* GCDWebServers.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = GCDWebServers.framework; - remoteRef = CDF62323219A869000690038 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CDF62326219A869000690038 /* GCDWebServers.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = GCDWebServers.framework; - remoteRef = CDF62325219A869000690038 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CDF62328219A869000690038 /* GCDWebServers.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = GCDWebServers.framework; - remoteRef = CDF62327219A869000690038 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CDF6232A219A869000690038 /* Tests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = Tests.xctest; - remoteRef = CDF62329219A869000690038 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - /* Begin PBXResourcesBuildPhase section */ + 1ACFCDE0219EB28A00E2C237 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1ACFCFD5219EB2AC00E2C237 /* About.txt in Resources */, + 1ACFCFD3219EB2AC00E2C237 /* README.txt in Resources */, + 1ACFCF27219EB2AC00E2C237 /* LICENSE.txt in Resources */, + 1ACFCFDB219EB2AC00E2C237 /* About.txt in Resources */, + 1ACFCF26219EB2AC00E2C237 /* Info.plist in Resources */, + 1ACFCF29219EB2AC00E2C237 /* README.markdown in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; CD14F189219E2DB400E7DD22 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -495,11 +707,42 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 1ACFCDDD219EB28A00E2C237 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1ACFCFD1219EB2AC00E2C237 /* ContextFilterLogFormatter.m in Sources */, + 1ACFCF3E219EB2AC00E2C237 /* WebSocket.m in Sources */, + 1ACFCFD4219EB2AC00E2C237 /* DDLog.m in Sources */, + 1ACFCF30219EB2AC00E2C237 /* HTTPErrorResponse.m in Sources */, + 1ACFCFD7219EB2AC00E2C237 /* DDAbstractDatabaseLogger.m in Sources */, + 1ACFCFD2219EB2AC00E2C237 /* DispatchQueueLogFormatter.m in Sources */, + 1ACFCF47219EB2AC00E2C237 /* DDNumber.m in Sources */, + 1ACFCF44219EB2AC00E2C237 /* MultipartMessageHeader.m in Sources */, + 1ACFCF4B219EB2AC00E2C237 /* DDRange.m in Sources */, + 1ACFCF31219EB2AC00E2C237 /* HTTPDataResponse.m in Sources */, + 1ACFCF34219EB2AC00E2C237 /* HTTPFileResponse.m in Sources */, + 1ACFCFCA219EB2AC00E2C237 /* DDTTYLogger.m in Sources */, + 1ACFCF48219EB2AC00E2C237 /* DDData.m in Sources */, + 1ACFCF33219EB2AC00E2C237 /* HTTPDynamicFileResponse.m in Sources */, + 1ACFCF4D219EB2AC00E2C237 /* HTTPServer.m in Sources */, + 1ACFCF42219EB2AC00E2C237 /* MultipartMessageHeaderField.m in Sources */, + 1ACFCF43219EB2AC00E2C237 /* MultipartFormDataParser.m in Sources */, + 1ACFCF3D219EB2AC00E2C237 /* HTTPConnection.m in Sources */, + 1ACFCFDA219EB2AC00E2C237 /* GCDAsyncSocket.m in Sources */, + 1ACFCFCD219EB2AC00E2C237 /* DDASLLogger.m in Sources */, + 1ACFCFD8219EB2AC00E2C237 /* DDFileLogger.m in Sources */, + 1ACFCF36219EB2AC00E2C237 /* HTTPRedirectResponse.m in Sources */, + 1ACFCF3C219EB2AC00E2C237 /* HTTPMessage.m in Sources */, + 1ACFCF46219EB2AC00E2C237 /* HTTPAuthenticationRequest.m in Sources */, + 1ACFCF35219EB2AC00E2C237 /* HTTPAsyncFileResponse.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; CD14F187219E2DB400E7DD22 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - CD14F194219E2F9C00E7DD22 /* NSData+AES.m in Sources */, CD14F18E219E2DB400E7DD22 /* CryptoTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -516,32 +759,33 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 1AA43E91219EBC2C00EDF1A7 /* MBIMHTTPConnection.m in Sources */, CDF62339219A8A5600690038 /* MBIMBridge.h in Sources */, + 1AA43E95219EC38E00EDF1A7 /* MBIMHTTPUtilities.m in Sources */, CD83E156219BE10A00F4CCEA /* hooking.m in Sources */, CDF6233A219A8A5600690038 /* MBIMBridge.m in Sources */, CDF62335219A895D00690038 /* main.m in Sources */, CD60205C219B623F0024D9C5 /* MBIMMessagesListOperation.m in Sources */, - CD14F185219E2A6800E7DD22 /* NSData+AES.m in Sources */, - CD14F19E219E306C00E7DD22 /* GCDWebServerDataResponse+Crypto.m in Sources */, CD602062219B68950024D9C5 /* MBIMSendMessageOperation.m in Sources */, CD602056219B5DFD0024D9C5 /* MBIMBridgeOperation.m in Sources */, CD60205F219B674B0024D9C5 /* MBIMConversationListOperation.m in Sources */, + 1AA43E8F219EBB2D00EDF1A7 /* MBIMJSONDataResponse.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 1ACFCFDE219EB30E00E2C237 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 1ACFCDE1219EB28A00E2C237 /* CocoaHTTPServer */; + targetProxy = 1ACFCFDD219EB30E00E2C237 /* PBXContainerItemProxy */; + }; CD83E16B219BE9AB00F4CCEA /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = CD83E160219BE91500F4CCEA /* agentHook */; targetProxy = CD83E16A219BE9AB00F4CCEA /* PBXContainerItemProxy */; }; - CDF6233C219A8A6600690038 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "GCDWebServers (Mac)"; - targetProxy = CDF6233B219A8A6600690038 /* PBXContainerItemProxy */; - }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ @@ -664,6 +908,63 @@ }; name = Release; }; + 1ACFCDE7219EB28A00E2C237 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + INFOPLIST_FILE = CocoaHTTPServer/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.github.CocoaHTTPServer; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 1ACFCDE8219EB28A00E2C237 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + INFOPLIST_FILE = CocoaHTTPServer/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.github.CocoaHTTPServer; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; CD14F191219E2DB400E7DD22 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -772,6 +1073,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 1ACFCDF0219EB28A00E2C237 /* Build configuration list for PBXNativeTarget "CocoaHTTPServer" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1ACFCDE7219EB28A00E2C237 /* Debug */, + 1ACFCDE8219EB28A00E2C237 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; CD14F190219E2DB400E7DD22 /* Build configuration list for PBXNativeTarget "Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/kordophone/Bridge/MBIMBridge.h b/kordophone/Bridge/MBIMBridge.h index ce00681..a6a5572 100644 --- a/kordophone/Bridge/MBIMBridge.h +++ b/kordophone/Bridge/MBIMBridge.h @@ -14,7 +14,8 @@ NS_ASSUME_NONNULL_BEGIN @interface MBIMBridge : NSObject -@property (nonatomic, assign) const char *dylibPath; +@property (nonatomic, assign) const char *dylibPath; +@property (nonatomic, readonly) NSOperationQueue *operationQueue; + (instancetype)sharedInstance; diff --git a/kordophone/Bridge/MBIMBridge.m b/kordophone/Bridge/MBIMBridge.m index 348143c..76b74fc 100644 --- a/kordophone/Bridge/MBIMBridge.m +++ b/kordophone/Bridge/MBIMBridge.m @@ -8,9 +8,10 @@ #import "MBIMBridge.h" #import "MBIMBridgeOperation.h" +#import "MBIMHTTPConnection.h" #import "hooking.h" -#import +#import #import #import @@ -21,7 +22,7 @@ static NSString *const MBIMBridgeToken = @"net.buzzert.kordophone"; @interface MBIMBridge (/* INTERNAL */) -@property (nonatomic, strong) GCDWebServer *webServer; +@property (nonatomic, strong) HTTPServer *httpServer; @property (nonatomic, strong) NSOperationQueue *operationQueue; - (instancetype)_init; @@ -130,33 +131,16 @@ static NSString *const MBIMBridgeToken = @"net.buzzert.kordophone"; #pragma mark - #pragma mark Web Server initialization -- (void)_handleAsyncServerRequest:(GCDWebServerRequest *)request completion:(GCDWebServerCompletionBlock)completion -{ - NSString *endpointName = [[request URL] lastPathComponent]; - Class operationClass = [MBIMBridgeOperation operationClassForEndpointName:endpointName]; - if (operationClass != nil) { - MBIMBridgeOperation *operation = [[operationClass alloc] initWithRequest:request completion:completion]; - [[self operationQueue] addOperation:operation]; - } else { - completion([GCDWebServerDataResponse responseWithStatusCode:404]); - } -} - - (void)startWebServer { - [GCDWebServer setLogLevel:3]; + self.httpServer = [[HTTPServer alloc] init]; + [self.httpServer setConnectionClass:[MBIMHTTPConnection class]]; + [self.httpServer setPort:8080]; - __auto_type __weak weakSelf = self; - self.webServer = [[GCDWebServer alloc] init]; - [self.webServer addDefaultHandlerForMethod:@"GET" - requestClass:[GCDWebServerRequest class] - asyncProcessBlock:^(__kindof GCDWebServerRequest * _Nonnull request, GCDWebServerCompletionBlock _Nonnull completionBlock) { [weakSelf _handleAsyncServerRequest:request completion:completionBlock]; }]; - - [self.webServer addDefaultHandlerForMethod:@"POST" - requestClass:[GCDWebServerURLEncodedFormRequest class] - asyncProcessBlock:^(__kindof GCDWebServerRequest * _Nonnull request, GCDWebServerCompletionBlock _Nonnull completionBlock) { [weakSelf _handleAsyncServerRequest:request completion:completionBlock]; }]; - - [self.webServer startWithPort:8080 bonjourName:nil]; + NSError *error = nil; + if (![self.httpServer start:&error]) { + NSLog(@"Error starting HTTP server: %@", [error localizedDescription]); + } } #pragma mark - diff --git a/kordophone/Bridge/MBIMHTTPConnection.h b/kordophone/Bridge/MBIMHTTPConnection.h new file mode 100644 index 0000000..f6bae1b --- /dev/null +++ b/kordophone/Bridge/MBIMHTTPConnection.h @@ -0,0 +1,13 @@ +// +// MBIMHTTPConnection.h +// CocoaHTTPServer +// +// Created by James Magahern on 11/16/18. +// Copyright © 2018 James Magahern. All rights reserved. +// + +#import + +@interface MBIMHTTPConnection : HTTPConnection + +@end diff --git a/kordophone/Bridge/MBIMHTTPConnection.m b/kordophone/Bridge/MBIMHTTPConnection.m new file mode 100644 index 0000000..1d748d6 --- /dev/null +++ b/kordophone/Bridge/MBIMHTTPConnection.m @@ -0,0 +1,70 @@ +// +// MBIMHTTPConnection.m +// CocoaHTTPServer +// +// Created by James Magahern on 11/16/18. +// Copyright © 2018 James Magahern. All rights reserved. +// + +#import "MBIMHTTPConnection.h" +#import "MBIMBridge.h" +#import "MBIMBridgeOperation.h" + +@implementation MBIMHTTPConnection { + NSMutableData *_bodyData; +} + +- (BOOL)supportsMethod:(NSString *)method atPath:(NSString *)path +{ + if ([method isEqualToString:@"GET"] || [method isEqualToString:@"POST"]) { + return YES; + } + + return NO; +} + +- (NSObject *)httpResponseForMethod:(NSString *)method URI:(NSString *)path +{ + __block NSObject *response = nil; + dispatch_semaphore_t sema = dispatch_semaphore_create(0); + MBIMBridgeOperationCompletionBlock completion = ^(NSObject *incomingResponse) { + response = incomingResponse; + dispatch_semaphore_signal(sema); + }; + + NSURL *url = [NSURL URLWithString:path]; + NSString *endpointName = [url lastPathComponent]; + Class operationClass = [MBIMBridgeOperation operationClassForEndpointName:endpointName]; + if (operationClass != nil) { + MBIMBridgeOperation *operation = [[operationClass alloc] initWithRequestURL:url completion:completion]; + operation.requestBodyData = _bodyData; + + [[[MBIMBridge sharedInstance] operationQueue] addOperation:operation]; + dispatch_semaphore_wait(sema, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10.0 * NSEC_PER_SEC))); + } else { + response = [[HTTPErrorResponse alloc] initWithErrorCode:404]; + } + + return response; +} + +- (BOOL)expectsRequestBodyFromMethod:(NSString *)method atPath:(NSString *)path +{ + if ([method isEqualToString:@"POST"]) { + return YES; + } + + return NO; +} + +- (void)prepareForBodyWithSize:(UInt64)contentLength +{ + _bodyData = [[NSMutableData alloc] initWithCapacity:contentLength]; +} + +- (void)processBodyData:(NSData *)postDataChunk +{ + [_bodyData appendData:postDataChunk]; +} + +@end diff --git a/kordophone/Bridge/Operations/MBIMBridgeOperation.h b/kordophone/Bridge/Operations/MBIMBridgeOperation.h index 8b3894d..895e5bf 100644 --- a/kordophone/Bridge/Operations/MBIMBridgeOperation.h +++ b/kordophone/Bridge/Operations/MBIMBridgeOperation.h @@ -7,18 +7,23 @@ // #import -#import +#import + +#import "MBIMJSONDataResponse.h" NS_ASSUME_NONNULL_BEGIN +typedef void (^MBIMBridgeOperationCompletionBlock)(NSObject * _Nullable response); + @interface MBIMBridgeOperation : NSOperation @property (class, nonatomic, readonly) NSString *endpointName; -@property (nonatomic, readonly) GCDWebServerRequest *request; -@property (nonatomic, readonly) GCDWebServerCompletionBlock serverCompletionBlock; +@property (nonatomic, strong) NSData *requestBodyData; +@property (nonatomic, readonly) NSURL *requestURL; +@property (nonatomic, readonly) MBIMBridgeOperationCompletionBlock serverCompletionBlock; + (nullable Class)operationClassForEndpointName:(NSString *)endpointName; -- (instancetype)initWithRequest:(GCDWebServerRequest *)request completion:(GCDWebServerCompletionBlock)completionBlock; +- (instancetype)initWithRequestURL:(NSURL *)requestURL completion:(MBIMBridgeOperationCompletionBlock)completionBlock; @end diff --git a/kordophone/Bridge/Operations/MBIMBridgeOperation.m b/kordophone/Bridge/Operations/MBIMBridgeOperation.m index 883489e..ebab0b1 100644 --- a/kordophone/Bridge/Operations/MBIMBridgeOperation.m +++ b/kordophone/Bridge/Operations/MBIMBridgeOperation.m @@ -9,8 +9,8 @@ #import "MBIMBridgeOperation.h" @interface MBIMBridgeOperation (/*INTERNAL*/) -@property (nonatomic, copy) GCDWebServerCompletionBlock serverCompletionBlock; -@property (nonatomic, strong) GCDWebServerRequest *request; +@property (nonatomic, strong) NSURL *requestURL; +@property (nonatomic, copy) MBIMBridgeOperationCompletionBlock serverCompletionBlock; @end @implementation MBIMBridgeOperation @@ -44,11 +44,11 @@ return [[self _operationClassMapping] objectForKey:endpointName]; } -- (instancetype)initWithRequest:(GCDWebServerRequest *)request completion:(GCDWebServerCompletionBlock)completionBlock +- (instancetype)initWithRequestURL:(NSURL *)requestURL completion:(MBIMBridgeOperationCompletionBlock)completionBlock { self = [super init]; if (self) { - self.request = request; + self.requestURL = requestURL; self.serverCompletionBlock = completionBlock; } diff --git a/kordophone/Bridge/Operations/MBIMConversationListOperation.m b/kordophone/Bridge/Operations/MBIMConversationListOperation.m index 84ad63c..515d0ca 100644 --- a/kordophone/Bridge/Operations/MBIMConversationListOperation.m +++ b/kordophone/Bridge/Operations/MBIMConversationListOperation.m @@ -7,6 +7,7 @@ // #import "MBIMConversationListOperation.h" +#import "MBIMHTTPUtilities.h" #import @@ -28,7 +29,7 @@ NSMutableDictionary *chatDict = [NSMutableDictionary dictionary]; chatDict[@"guid"] = [chat guid]; chatDict[@"displayName"] = [chat displayName]; - chatDict[@"date"] = GCDWebServerFormatRFC822([chat lastFinishedMessageDate]); + chatDict[@"date"] = MBIMWebServerFormatRFC822([chat lastFinishedMessageDate]); IMMessage *lastMessage = [chat lastMessage]; if (lastMessage) { @@ -48,7 +49,7 @@ [conversations addObject:chatDict]; } - GCDWebServerResponse *response = [GCDWebServerDataResponse responseWithJSONObject:conversations]; + MBIMJSONDataResponse *response = [MBIMJSONDataResponse responseWithJSONObject:conversations]; self.serverCompletionBlock(response); } diff --git a/kordophone/Bridge/Operations/MBIMMessagesListOperation.m b/kordophone/Bridge/Operations/MBIMMessagesListOperation.m index d9be1b1..9f34d62 100644 --- a/kordophone/Bridge/Operations/MBIMMessagesListOperation.m +++ b/kordophone/Bridge/Operations/MBIMMessagesListOperation.m @@ -7,6 +7,7 @@ // #import "MBIMMessagesListOperation.h" +#import "MBIMHTTPUtilities.h" #import @@ -21,9 +22,9 @@ - (void)main { - GCDWebServerResponse *response = nil; + NSObject *response = nil; do { - NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:[self.request URL] resolvingAgainstBaseURL:NO]; + NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:self.requestURL resolvingAgainstBaseURL:NO]; NSString *guid = nil; for (NSURLQueryItem *queryItem in [urlComponents queryItems]) { @@ -35,14 +36,14 @@ if (!guid) { NSLog(@"No query item provided"); - response = [GCDWebServerDataResponse responseWithStatusCode:500]; + response = [[HTTPErrorResponse alloc] initWithErrorCode:500]; break; } IMChat *chat = [sChatRegistry existingChatWithGUID:guid]; if (!chat) { NSLog(@"Chat with guid: %@ not found", guid); - response = [GCDWebServerDataResponse responseWithStatusCode:500]; + response = [[HTTPErrorResponse alloc] initWithErrorCode:500]; break; } @@ -53,12 +54,12 @@ for (IMMessageItem *imMessage in [[chat chatItems] messages]) { NSMutableDictionary *messageDict = [NSMutableDictionary dictionary]; messageDict[@"text"] = [[imMessage body] string]; - messageDict[@"date"] = GCDWebServerFormatRFC822([imMessage time]); + messageDict[@"date"] = MBIMWebServerFormatRFC822([imMessage time]); messageDict[@"sender"] = [imMessage sender]; [messages addObject:messageDict]; } - response = [GCDWebServerDataResponse responseWithJSONObject:messages]; + response = [MBIMJSONDataResponse responseWithJSONObject:messages]; } while (0); self.serverCompletionBlock(response); diff --git a/kordophone/Bridge/Operations/MBIMSendMessageOperation.m b/kordophone/Bridge/Operations/MBIMSendMessageOperation.m index 907c6c9..5b8e2e7 100644 --- a/kordophone/Bridge/Operations/MBIMSendMessageOperation.m +++ b/kordophone/Bridge/Operations/MBIMSendMessageOperation.m @@ -41,20 +41,25 @@ - (void)main { - assert([self.request isKindOfClass:[GCDWebServerURLEncodedFormRequest class]]); + NSObject *response = [[HTTPErrorResponse alloc] initWithErrorCode:500]; - GCDWebServerURLEncodedFormRequest *formRequest = (GCDWebServerURLEncodedFormRequest *)self.request; - NSDictionary *args = [formRequest arguments]; + NSError *error = nil; + NSDictionary *args = [NSJSONSerialization JSONObjectWithData:self.requestBodyData options:0 error:&error]; + if (error || args.count == 0) { + self.serverCompletionBlock(response); + return; + } NSString *guid = [args objectForKey:@"guid"]; NSString *messageBody = [args objectForKey:@"body"]; - BOOL result = [self _sendMessage:messageBody toChatWithGUID:guid]; + if (!guid || !messageBody) { + self.serverCompletionBlock(response); + return; + } - GCDWebServerResponse *response = nil; + BOOL result = [self _sendMessage:messageBody toChatWithGUID:guid]; if (result) { - response = [GCDWebServerDataResponse responseWithStatusCode:200]; - } else { - response = [GCDWebServerDataResponse responseWithStatusCode:500]; + response = [[HTTPErrorResponse alloc] initWithErrorCode:200]; } self.serverCompletionBlock(response); diff --git a/kordophone/Bridge/Operations/Utilities/MBIMHTTPUtilities.h b/kordophone/Bridge/Operations/Utilities/MBIMHTTPUtilities.h new file mode 100644 index 0000000..10f03d6 --- /dev/null +++ b/kordophone/Bridge/Operations/Utilities/MBIMHTTPUtilities.h @@ -0,0 +1,11 @@ +// +// MBIMHTTPUtilities.h +// kordophoned +// +// Created by James Magahern on 11/16/18. +// Copyright © 2018 James Magahern. All rights reserved. +// + +#import + +NSString* MBIMWebServerFormatRFC822(NSDate *date); diff --git a/kordophone/Bridge/Operations/Utilities/MBIMHTTPUtilities.m b/kordophone/Bridge/Operations/Utilities/MBIMHTTPUtilities.m new file mode 100644 index 0000000..61bbd1a --- /dev/null +++ b/kordophone/Bridge/Operations/Utilities/MBIMHTTPUtilities.m @@ -0,0 +1,33 @@ +// +// MBIMHTTPUtilities.c +// kordophoned +// +// Created by James Magahern on 11/16/18. +// Copyright © 2018 James Magahern. All rights reserved. +// + +#include "MBIMHTTPUtilities.h" + +static NSDateFormatter* _dateFormatterRFC822 = nil; +static dispatch_queue_t _dateFormatterQueue = NULL; + +__attribute__((constructor)) +static void __InitializeDateFormatter() +{ + _dateFormatterQueue = dispatch_queue_create("dateFormatter", DISPATCH_QUEUE_SERIAL); + + _dateFormatterRFC822 = [[NSDateFormatter alloc] init]; + _dateFormatterRFC822.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; + _dateFormatterRFC822.dateFormat = @"EEE',' dd MMM yyyy HH':'mm':'ss 'GMT'"; + _dateFormatterRFC822.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; +} + +NSString* MBIMWebServerFormatRFC822(NSDate *date) +{ + __block NSString *string = nil; + dispatch_sync(_dateFormatterQueue, ^{ + string = [_dateFormatterRFC822 stringFromDate:date]; + }); + + return string; +} diff --git a/kordophone/Bridge/Operations/Utilities/MBIMJSONDataResponse.h b/kordophone/Bridge/Operations/Utilities/MBIMJSONDataResponse.h new file mode 100644 index 0000000..71f1756 --- /dev/null +++ b/kordophone/Bridge/Operations/Utilities/MBIMJSONDataResponse.h @@ -0,0 +1,16 @@ +// +// MBIMJSONDataResponse.h +// kordophoned +// +// Created by James Magahern on 11/16/18. +// Copyright © 2018 James Magahern. All rights reserved. +// + +#import +#import + +@interface MBIMJSONDataResponse : HTTPDataResponse + ++ (instancetype)responseWithJSONObject:(id)object; + +@end diff --git a/kordophone/Bridge/Operations/Utilities/MBIMJSONDataResponse.m b/kordophone/Bridge/Operations/Utilities/MBIMJSONDataResponse.m new file mode 100644 index 0000000..ec59aae --- /dev/null +++ b/kordophone/Bridge/Operations/Utilities/MBIMJSONDataResponse.m @@ -0,0 +1,32 @@ +// +// MBIMJSONDataResponse.m +// kordophoned +// +// Created by James Magahern on 11/16/18. +// Copyright © 2018 James Magahern. All rights reserved. +// + +#import "MBIMJSONDataResponse.h" + +@implementation MBIMJSONDataResponse + ++ (instancetype)responseWithJSONObject:(id)object +{ + NSData *data = [NSJSONSerialization dataWithJSONObject:object options:0 error:NULL]; + if (data == nil) { + return nil; + } + + MBIMJSONDataResponse *response = [[self alloc] initWithData:data]; + + return response; +} + +- (NSDictionary *)httpHeaders +{ + return @{ + @"Content-Type" : @"application/json; charset=utf-8" + }; +} + +@end diff --git a/kordophone/Crypto/GCDWebServerDataResponse+Crypto.h b/kordophone/Crypto/GCDWebServerDataResponse+Crypto.h deleted file mode 100644 index 6b9ab04..0000000 --- a/kordophone/Crypto/GCDWebServerDataResponse+Crypto.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// GCDWebServerDataResponse+Crypto.h -// kordophoned -// -// Created by James Magahern on 11/15/18. -// Copyright © 2018 James Magahern. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface GCDWebServerDataResponse (Crypto) - -+ (nullable instancetype)encryptedResponseWithJSONObject:(id)object; - -@end - -NS_ASSUME_NONNULL_END - diff --git a/kordophone/Crypto/GCDWebServerDataResponse+Crypto.m b/kordophone/Crypto/GCDWebServerDataResponse+Crypto.m deleted file mode 100644 index 793b83a..0000000 --- a/kordophone/Crypto/GCDWebServerDataResponse+Crypto.m +++ /dev/null @@ -1,44 +0,0 @@ -// -// GCDWebServerDataResponse+Crypto.m -// kordophoned -// -// Created by James Magahern on 11/15/18. -// Copyright © 2018 James Magahern. All rights reserved. -// - -#import "GCDWebServerDataResponse+Crypto.h" - -#import "NSData+AES.h" - -// TEMP!! -static NSString *const kSymmetricKey = @"axPy0nljtG/TOVJSVwVXag=="; - -@implementation GCDWebServerDataResponse (Crypto) - -+ (nullable instancetype)encryptedResponseWithJSONObject:(id)object -{ - NSData *data = [NSJSONSerialization dataWithJSONObject:object options:0 error:NULL]; - if (data == nil) { - return nil; - } - - NSError *error = nil; - NSData *ivData = [[[NSUUID UUID] UUIDString] dataUsingEncoding:NSUTF8StringEncoding]; - NSData *keyData = [[NSData alloc] initWithBase64EncodedString:kSymmetricKey options:0]; - NSData *encryptedData = [data encryptedDataWithKey:keyData iv:ivData error:&error]; - if (error) { - NSLog(@"Error encrypting response: %@", error); - } - - NSString *ivDataString = [ivData base64EncodedStringWithOptions:0]; - - GCDWebServerDataResponse *response = [[self alloc] initWithData:encryptedData contentType:@"application/octet-stream"]; - [response setValue:ivDataString forAdditionalHeader:@"X-KordophoneCrypto-IV"]; - - // TODO: is this the right way?? - [response setValue:[NSString stringWithFormat:@"%lu", (unsigned long)[data length]] forAdditionalHeader:@"X-Decrypted-Content-Length"]; - - return response; -} - -@end diff --git a/kordophone/Crypto/NSData+AES.h b/kordophone/Crypto/NSData+AES.h deleted file mode 100644 index 7530ba7..0000000 --- a/kordophone/Crypto/NSData+AES.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// NSData+AES.h -// MessagesBridge -// -// Created by James Magahern on 11/15/18. -// Copyright © 2018 James Magahern. All rights reserved. -// - -#import -#import - -@interface NSData (AES) - -- (NSData *)encryptedDataWithKey:(NSData *)key iv:(NSData *)iv error:(NSError **)error; -- (NSData *)decryptedDataWithKey:(NSData *)key iv:(NSData *)iv error:(NSError **)error; - -@end diff --git a/kordophone/Crypto/NSData+AES.m b/kordophone/Crypto/NSData+AES.m deleted file mode 100644 index d69614c..0000000 --- a/kordophone/Crypto/NSData+AES.m +++ /dev/null @@ -1,58 +0,0 @@ -// -// NSData+AES.m -// MessagesBridge -// -// Created by James Magahern on 11/15/18. -// Copyright © 2018 James Magahern. All rights reserved. -// - -#import "NSData+AES.h" - -@implementation NSData (AES) - -+ (NSData *)AES128Operation:(CCOperation)operation - withInputData:(NSData *)inputData - key:(NSData *)key - iv:(NSData *)iv - error:(NSError **)error -{ - size_t dataMoved = 0; - NSMutableData *outputData = [NSMutableData dataWithLength:(inputData.length + kCCBlockSizeAES128)]; - CCCryptorStatus status = CCCrypt( - operation, - kCCAlgorithmAES, - kCCOptionPKCS7Padding, - key.bytes, - key.length, - iv.bytes, - inputData.bytes, - inputData.length, - outputData.mutableBytes, - outputData.length, - &dataMoved - ); - - if (status == kCCSuccess) { - outputData.length = dataMoved; - } else { - *error = [NSError errorWithDomain:@"CommonCryptoError" - code:status - userInfo:nil]; - - outputData = nil; - } - - return outputData; -} - -- (NSData *)encryptedDataWithKey:(NSData *)key iv:(NSData *)iv error:(NSError *__autoreleasing *)error -{ - return [[self class] AES128Operation:kCCEncrypt withInputData:self key:key iv:iv error:error]; -} - -- (NSData *)decryptedDataWithKey:(NSData *)key iv:(NSData *)iv error:(NSError *__autoreleasing *)error -{ - return [[self class] AES128Operation:kCCDecrypt withInputData:self key:key iv:iv error:error]; -} - -@end