More work getting File Based Response Class working - HTC8 #time 1h

This commit is contained in:
Justin Hammond 2012-09-11 17:42:48 +08:00
parent 3567e042d8
commit a6d1359c57
9 changed files with 627 additions and 137 deletions

17
.gitignore vendored Normal file
View file

@ -0,0 +1,17 @@
# files created by Xcode 3 or older
*.pbxuser
*.mode1
*.mode1v3
*.mode2v3
*.perspectivev3
*.xcclassmodel/
# files created by Xcode 4
xcuserdata/
# build products
*.build/
build/
DerivedData/
# Misc
.svn
.DS_Store
*~

View file

@ -0,0 +1,426 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
12533B7415FF10F300D38F60 /* http_request.h in Headers */ = {isa = PBXBuildFile; fileRef = 12533B6E15FF10F300D38F60 /* http_request.h */; };
12533B7515FF10F300D38F60 /* http_response.h in Headers */ = {isa = PBXBuildFile; fileRef = 12533B6F15FF10F300D38F60 /* http_response.h */; };
12533B7615FF10F300D38F60 /* HTTPClient.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 12533B7015FF10F300D38F60 /* HTTPClient.hpp */; };
12533B7715FF10F300D38F60 /* HTTPClientConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 12533B7115FF10F300D38F60 /* HTTPClientConfig.h */; };
12533B9315FF111200D38F60 /* http_request.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12533B8415FF111100D38F60 /* http_request.cpp */; };
12533B9415FF111200D38F60 /* http_response.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12533B8515FF111100D38F60 /* http_response.cpp */; };
12533BB215FF116800D38F60 /* httpclient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12533BAD15FF116800D38F60 /* httpclient.cpp */; };
12533BB915FF140900D38F60 /* libboost_date_time-mt.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 12533BB415FF140800D38F60 /* libboost_date_time-mt.dylib */; };
12533BBA15FF140900D38F60 /* libboost_filesystem-mt.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 12533BB515FF140800D38F60 /* libboost_filesystem-mt.dylib */; };
12533BBB15FF140900D38F60 /* libboost_regex-mt.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 12533BB615FF140900D38F60 /* libboost_regex-mt.dylib */; };
12533BBC15FF140900D38F60 /* libboost_system-mt.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 12533BB715FF140900D38F60 /* libboost_system-mt.dylib */; };
12533BBD15FF140900D38F60 /* libboost_thread-mt.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 12533BB815FF140900D38F60 /* libboost_thread-mt.dylib */; };
12533BBF15FF143A00D38F60 /* libssl.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 12533BBE15FF143A00D38F60 /* libssl.dylib */; };
12533BC115FF144B00D38F60 /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 12533BC015FF144B00D38F60 /* libcrypto.dylib */; };
12533BC415FF146700D38F60 /* HTTPClient.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 12533B4215FF0FEA00D38F60 /* HTTPClient.dylib */; };
12533BC515FF159D00D38F60 /* libboost_date_time-mt.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 12533BB415FF140800D38F60 /* libboost_date_time-mt.dylib */; };
12533BC615FF159D00D38F60 /* libboost_filesystem-mt.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 12533BB515FF140800D38F60 /* libboost_filesystem-mt.dylib */; };
12533BC715FF159D00D38F60 /* libboost_regex-mt.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 12533BB615FF140900D38F60 /* libboost_regex-mt.dylib */; };
12533BC815FF159D00D38F60 /* libboost_system-mt.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 12533BB715FF140900D38F60 /* libboost_system-mt.dylib */; };
12533BC915FF159D00D38F60 /* libboost_thread-mt.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 12533BB815FF140900D38F60 /* libboost_thread-mt.dylib */; };
12533BCC15FF15A400D38F60 /* libssl.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 12533BBE15FF143A00D38F60 /* libssl.dylib */; };
12533BCD15FF15AB00D38F60 /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 12533BC015FF144B00D38F60 /* libcrypto.dylib */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
12533BC215FF146200D38F60 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 12533B3915FF0FE800D38F60 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 12533B4115FF0FEA00D38F60;
remoteInfo = HTTPClient;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
12533B9A15FF115600D38F60 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = /usr/share/man/man1/;
dstSubfolderSpec = 0;
files = (
);
runOnlyForDeploymentPostprocessing = 1;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
12533B4215FF0FEA00D38F60 /* HTTPClient.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = HTTPClient.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
12533B6915FF10E400D38F60 /* HTTPClientProj.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = HTTPClientProj.xcconfig; path = xcode/HTTPClientProj.xcconfig; sourceTree = SOURCE_ROOT; };
12533B6A15FF10E400D38F60 /* HTTPClientTarget.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = HTTPClientTarget.xcconfig; path = xcode/HTTPClientTarget.xcconfig; sourceTree = SOURCE_ROOT; };
12533B6E15FF10F300D38F60 /* http_request.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = http_request.h; sourceTree = "<group>"; };
12533B6F15FF10F300D38F60 /* http_response.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = http_response.h; sourceTree = "<group>"; };
12533B7015FF10F300D38F60 /* HTTPClient.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = HTTPClient.hpp; sourceTree = "<group>"; };
12533B7115FF10F300D38F60 /* HTTPClientConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPClientConfig.h; sourceTree = "<group>"; };
12533B8415FF111100D38F60 /* http_request.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = http_request.cpp; sourceTree = "<group>"; };
12533B8515FF111100D38F60 /* http_response.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = http_response.cpp; sourceTree = "<group>"; };
12533B9C15FF115600D38F60 /* httpclient */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = httpclient; sourceTree = BUILT_PRODUCTS_DIR; };
12533BAD15FF116800D38F60 /* httpclient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = httpclient.cpp; sourceTree = "<group>"; };
12533BB415FF140800D38F60 /* libboost_date_time-mt.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libboost_date_time-mt.dylib"; path = "../../../../opt/local/lib/libboost_date_time-mt.dylib"; sourceTree = "<group>"; };
12533BB515FF140800D38F60 /* libboost_filesystem-mt.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libboost_filesystem-mt.dylib"; path = "../../../../opt/local/lib/libboost_filesystem-mt.dylib"; sourceTree = "<group>"; };
12533BB615FF140900D38F60 /* libboost_regex-mt.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libboost_regex-mt.dylib"; path = "../../../../opt/local/lib/libboost_regex-mt.dylib"; sourceTree = "<group>"; };
12533BB715FF140900D38F60 /* libboost_system-mt.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libboost_system-mt.dylib"; path = "../../../../opt/local/lib/libboost_system-mt.dylib"; sourceTree = "<group>"; };
12533BB815FF140900D38F60 /* libboost_thread-mt.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libboost_thread-mt.dylib"; path = "../../../../opt/local/lib/libboost_thread-mt.dylib"; sourceTree = "<group>"; };
12533BBE15FF143A00D38F60 /* libssl.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libssl.dylib; path = usr/lib/libssl.dylib; sourceTree = SDKROOT; };
12533BC015FF144B00D38F60 /* libcrypto.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcrypto.dylib; path = usr/lib/libcrypto.dylib; sourceTree = SDKROOT; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
12533B3F15FF0FEA00D38F60 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
12533BC115FF144B00D38F60 /* libcrypto.dylib in Frameworks */,
12533BBF15FF143A00D38F60 /* libssl.dylib in Frameworks */,
12533BB915FF140900D38F60 /* libboost_date_time-mt.dylib in Frameworks */,
12533BBA15FF140900D38F60 /* libboost_filesystem-mt.dylib in Frameworks */,
12533BBB15FF140900D38F60 /* libboost_regex-mt.dylib in Frameworks */,
12533BBC15FF140900D38F60 /* libboost_system-mt.dylib in Frameworks */,
12533BBD15FF140900D38F60 /* libboost_thread-mt.dylib in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
12533B9915FF115600D38F60 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
12533BCD15FF15AB00D38F60 /* libcrypto.dylib in Frameworks */,
12533BCC15FF15A400D38F60 /* libssl.dylib in Frameworks */,
12533BC515FF159D00D38F60 /* libboost_date_time-mt.dylib in Frameworks */,
12533BC615FF159D00D38F60 /* libboost_filesystem-mt.dylib in Frameworks */,
12533BC715FF159D00D38F60 /* libboost_regex-mt.dylib in Frameworks */,
12533BC815FF159D00D38F60 /* libboost_system-mt.dylib in Frameworks */,
12533BC915FF159D00D38F60 /* libboost_thread-mt.dylib in Frameworks */,
12533BC415FF146700D38F60 /* HTTPClient.dylib in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
12533B3715FF0FE700D38F60 = {
isa = PBXGroup;
children = (
12533BC015FF144B00D38F60 /* libcrypto.dylib */,
12533BBE15FF143A00D38F60 /* libssl.dylib */,
12533BB415FF140800D38F60 /* libboost_date_time-mt.dylib */,
12533BB515FF140800D38F60 /* libboost_filesystem-mt.dylib */,
12533BB615FF140900D38F60 /* libboost_regex-mt.dylib */,
12533BB715FF140900D38F60 /* libboost_system-mt.dylib */,
12533BB815FF140900D38F60 /* libboost_thread-mt.dylib */,
12533B4415FF0FEA00D38F60 /* HTTPClient */,
12533B4315FF0FEA00D38F60 /* Products */,
);
sourceTree = "<group>";
};
12533B4315FF0FEA00D38F60 /* Products */ = {
isa = PBXGroup;
children = (
12533B4215FF0FEA00D38F60 /* HTTPClient.dylib */,
12533B9C15FF115600D38F60 /* httpclient */,
);
name = Products;
sourceTree = "<group>";
};
12533B4415FF0FEA00D38F60 /* HTTPClient */ = {
isa = PBXGroup;
children = (
12533BA615FF116800D38F60 /* example */,
12533B7815FF111100D38F60 /* src */,
12533B6C15FF10F300D38F60 /* include */,
12533B6915FF10E400D38F60 /* HTTPClientProj.xcconfig */,
12533B6A15FF10E400D38F60 /* HTTPClientTarget.xcconfig */,
12533B4515FF0FEA00D38F60 /* Supporting Files */,
);
path = HTTPClient;
sourceTree = "<group>";
};
12533B4515FF0FEA00D38F60 /* Supporting Files */ = {
isa = PBXGroup;
children = (
);
name = "Supporting Files";
sourceTree = "<group>";
};
12533B6C15FF10F300D38F60 /* include */ = {
isa = PBXGroup;
children = (
12533B6D15FF10F300D38F60 /* HTTPClient */,
);
path = include;
sourceTree = SOURCE_ROOT;
};
12533B6D15FF10F300D38F60 /* HTTPClient */ = {
isa = PBXGroup;
children = (
12533B6E15FF10F300D38F60 /* http_request.h */,
12533B6F15FF10F300D38F60 /* http_response.h */,
12533B7015FF10F300D38F60 /* HTTPClient.hpp */,
12533B7115FF10F300D38F60 /* HTTPClientConfig.h */,
);
path = HTTPClient;
sourceTree = "<group>";
};
12533B7815FF111100D38F60 /* src */ = {
isa = PBXGroup;
children = (
12533B8415FF111100D38F60 /* http_request.cpp */,
12533B8515FF111100D38F60 /* http_response.cpp */,
);
path = src;
sourceTree = SOURCE_ROOT;
};
12533BA615FF116800D38F60 /* example */ = {
isa = PBXGroup;
children = (
12533BAD15FF116800D38F60 /* httpclient.cpp */,
);
path = example;
sourceTree = SOURCE_ROOT;
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
12533B4015FF0FEA00D38F60 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
12533B7415FF10F300D38F60 /* http_request.h in Headers */,
12533B7515FF10F300D38F60 /* http_response.h in Headers */,
12533B7615FF10F300D38F60 /* HTTPClient.hpp in Headers */,
12533B7715FF10F300D38F60 /* HTTPClientConfig.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
12533B4115FF0FEA00D38F60 /* HTTPClient */ = {
isa = PBXNativeTarget;
buildConfigurationList = 12533B4F15FF0FEA00D38F60 /* Build configuration list for PBXNativeTarget "HTTPClient" */;
buildPhases = (
12533B3E15FF0FEA00D38F60 /* Sources */,
12533B3F15FF0FEA00D38F60 /* Frameworks */,
12533B4015FF0FEA00D38F60 /* Headers */,
);
buildRules = (
);
dependencies = (
);
name = HTTPClient;
productName = HTTPClient;
productReference = 12533B4215FF0FEA00D38F60 /* HTTPClient.dylib */;
productType = "com.apple.product-type.library.dynamic";
};
12533B9B15FF115600D38F60 /* httpclient */ = {
isa = PBXNativeTarget;
buildConfigurationList = 12533BA315FF115600D38F60 /* Build configuration list for PBXNativeTarget "httpclient" */;
buildPhases = (
12533B9815FF115600D38F60 /* Sources */,
12533B9915FF115600D38F60 /* Frameworks */,
12533B9A15FF115600D38F60 /* CopyFiles */,
);
buildRules = (
);
dependencies = (
12533BC315FF146200D38F60 /* PBXTargetDependency */,
);
name = httpclient;
productName = httpclient;
productReference = 12533B9C15FF115600D38F60 /* httpclient */;
productType = "com.apple.product-type.tool";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
12533B3915FF0FE800D38F60 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0420;
};
buildConfigurationList = 12533B3C15FF0FE800D38F60 /* Build configuration list for PBXProject "HTTPClient" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = 12533B3715FF0FE700D38F60;
productRefGroup = 12533B4315FF0FEA00D38F60 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
12533B4115FF0FEA00D38F60 /* HTTPClient */,
12533B9B15FF115600D38F60 /* httpclient */,
);
};
/* End PBXProject section */
/* Begin PBXSourcesBuildPhase section */
12533B3E15FF0FEA00D38F60 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
12533B9315FF111200D38F60 /* http_request.cpp in Sources */,
12533B9415FF111200D38F60 /* http_response.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
12533B9815FF115600D38F60 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
12533BB215FF116800D38F60 /* httpclient.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
12533BC315FF146200D38F60 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 12533B4115FF0FEA00D38F60 /* HTTPClient */;
targetProxy = 12533BC215FF146200D38F60 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
12533B4D15FF0FEA00D38F60 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
COPY_PHASE_STRIP = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = /opt/local/include/;
LIBRARY_SEARCH_PATHS = /opt/local/lib/;
MACOSX_DEPLOYMENT_TARGET = 10.7;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
};
name = Debug;
};
12533B4E15FF0FEA00D38F60 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
COPY_PHASE_STRIP = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = /opt/local/include/;
LIBRARY_SEARCH_PATHS = /opt/local/lib/;
MACOSX_DEPLOYMENT_TARGET = 10.7;
SDKROOT = macosx;
};
name = Release;
};
12533B5015FF0FEA00D38F60 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/src/.libs\"",
/opt/local/lib,
);
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
12533B5115FF0FEA00D38F60 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/src/.libs\"",
/opt/local/lib,
);
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
12533BA415FF115600D38F60 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
/opt/local/lib,
);
PRODUCT_NAME = "$(TARGET_NAME)";
USER_HEADER_SEARCH_PATHS = "./include/ /opt/local/include/";
};
name = Debug;
};
12533BA515FF115600D38F60 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
/opt/local/lib,
);
PRODUCT_NAME = "$(TARGET_NAME)";
USER_HEADER_SEARCH_PATHS = "./include/ /opt/local/include/";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
12533B3C15FF0FE800D38F60 /* Build configuration list for PBXProject "HTTPClient" */ = {
isa = XCConfigurationList;
buildConfigurations = (
12533B4D15FF0FEA00D38F60 /* Debug */,
12533B4E15FF0FEA00D38F60 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
12533B4F15FF0FEA00D38F60 /* Build configuration list for PBXNativeTarget "HTTPClient" */ = {
isa = XCConfigurationList;
buildConfigurations = (
12533B5015FF0FEA00D38F60 /* Debug */,
12533B5115FF0FEA00D38F60 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
12533BA315FF115600D38F60 /* Build configuration list for PBXNativeTarget "httpclient" */ = {
isa = XCConfigurationList;
buildConfigurations = (
12533BA415FF115600D38F60 /* Debug */,
12533BA515FF115600D38F60 /* Release */,
);
defaultConfigurationIsVisible = 0;
};
/* End XCConfigurationList section */
};
rootObject = 12533B3915FF0FE800D38F60 /* Project object */;
}

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:HTTPClient.xcodeproj">
</FileRef>
</Workspace>

View file

@ -276,6 +276,8 @@ private:
enum http_proxy_enum { NONE, HTTP_PROXY, HTTPS_PROXY};
enum http_type_enum { PLAIN_HTTP, SSL_HTTPS};
int redirtimes;
http_proxy_enum http_proxy;
http_type_enum http_type;
boost::asio::io_service io;

View file

@ -218,6 +218,11 @@ protected:
* Its called automatically as the data is recieved from the http server
*/
virtual void flush();
/*! \brief Clear the Body
*
* Used to clear the Body that has been downloaded so far
*/
virtual void clearBody();
/*! \brief Store the URL that is being downloaded
*
* used by the http_request class only, this function stores the URL that is being downloaded.
@ -226,6 +231,12 @@ protected:
* @param[in] url the URL as a sting
*/
virtual void setURL(std::string url);
/*! \brief Signal that the download has completed
*
* used by the http_request class only, this function indicates that the download is completed.
* it is called automatically when the download has finished. Can be reimplemented in inherited classes to close a file handle for example
*/
virtual void Completed();
friend class http_request;
std::string version;
@ -249,6 +260,7 @@ public:
protected:
void flush();
void setURL(std::string url);
void Completed();
private:
bool OpenFile();
bool CloseFile();

View file

@ -422,9 +422,35 @@ void http_request::receive()
}
else
{
this->response->setBodySize(0);
this->response->setBodySize(0);
parser_state = BODY;
}
/* once we get here, before starting the Body Download, Check the Status Return Value
* which might depend upon headers (eg, Location)
*/
if ((this->response->getStatus() >= 300) && (this->response->getStatus() < 400)) {
/* Redirect */
if (this->redirtimes++ > 5) {
this->disconnect();
LogCritical() << "Redirection Failure. Redirected too many times";
delete buffer;
return;
}
std::string Location = this->response->getHeader("Location");
if (Location != "") {
LogTrace() << "Redirecting (" << this->response->getStatus() << ") to " << Location;
this->reset();
this->send(Location);
delete buffer;
return;
} else {
LogCritical() << "Redirection Failure (" << this->response->getStatus() << "). No Location Specified";
delete buffer;
return;
}
}
}
else if (*position == ':')
position++;
@ -446,7 +472,7 @@ void http_request::receive()
{
position++;
LogTrace() << boost::this_thread::get_id() << "Header key: " << key << " value: " << value;
this->response->setHeaders(key, value);
this->response->setHeaders(key, value);
key = "";
parser_state = HEADER_KEY;
}
@ -469,6 +495,7 @@ void http_request::receive()
{
if (e.code() == boost::asio::error::eof) {
this->response->setBodySize(this->response->getBody().length());
this->response->Completed();
} else
{
delete buffer;
@ -521,29 +548,11 @@ void http_request::disconnect()
http_response *http_request::connect(std::string url)
{
//http_request request(this->response,this->io_service);
int redirtimes = 0;
while ((this->response->getStatus() < 200) || (this->response->getStatus() >= 300)) {
// Send the HTTP request and receive the this->response.
this->send(url);
if ((this->response->getStatus() >= 300) && (this->response->getStatus() < 400)) {
/* Redirect */
if (redirtimes++ > 5) {
this->disconnect();
LogCritical() << "Redirection Failure. Redirected too many times";
return this->response;
}
std::string Location = this->response->getHeader("Location");
if (Location != "") {
LogTrace() << "Redirecting (" << this->response->getStatus() << ") to " << Location;
url = Location;
this->reset();
} else {
LogCritical() << "Redirection Failure (" << this->response->getStatus() << "). No Location Specified";
return this->response;
}
} else if ((this->response->getStatus() >= 400) && (this->response->getStatus() < 500)) {
/* redirect Headers are handled above in the recieve function */
if ((this->response->getStatus() >= 400) && (this->response->getStatus() < 500)) {
LogCritical() << "Not Found (" << this->response->getStatus() << ") Error";
this->disconnect();
return this->response;

View file

@ -1,5 +1,5 @@
/*
* HTTP Response Base class for libHTTPClient
* HTTP Response Base class for libHTTPClient
* Copyright (C) 2012 Justin Hammond
*
* This library is free software; you can redistribute it and/or
@ -17,113 +17,115 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
#include "HTTPClient/http_response.h"
#include "HTTPClient/http_response.h"
#include <boost/interprocess/sync/scoped_lock.hpp>
#include <boost/lexical_cast.hpp>
using namespace DynamX::HttpClient;
http_response::http_response(): body_size(0)
{
this->reset();
}
http_response::~http_response()
{
}
void http_response::reset()
{
boost::interprocess::scoped_lock<boost::mutex>(this->TLock);
this->version = "HTTP/1.0";
this->status = 0;
this->description = "OK";
this->headers.clear();
this->body_size = 0;
this->body = "";
using namespace DynamX::HttpClient;
using namespace DynamX::HttpClient::Logging;
http_response::http_response(): body_size(0)
{
this->reset();
}
http_response::~http_response()
{
}
void http_response::reset()
{
boost::interprocess::scoped_lock<boost::mutex>(this->TLock);
this->version = "HTTP/1.0";
this->status = 0;
this->description = "OK";
this->headers.clear();
this->body_size = 0;
this->body = "";
this->progress = 0;
this->url = "";
}
void http_response::setVersion(std::string ver) {
this->version = ver;
}
std::string http_response::getVersion() {
return this->version;
}
void http_response::setStatus(int stat) {
this->status = stat;
}
int http_response::getStatus() {
return this->status;
}
void http_response::setDescription(std::string desc) {
this->description = desc;
}
std::string http_response::getDescription() {
return this->description;
}
void http_response::setHeaders(std::string key, std::string val) {
this->headers.insert(std::pair<std::string, std::string>(key, val));
}
std::map<std::string, std::string>::iterator http_response::getHeadersBegin() {
return this->headers.begin();
}
std::map<std::string, std::string>::iterator http_response::getHeadersEnd() {
return this->headers.end();
}
std::string http_response::getHeader(std::string key) {
std::map<std::string, std::string>::iterator iter = this->headers.find(key);
if (iter != this->headers.end())
return iter->second;
return "";
}
void http_response::setBodySize(size_t size) {
boost::interprocess::scoped_lock<boost::mutex>(this->TLock);
this->body_size = size;
}
size_t http_response::getBodySize() {
boost::interprocess::scoped_lock<boost::mutex>(this->TLock);
return this->body_size;
}
void http_response::setBody(std::string mybod) {
boost::interprocess::scoped_lock<boost::mutex>(this->TLock);
this->body += mybod;
this->progress += mybod.length();
}
void http_response::setBody(char c) {
boost::interprocess::scoped_lock<boost::mutex>(this->TLock);
this->body += c;
this->progress++;
}
std::string http_response::getBody() {
boost::interprocess::scoped_lock<boost::mutex>(this->TLock);
return this->body;
}
size_t http_response::getProgress() {
boost::interprocess::scoped_lock<boost::mutex>(this->TLock);
return this->progress;
this->url = "";
}
void http_response::setVersion(std::string ver) {
this->version = ver;
}
std::string http_response::getVersion() {
return this->version;
}
void http_response::setStatus(int stat) {
this->status = stat;
}
int http_response::getStatus() {
return this->status;
}
void http_response::setDescription(std::string desc) {
this->description = desc;
}
std::string http_response::getDescription() {
return this->description;
}
void http_response::setHeaders(std::string key, std::string val) {
this->headers.insert(std::pair<std::string, std::string>(key, val));
}
std::map<std::string, std::string>::iterator http_response::getHeadersBegin() {
return this->headers.begin();
}
std::map<std::string, std::string>::iterator http_response::getHeadersEnd() {
return this->headers.end();
}
std::string http_response::getHeader(std::string key) {
std::map<std::string, std::string>::iterator iter = this->headers.find(key);
if (iter != this->headers.end())
return iter->second;
return "";
}
void http_response::setBodySize(size_t size) {
boost::interprocess::scoped_lock<boost::mutex>(this->TLock);
this->body_size = size;
}
size_t http_response::getBodySize() {
boost::interprocess::scoped_lock<boost::mutex>(this->TLock);
return this->body_size;
}
void http_response::setBody(std::string mybod) {
boost::interprocess::scoped_lock<boost::mutex>(this->TLock);
this->body += mybod;
this->progress += mybod.length();
}
void http_response::setBody(char c) {
boost::interprocess::scoped_lock<boost::mutex>(this->TLock);
this->body += c;
this->progress++;
}
std::string http_response::getBody() {
boost::interprocess::scoped_lock<boost::mutex>(this->TLock);
return this->body;
}
size_t http_response::getProgress() {
boost::interprocess::scoped_lock<boost::mutex>(this->TLock);
return this->progress;
}
void http_response::flush() {
/* nothing in the base class */
}
std::string http_response::getURL() {
boost::interprocess::scoped_lock<boost::mutex>(this->TLock);
return this->url;
@ -133,7 +135,14 @@ void http_response::setURL(std::string url) {
this->url = url;
}
void http_response::clearBody() {
boost::interprocess::scoped_lock<boost::mutex>(this->TLock);
this->body.clear();
}
void http_response::Completed() {
}
http_response_file::http_response_file() : http_response() {
@ -143,6 +152,7 @@ void http_response_file::reset() {
this->filename = "";
this->CloseFile();
http_response::reset();
std::cout << "Reset" << std::endl;
}
void http_response_file::setURL(std::string url) {
@ -158,6 +168,7 @@ void http_response_file::setURL(std::string url) {
if (url_parts.size() >= 5) {
this->filename = url_parts[4];
}
LogTrace() << "Filename set to:" << this->filename;
this->CloseFile();
}
@ -179,29 +190,21 @@ bool http_response_file::OpenFile() {
this->filepath = this->filename + "." + boost::lexical_cast<std::string>(static_cast<int>(i));
i++;
}
this->file.clear(std::iostream::goodbit);
this->file.exceptions ( std::ifstream::failbit | std::ifstream::badbit );
try {
std::cout << "about to open " << std::endl;
// this->file.open(this->filepath, std::ios_base::binary | std::ios_base::in | std::ios_base::out | std::ios_base::trunc | std::ios_base::app);
this->file.open(this->filepath);
} catch (std::ios_base::failure e) {
std::cout << "Exception opening/reading file" << e.what() << std::endl;;
}
LogTrace() << "About to open file: " << this->filepath;
this->file.open(this->filepath);
if (this->file.is_open()) {
std::cout << "opened" << std::endl;
this->opened = true;
return true;
}
std::cout << "not opened" << std::endl;
LogWarn() << "Could Not Open File: " << this->filepath;
return false;
}
bool http_response_file::CloseFile() {
this->opened = false;
this->filepath.clear();
this->filename = "";
this->file.close();
return true;
}
void http_response_file::Completed() {
this->CloseFile();
}

View file

@ -0,0 +1,4 @@
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
GCC_INCREASE_PRECOMPILED_HEADER_SHARING = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;

View file

@ -0,0 +1,10 @@
PRODUCT_NAME = libHTTPClient;
MACH_O_TYPE = mh_dylib;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = HTTPClient/HTTPClient-Prefix.pch;
GCC_ENABLE_CPP_EXCEPTIONS = YES;
GCC_ENABLE_CPP_RTTI = YES;
GCC_SYMBOLS_PRIVATE_EXTERN = YES;