Toggle navigation
Toggle navigation
This project
Loading...
Sign in
iOS
/
asi-http-request
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
Michael Mayo
2010-01-10 16:05:35 -0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
b3770656d45338dcfcf4258db37510fd48b63f33
b3770656
1 parent
6d5c8995
full cdn management support
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
75 additions
and
110 deletions
Classes/ASICloudFilesCDNRequest.h
Classes/ASICloudFilesCDNRequest.m
Classes/ASICloudFilesContainerRequest.h
Classes/ASICloudFilesContainerRequest.m
Classes/ASICloudFilesContainerXMLParserDelegate.m
Classes/ASIHTTPRequest.m
Classes/ASICloudFilesCDNRequest.h
View file @
b377065
...
...
@@ -8,14 +8,18 @@
#import "ASICloudFilesRequest.h"
@class
ASICloudFilesContainerXMLParserDelegate
;
@interface
ASICloudFilesCDNRequest
:
ASICloudFilesRequest
{
NSString
*
accountName
;
NSString
*
containerName
;
ASICloudFilesContainerXMLParserDelegate
*
xmlParserDelegate
;
}
@property
(
nonatomic
,
retain
)
NSString
*
accountName
;
@property
(
nonatomic
,
retain
)
NSString
*
containerName
;
@property
(
nonatomic
,
retain
)
ASICloudFilesContainerXMLParserDelegate
*
xmlParserDelegate
;
// HEAD /<api version>/<account>/<container>
...
...
@@ -39,12 +43,18 @@
// PUT /<api version>/<account>/<container>
// PUT operations against a Container are used to CDN-enable that Container.
// Include an HTTP header of X-TTL to specify a custom TTL.
+
(
id
)
putRequestWithContainer
:(
NSString
*
)
containerName
;
+
(
id
)
putRequestWithContainer
:(
NSString
*
)
containerName
ttl
:(
NSUInteger
)
ttl
;
// returns: - (NSString *)cdnURI;
// POST /<api version>/<account>/<container>
// POST operations against a CDN-enabled Container are used to adjust CDN attributes.
// The POST operation can be used to set a new TTL cache expiration or to enable/disable public sharing over the CDN.
// X-TTL: 86400
// X-CDN-Enabled: True
+
(
id
)
postRequestWithContainer
:(
NSString
*
)
containerName
;
+
(
id
)
postRequestWithContainer
:(
NSString
*
)
containerName
cdnEnabled
:(
BOOL
)
cdnEnabled
ttl
:(
NSUInteger
)
ttl
;
// returns: - (NSString *)cdnURI;
@end
...
...
Classes/ASICloudFilesCDNRequest.m
View file @
b377065
...
...
@@ -7,11 +7,12 @@
//
#import "ASICloudFilesCDNRequest.h"
#import "ASICloudFilesContainerXMLParserDelegate.h"
@implementation
ASICloudFilesCDNRequest
@synthesize
accountName
,
containerName
;
@synthesize
accountName
,
containerName
,
xmlParserDelegate
;
+
(
id
)
cdnRequestWithMethod
:(
NSString
*
)
method
query
:(
NSString
*
)
query
{
NSString
*
urlString
=
[
NSString
stringWithFormat
:
@"%@%@"
,
[
ASICloudFilesRequest
cdnManagementURL
],
query
];
...
...
@@ -55,7 +56,7 @@
#pragma mark GET - CDN Container Lists
+
(
id
)
listRequest
{
ASICloudFilesCDNRequest
*
request
=
[
ASICloudFilesCDNRequest
cdnRequestWithMethod
:
@"GET"
query
:
nil
];
ASICloudFilesCDNRequest
*
request
=
[
ASICloudFilesCDNRequest
cdnRequestWithMethod
:
@"GET"
query
:
@"?format=xml"
];
return
request
;
}
...
...
@@ -79,24 +80,64 @@
}
-
(
NSArray
*
)
containers
{
return
nil
;
if
(
xmlParserDelegate
.
containerObjects
)
{
return
xmlParserDelegate
.
containerObjects
;
}
NSLog
(
@"list response data: %@"
,
[
self
responseString
]);
NSXMLParser
*
parser
=
[[[
NSXMLParser
alloc
]
initWithData
:[
self
responseData
]]
autorelease
];
if
(
xmlParserDelegate
==
nil
)
{
xmlParserDelegate
=
[[
ASICloudFilesContainerXMLParserDelegate
alloc
]
init
];
}
[
parser
setDelegate
:
xmlParserDelegate
];
[
parser
setShouldProcessNamespaces
:
NO
];
[
parser
setShouldReportNamespacePrefixes
:
NO
];
[
parser
setShouldResolveExternalEntities
:
NO
];
[
parser
parse
];
return
xmlParserDelegate
.
containerObjects
;
}
// GET /<api version>/<account>
// limit, marker, format, enabled_only=true
// + (id)getObjectRequestWithContainer:(NSString *)containerName objectPath:(NSString *)objectPath;
#pragma mark -
#pragma mark PUT - CDN Enable Container
// PUT /<api version>/<account>/<container>
// PUT operations against a Container are used to CDN-enable that Container.
// Include an HTTP header of X-TTL to specify a custom TTL.
+
(
id
)
putRequestWithContainer
:
(
NSString
*
)
containerName
{
ASICloudFilesCDNRequest
*
request
=
[
ASICloudFilesCDNRequest
cdnRequestWithMethod
:
@"PUT"
containerName
:
containerName
];
return
request
;
}
+
(
id
)
putRequestWithContainer
:
(
NSString
*
)
containerName
ttl
:
(
NSUInteger
)
ttl
{
ASICloudFilesCDNRequest
*
request
=
[
ASICloudFilesCDNRequest
cdnRequestWithMethod
:
@"PUT"
containerName
:
containerName
];
[
request
addRequestHeader
:
@"X-Ttl"
value
:[
NSString
stringWithFormat
:
@"%i"
,
ttl
]];
return
request
;
}
#pragma mark -
#pragma mark POST - Adjust CDN Attributes
// POST /<api version>/<account>/<container>
// POST operations against a CDN-enabled Container are used to adjust CDN attributes.
// The POST operation can be used to set a new TTL cache expiration or to enable/disable public sharing over the CDN.
// X-TTL: 86400
// X-CDN-Enabled: True
+
(
id
)
postRequestWithContainer
:
(
NSString
*
)
containerName
{
ASICloudFilesCDNRequest
*
request
=
[
ASICloudFilesCDNRequest
cdnRequestWithMethod
:
@"POST"
containerName
:
containerName
];
return
request
;
}
+
(
id
)
postRequestWithContainer
:
(
NSString
*
)
containerName
cdnEnabled
:
(
BOOL
)
cdnEnabled
ttl
:
(
NSUInteger
)
ttl
{
ASICloudFilesCDNRequest
*
request
=
[
ASICloudFilesCDNRequest
cdnRequestWithMethod
:
@"POST"
containerName
:
containerName
];
if
(
ttl
>
0
)
{
[
request
addRequestHeader
:
@"X-Ttl"
value
:[
NSString
stringWithFormat
:
@"%i"
,
ttl
]];
}
[
request
addRequestHeader
:
@"X-Ttl"
value
:
cdnEnabled
?
@"True"
:
@"False"
];
return
request
;
}
#pragma mark -
#pragma mark Memory Management
...
...
@@ -104,6 +145,7 @@
-
(
void
)
dealloc
{
[
accountName
release
];
[
containerName
release
];
[
xmlParserDelegate
release
];
[
super
dealloc
];
}
...
...
Classes/ASICloudFilesContainerRequest.h
View file @
b377065
...
...
@@ -11,9 +11,6 @@
@class
ASICloudFilesContainer
,
ASICloudFilesContainerXMLParserDelegate
;
@
interface
ASICloudFilesContainerRequest
:
ASICloudFilesRequest
{
NSMutableArray
*
containerObjects
;
//NSUInteger containerCount;
//NSUInteger bytesUsed;
// Internally used while parsing the response
NSString
*
currentContent
;
...
...
Classes/ASICloudFilesContainerRequest.m
View file @
b377065
...
...
@@ -111,10 +111,9 @@
#pragma mark Container List
-
(
NSArray
*
)
containers
{
if
(
containerObjects
)
{
return
containerObjects
;
if
(
xmlParserDelegate
.
containerObjects
)
{
return
xmlParserDelegate
.
containerObjects
;
}
containerObjects
=
[[[
NSMutableArray
alloc
]
init
]
autorelease
];
//NSLog(@"list response data: %@", [self responseString]);
...
...
@@ -133,68 +132,7 @@
}
#pragma mark -
#pragma mark XML Parser Delegate
/*
<container>
<name>playground</name>
<cdn_enabled>True</cdn_enabled>
<ttl>259200</ttl>
<cdn_url>http://c0023891.cdn.cloudfiles.rackspacecloud.com</cdn_url>
<log_retention>True</log_retention>
<referrer_acl></referrer_acl>
<useragent_acl></useragent_acl>
</container>
<account name="MossoCloudFS_56ad0327-43d6-4ac4-9883-797f5690238e">
<container><name>bigdir</name><count>1536</count><bytes>10752</bytes></container>
<container><name>cf_service</name><count>35</count><bytes>66151933</bytes></container>
<container><name>elcamino</name><count>15</count><bytes>162457114</bytes></container>
<container><name>laptop migration</name><count>15</count><bytes>225656510</bytes></container>
<container><name>mike mayo</name><count>2</count><bytes>499581</bytes></container>
<container><name>overhrd.com</name><count>12</count><bytes>205775052</bytes></container>
<container><name>personal</name><count>2</count><bytes>14158285</bytes></container>
<container><name>playground</name><count>4</count><bytes>2040999</bytes></container>
<container><name>pubcamino</name><count>1</count><bytes>219946</bytes></container>
<container><name>pubtest2</name><count>0</count><bytes>0</bytes></container>
<container><name>refreshtest</name><count>0</count><bytes>0</bytes></container>
<container><name>testfromapp</name><count>1</count><bytes>234288</bytes></container>
<container><name>wadecrash</name><count>5</count><bytes>19839804</bytes></container>
</account>
*/
/*
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
[self setCurrentElement:elementName];
if ([elementName isEqualToString:@"container"]) {
[self setCurrentObject:[ASICloudFilesContainer container]];
}
[self setCurrentContent:@""];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"name"]) {
[self currentObject].name = [self currentContent];
} else if ([elementName isEqualToString:@"count"]) {
//[[self currentObject] setKey:[self currentContent]];
[self currentObject].count = [[self currentContent] intValue];
} else if ([elementName isEqualToString:@"bytes"]) {
[self currentObject].bytes = [[self currentContent] intValue];
} else if ([elementName isEqualToString:@"container"]) {
// we're done with this container. time to move on to the next
[containerObjects addObject:currentObject];
[self setCurrentObject:nil];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
[self setCurrentContent:[[self currentContent] stringByAppendingString:string]];
}
*/
#pragma mark Memory Management
-
(
void
)
dealloc
{
[
currentElement
release
];
...
...
Classes/ASICloudFilesContainerXMLParserDelegate.m
View file @
b377065
...
...
@@ -17,40 +17,9 @@
#pragma mark -
#pragma mark XML Parser Delegate
/*
<container>
<name>playground</name>
<cdn_enabled>True</cdn_enabled>
<ttl>259200</ttl>
<cdn_url>http://c0023891.cdn.cloudfiles.rackspacecloud.com</cdn_url>
<log_retention>True</log_retention>
<referrer_acl></referrer_acl>
<useragent_acl></useragent_acl>
</container>
<account name="MossoCloudFS_56ad0327-43d6-4ac4-9883-797f5690238e">
<container><name>bigdir</name><count>1536</count><bytes>10752</bytes></container>
<container><name>cf_service</name><count>35</count><bytes>66151933</bytes></container>
<container><name>elcamino</name><count>15</count><bytes>162457114</bytes></container>
<container><name>laptop migration</name><count>15</count><bytes>225656510</bytes></container>
<container><name>mike mayo</name><count>2</count><bytes>499581</bytes></container>
<container><name>overhrd.com</name><count>12</count><bytes>205775052</bytes></container>
<container><name>personal</name><count>2</count><bytes>14158285</bytes></container>
<container><name>playground</name><count>4</count><bytes>2040999</bytes></container>
<container><name>pubcamino</name><count>1</count><bytes>219946</bytes></container>
<container><name>pubtest2</name><count>0</count><bytes>0</bytes></container>
<container><name>refreshtest</name><count>0</count><bytes>0</bytes></container>
<container><name>testfromapp</name><count>1</count><bytes>234288</bytes></container>
<container><name>wadecrash</name><count>5</count><bytes>19839804</bytes></container>
</account>
*/
-
(
void
)
parser
:(
NSXMLParser
*
)
parser
didStartElement
:(
NSString
*
)
elementName
namespaceURI
:(
NSString
*
)
namespaceURI
qualifiedName
:(
NSString
*
)
qName
attributes
:(
NSDictionary
*
)
attributeDict
{
[
self
setCurrentElement
:
elementName
];
NSLog
(
@"start %@"
,
elementName
);
if
([
elementName
isEqualToString
:
@"container"
])
{
[
self
setCurrentObject
:[
ASICloudFilesContainer
container
]];
}
...
...
@@ -59,15 +28,24 @@
-
(
void
)
parser
:(
NSXMLParser
*
)
parser
didEndElement
:(
NSString
*
)
elementName
namespaceURI
:(
NSString
*
)
namespaceURI
qualifiedName
:(
NSString
*
)
qName
{
NSLog
(
@"end %@"
,
elementName
);
if
([
elementName
isEqualToString
:
@"name"
])
{
[
self
currentObject
].
name
=
[
self
currentContent
];
}
else
if
([
elementName
isEqualToString
:
@"count"
])
{
//[[self currentObject] setKey:[self currentContent]];
[
self
currentObject
].
count
=
[[
self
currentContent
]
intValue
];
}
else
if
([
elementName
isEqualToString
:
@"bytes"
])
{
[
self
currentObject
].
bytes
=
[[
self
currentContent
]
intValue
];
}
else
if
([
elementName
isEqualToString
:
@"cdn_enabled"
])
{
[
self
currentObject
].
cdnEnabled
=
[[
self
currentObject
]
isEqual
:
@"True"
];
}
else
if
([
elementName
isEqualToString
:
@"ttl"
])
{
[
self
currentObject
].
ttl
=
[[
self
currentContent
]
intValue
];
}
else
if
([
elementName
isEqualToString
:
@"cdn_url"
])
{
[
self
currentObject
].
cdnURL
=
[
self
currentContent
];
}
else
if
([
elementName
isEqualToString
:
@"log_retention"
])
{
[
self
currentObject
].
logRetention
=
[[
self
currentObject
]
isEqual
:
@"True"
];
}
else
if
([
elementName
isEqualToString
:
@"referrer_acl"
])
{
[
self
currentObject
].
referrerACL
=
[
self
currentContent
];
}
else
if
([
elementName
isEqualToString
:
@"useragent_acl"
])
{
[
self
currentObject
].
useragentACL
=
[
self
currentContent
];
}
else
if
([
elementName
isEqualToString
:
@"container"
])
{
// we're done with this container. time to move on to the next
if
(
containerObjects
==
nil
)
{
...
...
Classes/ASIHTTPRequest.m
View file @
b377065
...
...
@@ -21,7 +21,7 @@
#import "ASIInputStream.h"
// Automatically set on build
NSString
*
ASIHTTPRequestVersion
=
@"v1.2-
29
2010-01-10"
;
NSString
*
ASIHTTPRequestVersion
=
@"v1.2-
30
2010-01-10"
;
// We use our own custom run loop mode as CoreAnimation seems to want to hijack our threads otherwise
static
CFStringRef
ASIHTTPRequestRunMode
=
CFSTR
(
"ASIHTTPRequest"
);
...
...
Please
register
or
login
to post a comment