diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9c4768e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,21 @@
+# Xcode
+.DS_Store
+build/
+*.pbxuser
+!default.pbxuser
+*.mode1v3
+!default.mode1v3
+*.mode2v3
+!default.mode2v3
+*.perspectivev3
+!default.perspectivev3
+xcuserdata
+profile
+*.moved-aside
+DerivedData
+.idea/
+
+Pods/
+
+*.xccheckout
+Podfile.lock
diff --git a/OrigamiEngine.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/OrigamiEngine.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..cdc0900
--- /dev/null
+++ b/OrigamiEngine.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/OrigamiEngine/ORGMCommonProtocols.h b/OrigamiEngine/ORGMCommonProtocols.h
index 84bad8e..ea65224 100644
--- a/OrigamiEngine/ORGMCommonProtocols.h
+++ b/OrigamiEngine/ORGMCommonProtocols.h
@@ -77,6 +77,17 @@ typedef enum : NSInteger {
*/
- (BOOL)open:(NSURL *)url;
+/**
+ Opens source file for `read`.
+
+ @param url A source file url.
+ @param httpHeaders A dictionary representing HTTP header fields and values
+
+ @return `YES` if success, otherwise `NO`.
+*/
+- (BOOL)open:(NSURL *)url
+ httpHeaders:(NSDictionary *)httpHeaders;
+
/**
Determines if source is seekable.
diff --git a/OrigamiEngine/ORGMEngine.h b/OrigamiEngine/ORGMEngine.h
index b364db8..02d5572 100644
--- a/OrigamiEngine/ORGMEngine.h
+++ b/OrigamiEngine/ORGMEngine.h
@@ -82,6 +82,25 @@ typedef enum : NSInteger {
*/
- (void)playUrl:(NSURL *)url;
+/**
+Starts new playback process from corresponding source.
+
+@param url The url object to be used as a source path during playback.
+@param httpHeaders A dictionary representing HTTP header fields and values
+
+*/
+- (void)playUrl:(NSURL *)url httpHeaders:(NSDictionary *)httpHeaders;
+
+/**
+Starts new playback process from corresponding source.
+
+@param url The url object to be used as a source path during playback.
+@param httpHeaders A dictionary representing HTTP header fields and values
+@param outputUnitClass Class that will be used during output unit initialisation. Must be subclass of ORGMOutputUnit.
+
+*/
+- (void)playUrl:(NSURL *)url httpHeaders:(NSDictionary *)httpHeaders withOutputUnitClass:(Class)outputUnitClass;
+
/**
Pauses the playback.
diff --git a/OrigamiEngine/ORGMEngine.m b/OrigamiEngine/ORGMEngine.m
index 7c129d1..d3e7fb3 100644
--- a/OrigamiEngine/ORGMEngine.m
+++ b/OrigamiEngine/ORGMEngine.m
@@ -61,7 +61,8 @@ - (void)dealloc {
#pragma mark - public
-- (void)playUrl:(NSURL *)url withOutputUnitClass:(Class)outputUnitClass {
+- (void)playUrl:(NSURL *)url httpHeaders:(NSDictionary *)httpHeaders withOutputUnitClass:(Class)outputUnitClass
+{
if (!outputUnitClass || ![outputUnitClass isSubclassOfClass:[ORGMOutputUnit class]]) {
@throw [NSException exceptionWithName:NSInternalInconsistencyException
@@ -77,7 +78,7 @@ - (void)playUrl:(NSURL *)url withOutputUnitClass:(Class)outputUnitClass {
self.input = input;
[input release];
- if (![_input openWithUrl:url]) {
+ if (![_input openWithUrl:url httpHeaders:httpHeaders]) {
self.currentState = ORGMEngineStateError;
self.currentError = [NSError errorWithDomain:kErrorDomain
code:ORGMEngineErrorCodesSourceFailed
@@ -113,9 +114,19 @@ - (void)playUrl:(NSURL *)url withOutputUnitClass:(Class)outputUnitClass {
});
}
-- (void)playUrl:(NSURL *)url {
+- (void)playUrl:(NSURL *)url withOutputUnitClass:(Class)outputUnitClass
+{
+ [self playUrl:url httpHeaders:nil withOutputUnitClass:outputUnitClass];
+}
+
+- (void)playUrl:(NSURL *)url httpHeaders:(NSDictionary *)httpHeaders
+{
+ [self playUrl:url httpHeaders:httpHeaders withOutputUnitClass:[ORGMOutputUnit class]];
+}
- [self playUrl:url withOutputUnitClass:[ORGMOutputUnit class]];
+- (void)playUrl:(NSURL *)url
+{
+ [self playUrl:url httpHeaders:nil];
}
- (void)pause {
@@ -171,7 +182,7 @@ - (void)setNextUrl:(NSURL *)url withDataFlush:(BOOL)flush {
[self stop];
} else {
dispatch_async([ORGMQueues processing_queue], ^{
- if (![_input openWithUrl:url]) {
+ if (![_input openWithUrl:url httpHeaders:nil]) {
[self stop];
}
[_converter reinitWithNewInput:_input withDataFlush:flush];
diff --git a/OrigamiEngine/ORGMInputUnit.h b/OrigamiEngine/ORGMInputUnit.h
index c26ac15..4cca773 100644
--- a/OrigamiEngine/ORGMInputUnit.h
+++ b/OrigamiEngine/ORGMInputUnit.h
@@ -39,14 +39,25 @@
@property (assign, nonatomic, readonly) BOOL endOfInput;
/**
- Open input source and initializes necessary resources.
+Open input source and initializes necessary resources.
- @param url A url object to be used as a source path during playback.
+@param url A url object to be used as a source path during playback.
- @return `YES` if success, otherwise `NO`.
- */
+@return `YES` if success, otherwise `NO`.
+*/
- (BOOL)openWithUrl:(NSURL *)url;
+/**
+Open input source and initializes necessary resources.
+
+@param url A url object to be used as a source path during playback.
+@param httpHeaders A dictionary representing HTTP header fields and values
+
+@return `YES` if success, otherwise `NO`.
+*/
+- (BOOL)openWithUrl:(NSURL *)url
+ httpHeaders:(NSDictionary *)httpHeaders;
+
/**
Closes input unit and corresponding decoder, deallocates unnecessary resources.
*/
diff --git a/OrigamiEngine/ORGMInputUnit.m b/OrigamiEngine/ORGMInputUnit.m
index 1a5a6c5..9d807b7 100644
--- a/OrigamiEngine/ORGMInputUnit.m
+++ b/OrigamiEngine/ORGMInputUnit.m
@@ -62,9 +62,10 @@ - (void)dealloc {
#pragma mark - public
-- (BOOL)openWithUrl:(NSURL *)url {
+- (BOOL)openWithUrl:(NSURL *)url httpHeaders:(NSDictionary *)httpHeaders
+{
self.source = [[ORGMPluginManager sharedManager] sourceForURL:url error:nil];
- if (!_source || ![_source open:url]) return NO;
+ if (!_source || ![_source open:url httpHeaders:httpHeaders]) return NO;
self.decoder = [[ORGMPluginManager sharedManager] decoderForSource:_source error:nil];
if (!_decoder || ![_decoder open:_source]) return NO;
@@ -75,6 +76,11 @@ - (BOOL)openWithUrl:(NSURL *)url {
return YES;
}
+- (BOOL)openWithUrl:(NSURL *)url
+{
+ return [self openWithUrl:url httpHeaders:nil];
+}
+
- (void)close {
[_decoder close];
}
diff --git a/OrigamiEngine/Plugins/CueSheetDecoder.m b/OrigamiEngine/Plugins/CueSheetDecoder.m
index 79da4ed..04533ab 100644
--- a/OrigamiEngine/Plugins/CueSheetDecoder.m
+++ b/OrigamiEngine/Plugins/CueSheetDecoder.m
@@ -102,7 +102,7 @@ - (BOOL)open:(id)s {
if ([track.track isEqualToString:[url fragment]]) {
self.source = [pluginManager sourceForURL:track.url error:nil];
- if (![_source open:track.url]) {
+ if (![_source open:track.url httpHeaders:nil]) {
return NO;
}
diff --git a/OrigamiEngine/Plugins/FileSource.m b/OrigamiEngine/Plugins/FileSource.m
index 5a53879..34fb7de 100644
--- a/OrigamiEngine/Plugins/FileSource.m
+++ b/OrigamiEngine/Plugins/FileSource.m
@@ -54,12 +54,20 @@ - (long)size {
return size;
}
-- (BOOL)open:(NSURL *)url {
+- (BOOL)open:(NSURL *)url
+ httpHeaders:(NSDictionary *)httpHeaders
+{
[self setUrl:url];
_fd = fopen([[url path] UTF8String], "r");
return (_fd != NULL);
}
+- (BOOL)open:(NSURL *)url
+{
+ return [self open:url httpHeaders:nil];
+}
+
+
- (BOOL)seekable {
return YES;
}
diff --git a/OrigamiEngine/Plugins/HTTPSource.m b/OrigamiEngine/Plugins/HTTPSource.m
index 57adb85..e5825b7 100644
--- a/OrigamiEngine/Plugins/HTTPSource.m
+++ b/OrigamiEngine/Plugins/HTTPSource.m
@@ -64,10 +64,20 @@ - (long)size {
return (long)_bytesExpected;
}
-- (BOOL)open:(NSURL *)url {
+- (BOOL)open:(NSURL *)url httpHeaders:(NSDictionary *)httpHeaders
+{
self.request = [NSMutableURLRequest requestWithURL:url];
[self.request addValue:@"identity" forHTTPHeaderField:@"Accept-Encoding"];
+ if(httpHeaders)
+ {
+ for (id headerField in httpHeaders)
+ {
+ [_request addValue:httpHeaders[headerField]
+ forHTTPHeaderField:headerField];
+ }
+ }
+
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:_request
delegate:self
startImmediately:NO];
@@ -97,6 +107,11 @@ - (BOOL)open:(NSURL *)url {
return YES;
}
+- (BOOL)open:(NSURL *)url
+{
+ return [self open:url httpHeaders:nil];
+}
+
- (BOOL)seekable {
return YES;
}