Statistics
| Branch: | Revision:

root / asi-http-request-with-pithos / Classes / Pithos / ASIPithosObjectRequest.m @ 32017ec6

History | View | Annotate | Download (101.9 kB)

1 be116d22 Miltiadis Vasilakis
//  ASIPithosObjectRequest.m
2 be116d22 Miltiadis Vasilakis
//  Based on ASICloudFilesObjectRequest.m
3 be116d22 Miltiadis Vasilakis
//
4 2fb7b1fc Miltiadis Vasilakis
// Copyright 2011-2012 GRNET S.A. All rights reserved.
5 be116d22 Miltiadis Vasilakis
//
6 be116d22 Miltiadis Vasilakis
// Redistribution and use in source and binary forms, with or
7 be116d22 Miltiadis Vasilakis
// without modification, are permitted provided that the following
8 be116d22 Miltiadis Vasilakis
// conditions are met:
9 be116d22 Miltiadis Vasilakis
// 
10 be116d22 Miltiadis Vasilakis
//   1. Redistributions of source code must retain the above
11 be116d22 Miltiadis Vasilakis
//      copyright notice, this list of conditions and the following
12 be116d22 Miltiadis Vasilakis
//      disclaimer.
13 be116d22 Miltiadis Vasilakis
// 
14 be116d22 Miltiadis Vasilakis
//   2. Redistributions in binary form must reproduce the above
15 be116d22 Miltiadis Vasilakis
//      copyright notice, this list of conditions and the following
16 be116d22 Miltiadis Vasilakis
//      disclaimer in the documentation and/or other materials
17 be116d22 Miltiadis Vasilakis
//      provided with the distribution.
18 be116d22 Miltiadis Vasilakis
// 
19 be116d22 Miltiadis Vasilakis
// THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
20 be116d22 Miltiadis Vasilakis
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 be116d22 Miltiadis Vasilakis
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 be116d22 Miltiadis Vasilakis
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
23 be116d22 Miltiadis Vasilakis
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 be116d22 Miltiadis Vasilakis
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 be116d22 Miltiadis Vasilakis
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
26 be116d22 Miltiadis Vasilakis
// USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
27 be116d22 Miltiadis Vasilakis
// AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 be116d22 Miltiadis Vasilakis
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
29 be116d22 Miltiadis Vasilakis
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 be116d22 Miltiadis Vasilakis
// POSSIBILITY OF SUCH DAMAGE.
31 be116d22 Miltiadis Vasilakis
// 
32 be116d22 Miltiadis Vasilakis
// The views and conclusions contained in the software and
33 be116d22 Miltiadis Vasilakis
// documentation are those of the authors and should not be
34 be116d22 Miltiadis Vasilakis
// interpreted as representing official policies, either expressed
35 be116d22 Miltiadis Vasilakis
// or implied, of GRNET S.A.
36 be116d22 Miltiadis Vasilakis
37 be116d22 Miltiadis Vasilakis
#import "ASIPithosObjectRequest.h"
38 2fb7b1fc Miltiadis Vasilakis
#import "ASIPithos.h"
39 be116d22 Miltiadis Vasilakis
#import "ASIPithosObject.h"
40 be116d22 Miltiadis Vasilakis
41 be116d22 Miltiadis Vasilakis
@interface ASIPithosObjectRequest (Private)
42 be116d22 Miltiadis Vasilakis
- (void)parseXMLData;
43 be116d22 Miltiadis Vasilakis
- (void)prepareObjectRequestWithETag:(NSString *)eTag 
44 be116d22 Miltiadis Vasilakis
                         contentType:(NSString *)contentType 
45 be116d22 Miltiadis Vasilakis
                     contentEncoding:(NSString *)contentEncoding 
46 be116d22 Miltiadis Vasilakis
                  contentDisposition:(NSString *)contentDisposition 
47 be116d22 Miltiadis Vasilakis
                            manifest:(NSString *)manifest 
48 be116d22 Miltiadis Vasilakis
                             sharing:(NSString *)sharing 
49 be116d22 Miltiadis Vasilakis
                            isPublic:(NSUInteger)isPublic 
50 be116d22 Miltiadis Vasilakis
                            metadata:(NSDictionary *)newMetadata;
51 be116d22 Miltiadis Vasilakis
@end
52 be116d22 Miltiadis Vasilakis
53 be116d22 Miltiadis Vasilakis
@implementation ASIPithosObjectRequest
54 be116d22 Miltiadis Vasilakis
@synthesize objectRequestType;
55 be116d22 Miltiadis Vasilakis
@synthesize containerName, objectName;
56 6ba383d0 Miltiadis Vasilakis
@synthesize currentObject;
57 be116d22 Miltiadis Vasilakis
58 be116d22 Miltiadis Vasilakis
#pragma mark -
59 be116d22 Miltiadis Vasilakis
#pragma mark Constructors
60 be116d22 Miltiadis Vasilakis
61 2fb7b1fc Miltiadis Vasilakis
+ (id)storageRequestWithMethod:(NSString *)method pithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
62 2fb7b1fc Miltiadis Vasilakis
                   queryString:(NSString *)queryString {
63 48e53760 Miltiadis Vasilakis
    NSString *urlString = [NSString stringWithFormat:@"%@/%@/%@", 
64 2fb7b1fc Miltiadis Vasilakis
                           pithos.storageURL, 
65 6d3af6ef Miltiadis Vasilakis
                           [self encodeToPercentEscape:containerName], 
66 6d3af6ef Miltiadis Vasilakis
                           [((NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, 
67 6d3af6ef Miltiadis Vasilakis
                                                                                 (CFStringRef)objectName, 
68 6d3af6ef Miltiadis Vasilakis
                                                                                 NULL, 
69 6d3af6ef Miltiadis Vasilakis
                                                                                 (CFStringRef)@"!*'();:@&=+$,?%#[]", 
70 6d3af6ef Miltiadis Vasilakis
                                                                                 kCFStringEncodingUTF8)) autorelease]];
71 be116d22 Miltiadis Vasilakis
    if (queryString)
72 be116d22 Miltiadis Vasilakis
        urlString = [urlString stringByAppendingString:queryString];
73 be116d22 Miltiadis Vasilakis
    
74 be116d22 Miltiadis Vasilakis
	ASIPithosObjectRequest *request = [[[self alloc] initWithURL:[NSURL URLWithString:urlString]] autorelease];
75 be116d22 Miltiadis Vasilakis
	[request setRequestMethod:method];
76 2fb7b1fc Miltiadis Vasilakis
	[request addRequestHeader:@"X-Auth-Token" value:pithos.authToken];
77 be116d22 Miltiadis Vasilakis
    request.containerName = containerName;
78 be116d22 Miltiadis Vasilakis
    request.objectName = objectName;
79 be116d22 Miltiadis Vasilakis
	return request;
80 be116d22 Miltiadis Vasilakis
}
81 be116d22 Miltiadis Vasilakis
82 2fb7b1fc Miltiadis Vasilakis
+ (id)storageRequestWithMethod:(NSString *)method pithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName {
83 2fb7b1fc Miltiadis Vasilakis
	return [self storageRequestWithMethod:method pithos:pithos containerName:containerName objectName:(NSString *)objectName queryString:nil];
84 be116d22 Miltiadis Vasilakis
}
85 be116d22 Miltiadis Vasilakis
86 be116d22 Miltiadis Vasilakis
#pragma mark -
87 be116d22 Miltiadis Vasilakis
#pragma mark Memory Management
88 be116d22 Miltiadis Vasilakis
89 be116d22 Miltiadis Vasilakis
- (void)dealloc {
90 be116d22 Miltiadis Vasilakis
    [currentObject release];
91 be116d22 Miltiadis Vasilakis
    [versions release];
92 be116d22 Miltiadis Vasilakis
    [hashes release];
93 be116d22 Miltiadis Vasilakis
    [blockHash release];
94 be116d22 Miltiadis Vasilakis
    [objectName release];
95 be116d22 Miltiadis Vasilakis
    [containerName release];
96 be116d22 Miltiadis Vasilakis
	[super dealloc];
97 be116d22 Miltiadis Vasilakis
}
98 be116d22 Miltiadis Vasilakis
99 be116d22 Miltiadis Vasilakis
#pragma mark -
100 be116d22 Miltiadis Vasilakis
#pragma mark Internal
101 be116d22 Miltiadis Vasilakis
102 be116d22 Miltiadis Vasilakis
- (void)parseXMLData {
103 2fb7b1fc Miltiadis Vasilakis
    if ((objectRequestType == ASIPithosObjectRequestHashmap)|| (objectRequestType == ASIPithosObjectRequestHashmapWrite)) {
104 be116d22 Miltiadis Vasilakis
        hashes = [[NSMutableArray alloc] init];
105 be116d22 Miltiadis Vasilakis
    } else if (objectRequestType == ASIPithosObjectRequestVersions) {
106 be116d22 Miltiadis Vasilakis
        versions = [[NSMutableArray alloc] init];
107 be116d22 Miltiadis Vasilakis
    }
108 be116d22 Miltiadis Vasilakis
    
109 be116d22 Miltiadis Vasilakis
    NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:[self responseData]] autorelease];
110 be116d22 Miltiadis Vasilakis
    [parser setDelegate:self];
111 be116d22 Miltiadis Vasilakis
    [parser setShouldProcessNamespaces:NO];
112 be116d22 Miltiadis Vasilakis
    [parser setShouldReportNamespacePrefixes:NO];
113 be116d22 Miltiadis Vasilakis
    [parser setShouldResolveExternalEntities:NO];
114 be116d22 Miltiadis Vasilakis
    [parser parse];
115 be116d22 Miltiadis Vasilakis
}
116 be116d22 Miltiadis Vasilakis
117 be116d22 Miltiadis Vasilakis
- (void)prepareObjectRequestWithETag:(NSString *)eTag 
118 be116d22 Miltiadis Vasilakis
                         contentType:(NSString *)contentType 
119 be116d22 Miltiadis Vasilakis
                     contentEncoding:(NSString *)contentEncoding 
120 be116d22 Miltiadis Vasilakis
                  contentDisposition:(NSString *)contentDisposition 
121 be116d22 Miltiadis Vasilakis
                            manifest:(NSString *)manifest 
122 be116d22 Miltiadis Vasilakis
                             sharing:(NSString *)sharing 
123 be116d22 Miltiadis Vasilakis
                            isPublic:(NSUInteger)isPublic 
124 be116d22 Miltiadis Vasilakis
                            metadata:(NSDictionary *)newMetadata {
125 be116d22 Miltiadis Vasilakis
    if (eTag)
126 be116d22 Miltiadis Vasilakis
        [self addRequestHeader:@"ETag" value:eTag];
127 be116d22 Miltiadis Vasilakis
    if (contentType)
128 be116d22 Miltiadis Vasilakis
        [self addRequestHeader:@"Content-Type" value:contentType];
129 be116d22 Miltiadis Vasilakis
    if (contentEncoding)
130 6d3af6ef Miltiadis Vasilakis
        [self addRequestHeader:@"Content-Encoding" value:[self encodeToPercentEscape:contentEncoding]];
131 be116d22 Miltiadis Vasilakis
    if (contentDisposition)
132 6d3af6ef Miltiadis Vasilakis
        [self addRequestHeader:@"Content-Disposition" value:[self encodeToPercentEscape:contentDisposition]];
133 be116d22 Miltiadis Vasilakis
    if (manifest)
134 6d3af6ef Miltiadis Vasilakis
        [self addRequestHeader:@"X-Object-Manifest" value:[self encodeToPercentEscape:manifest]];
135 be116d22 Miltiadis Vasilakis
    if (sharing)
136 6d3af6ef Miltiadis Vasilakis
        [self addRequestHeader:@"X-Object-Sharing" value:[self encodeToPercentEscape:sharing]];
137 be116d22 Miltiadis Vasilakis
    if (isPublic == ASIPithosObjectRequestPublicTrue) {
138 662d5d9a Miltiadis Vasilakis
        [self addRequestHeader:@"X-Object-Public" value:@"true"];
139 be116d22 Miltiadis Vasilakis
    } else if (isPublic == ASIPithosObjectRequestPublicFalse) {
140 662d5d9a Miltiadis Vasilakis
        [self addRequestHeader:@"X-Object-Public" value:@"false"];
141 be116d22 Miltiadis Vasilakis
    }
142 be116d22 Miltiadis Vasilakis
    
143 be116d22 Miltiadis Vasilakis
    if (newMetadata) {
144 be116d22 Miltiadis Vasilakis
        for (NSString *key in [newMetadata keyEnumerator]) {
145 6d3af6ef Miltiadis Vasilakis
            [self addRequestHeader:[self encodeToPercentEscape:[NSString stringWithFormat:@"X-Object-Meta-%@", key]] 
146 6d3af6ef Miltiadis Vasilakis
                             value:[self encodeToPercentEscape:[newMetadata objectForKey:key]]];
147 be116d22 Miltiadis Vasilakis
        }
148 be116d22 Miltiadis Vasilakis
    }
149 be116d22 Miltiadis Vasilakis
}
150 be116d22 Miltiadis Vasilakis
151 be116d22 Miltiadis Vasilakis
#pragma mark -
152 be116d22 Miltiadis Vasilakis
#pragma mark HEAD
153 be116d22 Miltiadis Vasilakis
154 be116d22 Miltiadis Vasilakis
// HEAD storageURL/container/object
155 2fb7b1fc Miltiadis Vasilakis
+ (id)objectMetadataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName {
156 2fb7b1fc Miltiadis Vasilakis
    return [self storageRequestWithMethod:@"HEAD" pithos:pithos containerName:containerName objectName:objectName];
157 be116d22 Miltiadis Vasilakis
}
158 be116d22 Miltiadis Vasilakis
159 be116d22 Miltiadis Vasilakis
// HEAD storageURL/container/object?[version=version]
160 2fb7b1fc Miltiadis Vasilakis
+ (id)objectMetadataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
161 2fb7b1fc Miltiadis Vasilakis
                              version:(NSString *)version {
162 be116d22 Miltiadis Vasilakis
    NSString *queryString = nil;
163 be116d22 Miltiadis Vasilakis
    if (version)
164 be116d22 Miltiadis Vasilakis
        queryString = [NSString stringWithFormat:@"?version=%@", version];
165 2fb7b1fc Miltiadis Vasilakis
	return [self storageRequestWithMethod:@"HEAD" pithos:pithos containerName:containerName objectName:objectName queryString:queryString];
166 be116d22 Miltiadis Vasilakis
}
167 be116d22 Miltiadis Vasilakis
168 be116d22 Miltiadis Vasilakis
// HEAD storageURL/container/object?[version=version] [If-Match]
169 2fb7b1fc Miltiadis Vasilakis
+ (id)objectMetadataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
170 2fb7b1fc Miltiadis Vasilakis
                              version:(NSString *)version 
171 2fb7b1fc Miltiadis Vasilakis
                              ifMatch:(NSString *)matchETag {
172 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self objectMetadataRequestWithPithos:pithos containerName:containerName objectName:objectName version:version];
173 be116d22 Miltiadis Vasilakis
    [request addRequestIfMatchHeader:matchETag];
174 be116d22 Miltiadis Vasilakis
    return request;
175 be116d22 Miltiadis Vasilakis
}
176 be116d22 Miltiadis Vasilakis
177 be116d22 Miltiadis Vasilakis
// HEAD storageURL/container/object?[version=version] [If-None-Match]
178 2fb7b1fc Miltiadis Vasilakis
+ (id)objectMetadataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
179 2fb7b1fc Miltiadis Vasilakis
                              version:(NSString *)version 
180 2fb7b1fc Miltiadis Vasilakis
                          ifNoneMatch:(NSString *)matchETag {
181 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self objectMetadataRequestWithPithos:pithos containerName:containerName objectName:objectName version:version];
182 be116d22 Miltiadis Vasilakis
    [request addRequestIfNoneMatchHeader:matchETag];
183 be116d22 Miltiadis Vasilakis
    return request;
184 be116d22 Miltiadis Vasilakis
}
185 be116d22 Miltiadis Vasilakis
186 be116d22 Miltiadis Vasilakis
// HEAD storageURL/container/object?[version=version] [If-Modified-Since]
187 2fb7b1fc Miltiadis Vasilakis
+ (id)objectMetadataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
188 2fb7b1fc Miltiadis Vasilakis
                              version:(NSString *)version 
189 2fb7b1fc Miltiadis Vasilakis
                      ifModifiedSince:(NSDate *)sinceTimestamp {
190 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self objectMetadataRequestWithPithos:pithos containerName:containerName objectName:objectName version:version];
191 be116d22 Miltiadis Vasilakis
    [request addRequestIfModifiedSinceHeader:sinceTimestamp];
192 be116d22 Miltiadis Vasilakis
    return request;
193 be116d22 Miltiadis Vasilakis
}
194 be116d22 Miltiadis Vasilakis
195 be116d22 Miltiadis Vasilakis
// HEAD storageURL/container/object?[version=version] [If-Unmodified-Since]
196 2fb7b1fc Miltiadis Vasilakis
+ (id)objectMetadataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
197 2fb7b1fc Miltiadis Vasilakis
                              version:(NSString *)version 
198 2fb7b1fc Miltiadis Vasilakis
                    ifUnmodifiedSince:(NSDate *)sinceTimestamp {
199 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self objectMetadataRequestWithPithos:pithos containerName:containerName objectName:objectName version:version];
200 be116d22 Miltiadis Vasilakis
    [request addRequestIfUnmodifiedSinceHeader:sinceTimestamp];
201 be116d22 Miltiadis Vasilakis
    return request;
202 be116d22 Miltiadis Vasilakis
}
203 be116d22 Miltiadis Vasilakis
204 be116d22 Miltiadis Vasilakis
- (NSString *)eTag {
205 be116d22 Miltiadis Vasilakis
    // Etag, instead of ETag, because CFNetwork changes it
206 be116d22 Miltiadis Vasilakis
    // http://groups.google.com/group/asihttprequest/browse_thread/thread/7119f1a0ccf26fdf
207 be116d22 Miltiadis Vasilakis
	return [[self responseHeaders] objectForKey:@"Etag"];
208 be116d22 Miltiadis Vasilakis
}
209 be116d22 Miltiadis Vasilakis
210 40db2cf7 Miltiadis Vasilakis
- (NSString *)objectHash {
211 40db2cf7 Miltiadis Vasilakis
    return [[self responseHeaders] objectForKey:@"X-Object-Hash"];
212 40db2cf7 Miltiadis Vasilakis
}
213 40db2cf7 Miltiadis Vasilakis
214 30650f5a Miltiadis Vasilakis
- (NSString *)UUID {
215 30650f5a Miltiadis Vasilakis
    return [[self responseHeaders] objectForKey:@"X-Object-UUID"];
216 30650f5a Miltiadis Vasilakis
}
217 30650f5a Miltiadis Vasilakis
218 d7314149 Miltiadis Vasilakis
- (NSUInteger)objectContentLength {
219 78355da3 Miltiadis Vasilakis
    NSString *objectContentLengthString = [[self responseHeaders] objectForKey:@"Content-Length"];
220 78355da3 Miltiadis Vasilakis
    if (objectContentLengthString)
221 78355da3 Miltiadis Vasilakis
        return [objectContentLengthString intValue];
222 78355da3 Miltiadis Vasilakis
    return 0;
223 be116d22 Miltiadis Vasilakis
}
224 be116d22 Miltiadis Vasilakis
225 be116d22 Miltiadis Vasilakis
- (NSString *)contentType {
226 be116d22 Miltiadis Vasilakis
	return [[self responseHeaders] objectForKey:@"Content-Type"];
227 be116d22 Miltiadis Vasilakis
}
228 be116d22 Miltiadis Vasilakis
229 be116d22 Miltiadis Vasilakis
- (NSDate *)lastModified {
230 be116d22 Miltiadis Vasilakis
    NSString *lastModifiedString = [[self responseHeaders] objectForKey:@"Last-Modified"];
231 be116d22 Miltiadis Vasilakis
    if (lastModifiedString)
232 be116d22 Miltiadis Vasilakis
        return [[self dateFormatterWithFormatId:1] dateFromString:lastModifiedString];
233 be116d22 Miltiadis Vasilakis
    return nil;
234 be116d22 Miltiadis Vasilakis
}
235 be116d22 Miltiadis Vasilakis
236 be116d22 Miltiadis Vasilakis
- (NSString *)contentEncoding {
237 6d3af6ef Miltiadis Vasilakis
	return [self decodeFromPercentEscape:[[self responseHeaders] objectForKey:@"Content-Encoding"]];
238 be116d22 Miltiadis Vasilakis
}
239 be116d22 Miltiadis Vasilakis
240 be116d22 Miltiadis Vasilakis
- (NSString *)contentDisposition {
241 6d3af6ef Miltiadis Vasilakis
	return [self decodeFromPercentEscape:[[self responseHeaders] objectForKey:@"Content-Disposition"]];
242 be116d22 Miltiadis Vasilakis
}
243 be116d22 Miltiadis Vasilakis
244 be116d22 Miltiadis Vasilakis
- (NSString *)version {
245 be116d22 Miltiadis Vasilakis
	return [[self responseHeaders] objectForKey:@"X-Object-Version"];
246 be116d22 Miltiadis Vasilakis
}
247 be116d22 Miltiadis Vasilakis
248 be116d22 Miltiadis Vasilakis
- (NSDate *)versionTimestamp {
249 be116d22 Miltiadis Vasilakis
    NSString *versionTimestampString = [[self responseHeaders] objectForKey:@"X-Object-Version-Timestamp"];
250 be116d22 Miltiadis Vasilakis
    if (versionTimestampString)
251 be116d22 Miltiadis Vasilakis
        return [[self dateFormatterWithFormatId:1] dateFromString:versionTimestampString];
252 be116d22 Miltiadis Vasilakis
    return nil;
253 be116d22 Miltiadis Vasilakis
}
254 be116d22 Miltiadis Vasilakis
255 be116d22 Miltiadis Vasilakis
- (NSString *)modifiedBy {
256 be116d22 Miltiadis Vasilakis
	return [[self responseHeaders] objectForKey:@"X-Object-Modified-By"];
257 be116d22 Miltiadis Vasilakis
}
258 be116d22 Miltiadis Vasilakis
259 be116d22 Miltiadis Vasilakis
- (NSString *)manifest {
260 6d3af6ef Miltiadis Vasilakis
	return [self decodeFromPercentEscape:[[self responseHeaders] objectForKey:@"X-Object-Manifest"]];
261 be116d22 Miltiadis Vasilakis
}
262 be116d22 Miltiadis Vasilakis
263 be116d22 Miltiadis Vasilakis
- (NSString *)sharing {
264 6d3af6ef Miltiadis Vasilakis
	return [self decodeFromPercentEscape:[[self responseHeaders] objectForKey:@"X-Object-Sharing"]];
265 be116d22 Miltiadis Vasilakis
}
266 be116d22 Miltiadis Vasilakis
267 be116d22 Miltiadis Vasilakis
- (NSString *)sharedBy {
268 6d3af6ef Miltiadis Vasilakis
	return [self decodeFromPercentEscape:[[self responseHeaders] objectForKey:@"X-Object-Shared-By"]];
269 be116d22 Miltiadis Vasilakis
}
270 be116d22 Miltiadis Vasilakis
271 be116d22 Miltiadis Vasilakis
- (NSString *)publicURI {
272 be116d22 Miltiadis Vasilakis
	return [[self responseHeaders] objectForKey:@"X-Object-Public"];
273 be116d22 Miltiadis Vasilakis
}
274 be116d22 Miltiadis Vasilakis
275 be116d22 Miltiadis Vasilakis
- (NSDictionary *)metadata {
276 be116d22 Miltiadis Vasilakis
    if (metadata == nil) {
277 be116d22 Miltiadis Vasilakis
        metadata = [self getHeadersDictionaryForPrefix:@"X-Object-Meta-"];
278 be116d22 Miltiadis Vasilakis
        [metadata retain];
279 be116d22 Miltiadis Vasilakis
    }
280 be116d22 Miltiadis Vasilakis
    return metadata;
281 be116d22 Miltiadis Vasilakis
}
282 be116d22 Miltiadis Vasilakis
283 6908619b Miltiadis Vasilakis
- (NSString *)allowedTo {
284 6908619b Miltiadis Vasilakis
    return [[self responseHeaders] objectForKey:@"X-Object-Allowed-To"];
285 6908619b Miltiadis Vasilakis
}
286 6908619b Miltiadis Vasilakis
287 be116d22 Miltiadis Vasilakis
- (ASIPithosObject *)object {
288 be116d22 Miltiadis Vasilakis
    ASIPithosObject *object = [ASIPithosObject object];
289 be116d22 Miltiadis Vasilakis
    object.name = objectName;
290 be116d22 Miltiadis Vasilakis
    object.hash = [self eTag];
291 2f816d2a Miltiadis Vasilakis
    object.objectHash = [self objectHash];
292 2f816d2a Miltiadis Vasilakis
    object.UUID = [self UUID];
293 be116d22 Miltiadis Vasilakis
    object.contentType = [self contentType];
294 be116d22 Miltiadis Vasilakis
    object.contentEncoding = [self contentEncoding];
295 be116d22 Miltiadis Vasilakis
    object.contentDisposition = [self contentDisposition];
296 be116d22 Miltiadis Vasilakis
    object.lastModified = [self lastModified];
297 be116d22 Miltiadis Vasilakis
    object.version = [self version];
298 be116d22 Miltiadis Vasilakis
    object.versionTimestamp = [self versionTimestamp];
299 be116d22 Miltiadis Vasilakis
    object.modifiedBy = [self modifiedBy];
300 be116d22 Miltiadis Vasilakis
    object.manifest = [self manifest];
301 be116d22 Miltiadis Vasilakis
    object.sharing = [self sharing];
302 be116d22 Miltiadis Vasilakis
    object.sharedBy = [self sharedBy];
303 be116d22 Miltiadis Vasilakis
    object.publicURI = [self publicURI];
304 be116d22 Miltiadis Vasilakis
    object.metadata = (NSMutableDictionary *)[self metadata];
305 78624c54 Miltiadis Vasilakis
    object.allowedTo = [self allowedTo];
306 be116d22 Miltiadis Vasilakis
    
307 be116d22 Miltiadis Vasilakis
    if (objectRequestType == ASIPithosObjectRequestData) {
308 d7314149 Miltiadis Vasilakis
        object.bytes = [self objectContentLength];
309 be116d22 Miltiadis Vasilakis
        object.data = [self responseData];
310 be116d22 Miltiadis Vasilakis
    } else if (objectRequestType == ASIPithosObjectRequestHashmap) {
311 be116d22 Miltiadis Vasilakis
        object.bytes = [self bytes];
312 be116d22 Miltiadis Vasilakis
    }
313 be116d22 Miltiadis Vasilakis
    
314 be116d22 Miltiadis Vasilakis
    return object;
315 be116d22 Miltiadis Vasilakis
}
316 be116d22 Miltiadis Vasilakis
317 be116d22 Miltiadis Vasilakis
#pragma mark -
318 be116d22 Miltiadis Vasilakis
#pragma mark GET
319 be116d22 Miltiadis Vasilakis
320 be116d22 Miltiadis Vasilakis
// GET storageURL/container/object
321 2fb7b1fc Miltiadis Vasilakis
+ (id)objectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName {
322 2fb7b1fc Miltiadis Vasilakis
    return [self storageRequestWithMethod:@"GET" pithos:pithos containerName:containerName objectName:objectName];
323 be116d22 Miltiadis Vasilakis
}
324 be116d22 Miltiadis Vasilakis
325 be116d22 Miltiadis Vasilakis
// GET storageURL/container/object?[version=version]
326 2fb7b1fc Miltiadis Vasilakis
+ (id)objectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
327 2fb7b1fc Miltiadis Vasilakis
                          version:(NSString *)version {
328 be116d22 Miltiadis Vasilakis
    NSString *queryString = nil;
329 be116d22 Miltiadis Vasilakis
    if (version)
330 be116d22 Miltiadis Vasilakis
        queryString = [NSString stringWithFormat:@"?version=%@", version];
331 2fb7b1fc Miltiadis Vasilakis
	return [self storageRequestWithMethod:@"GET" pithos:pithos containerName:containerName objectName:objectName queryString:queryString];
332 be116d22 Miltiadis Vasilakis
}
333 be116d22 Miltiadis Vasilakis
334 be116d22 Miltiadis Vasilakis
// GET storageURL/container/object?[version=version] [If-Match]
335 2fb7b1fc Miltiadis Vasilakis
+ (id)objectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
336 2fb7b1fc Miltiadis Vasilakis
                          version:(NSString *)version 
337 2fb7b1fc Miltiadis Vasilakis
                          ifMatch:(NSString *)matchETag {
338 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self objectDataRequestWithPithos:pithos containerName:containerName objectName:objectName version:version];
339 be116d22 Miltiadis Vasilakis
    [request addRequestIfMatchHeader:matchETag];
340 be116d22 Miltiadis Vasilakis
    return request;
341 be116d22 Miltiadis Vasilakis
}
342 be116d22 Miltiadis Vasilakis
343 be116d22 Miltiadis Vasilakis
// GET storageURL/container/object?[version=version] [If-None-Match]
344 2fb7b1fc Miltiadis Vasilakis
+ (id)objectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
345 2fb7b1fc Miltiadis Vasilakis
                          version:(NSString *)version 
346 2fb7b1fc Miltiadis Vasilakis
                      ifNoneMatch:(NSString *)matchETag {
347 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self objectDataRequestWithPithos:pithos containerName:containerName objectName:objectName version:version];
348 be116d22 Miltiadis Vasilakis
    [request addRequestIfNoneMatchHeader:matchETag];
349 be116d22 Miltiadis Vasilakis
    return request;
350 be116d22 Miltiadis Vasilakis
}
351 be116d22 Miltiadis Vasilakis
352 be116d22 Miltiadis Vasilakis
// GET storageURL/container/object?[version=version] [If-Modified-Since]
353 2fb7b1fc Miltiadis Vasilakis
+ (id)objectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
354 2fb7b1fc Miltiadis Vasilakis
                          version:(NSString *)version 
355 2fb7b1fc Miltiadis Vasilakis
                  ifModifiedSince:(NSDate *)sinceTimestamp {
356 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self objectDataRequestWithPithos:pithos containerName:containerName objectName:objectName version:version];
357 be116d22 Miltiadis Vasilakis
    [request addRequestIfModifiedSinceHeader:sinceTimestamp];
358 be116d22 Miltiadis Vasilakis
    return request;
359 be116d22 Miltiadis Vasilakis
}
360 be116d22 Miltiadis Vasilakis
361 be116d22 Miltiadis Vasilakis
// GET storageURL/container/object?[version=version] [If-Unmodified-Since]
362 2fb7b1fc Miltiadis Vasilakis
+ (id)objectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
363 2fb7b1fc Miltiadis Vasilakis
                          version:(NSString *)version 
364 2fb7b1fc Miltiadis Vasilakis
                ifUnmodifiedSince:(NSDate *)sinceTimestamp {
365 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self objectDataRequestWithPithos:pithos containerName:containerName objectName:objectName version:version];
366 be116d22 Miltiadis Vasilakis
    [request addRequestIfUnmodifiedSinceHeader:sinceTimestamp];
367 be116d22 Miltiadis Vasilakis
    return request;
368 be116d22 Miltiadis Vasilakis
}
369 be116d22 Miltiadis Vasilakis
370 be116d22 Miltiadis Vasilakis
// GET storageURL/container/object?[version=version] [Range [If-Range]]
371 2fb7b1fc Miltiadis Vasilakis
+ (id)objectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
372 2fb7b1fc Miltiadis Vasilakis
                          version:(NSString *)version 
373 2fb7b1fc Miltiadis Vasilakis
                            range:(NSString *)rangeString {
374 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self objectDataRequestWithPithos:pithos containerName:containerName objectName:objectName version:version];
375 be116d22 Miltiadis Vasilakis
    [request addRequestRangeHeader:rangeString];
376 be116d22 Miltiadis Vasilakis
    return request;
377 be116d22 Miltiadis Vasilakis
}
378 be116d22 Miltiadis Vasilakis
379 0a4b9bd3 Miltiadis Vasilakis
// GET storageURL/container/object?[version=version] [Range [If-Range]]
380 2fb7b1fc Miltiadis Vasilakis
+ (id)objectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
381 2fb7b1fc Miltiadis Vasilakis
                          version:(NSString *)version 
382 2fb7b1fc Miltiadis Vasilakis
                            range:(NSString *)rangeString 
383 2fb7b1fc Miltiadis Vasilakis
                      ifRangeETag:(NSString *)rangeETag {
384 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self objectDataRequestWithPithos:pithos containerName:containerName objectName:objectName version:version];
385 be116d22 Miltiadis Vasilakis
    [request addRequestRangeHeader:rangeString ifRangeETag:rangeETag];
386 be116d22 Miltiadis Vasilakis
    return request;
387 be116d22 Miltiadis Vasilakis
}
388 be116d22 Miltiadis Vasilakis
389 2fb7b1fc Miltiadis Vasilakis
+ (id)objectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
390 2fb7b1fc Miltiadis Vasilakis
                          version:(NSString *)version 
391 2fb7b1fc Miltiadis Vasilakis
                            range:(NSString *)rangeString 
392 2fb7b1fc Miltiadis Vasilakis
                 ifRangeTimestamp:(NSDate *)rangeTimestamp {
393 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self objectDataRequestWithPithos:pithos containerName:containerName objectName:objectName version:version];
394 be116d22 Miltiadis Vasilakis
    [request addRequestRangeHeader:rangeString ifRangeTimestamp:rangeTimestamp];
395 be116d22 Miltiadis Vasilakis
    return request;
396 be116d22 Miltiadis Vasilakis
}
397 be116d22 Miltiadis Vasilakis
398 0a4b9bd3 Miltiadis Vasilakis
// GET storageURL/container/object?[version=version] [Range] [If-Match]
399 2fb7b1fc Miltiadis Vasilakis
+ (id)objectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
400 2fb7b1fc Miltiadis Vasilakis
                          version:(NSString *)version 
401 2fb7b1fc Miltiadis Vasilakis
                            range:(NSString *)rangeString 
402 2fb7b1fc Miltiadis Vasilakis
                          ifMatch:(NSString *)matchETag {
403 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self objectDataRequestWithPithos:pithos containerName:containerName objectName:objectName version:version];
404 0a4b9bd3 Miltiadis Vasilakis
    [request addRequestRangeHeader:rangeString];
405 0a4b9bd3 Miltiadis Vasilakis
    [request addRequestIfMatchHeader:matchETag];
406 0a4b9bd3 Miltiadis Vasilakis
    return request;    
407 0a4b9bd3 Miltiadis Vasilakis
}
408 0a4b9bd3 Miltiadis Vasilakis
409 0a4b9bd3 Miltiadis Vasilakis
// GET storageURL/container/object?[version=version] [Range] [If-None-Match]
410 2fb7b1fc Miltiadis Vasilakis
+ (id)objectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
411 2fb7b1fc Miltiadis Vasilakis
                          version:(NSString *)version 
412 2fb7b1fc Miltiadis Vasilakis
                            range:(NSString *)rangeString 
413 2fb7b1fc Miltiadis Vasilakis
                      ifNoneMatch:(NSString *)matchETag {
414 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self objectDataRequestWithPithos:pithos containerName:containerName objectName:objectName version:version];
415 0a4b9bd3 Miltiadis Vasilakis
    [request addRequestRangeHeader:rangeString];
416 0a4b9bd3 Miltiadis Vasilakis
    [request addRequestIfNoneMatchHeader:matchETag];
417 0a4b9bd3 Miltiadis Vasilakis
    return request;
418 0a4b9bd3 Miltiadis Vasilakis
}
419 0a4b9bd3 Miltiadis Vasilakis
420 be116d22 Miltiadis Vasilakis
- (NSData *)data {
421 be116d22 Miltiadis Vasilakis
    return [self responseData];
422 be116d22 Miltiadis Vasilakis
}
423 be116d22 Miltiadis Vasilakis
424 6908619b Miltiadis Vasilakis
// GET storageURL/container/object?format=xml&hashmap=
425 2fb7b1fc Miltiadis Vasilakis
+ (id)objectHashmapRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName {
426 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self storageRequestWithMethod:@"GET" pithos:pithos containerName:containerName objectName:objectName queryString:@"?format=xml&hashmap="];
427 be116d22 Miltiadis Vasilakis
    request.objectRequestType = ASIPithosObjectRequestHashmap;
428 be116d22 Miltiadis Vasilakis
    return request;
429 be116d22 Miltiadis Vasilakis
}
430 be116d22 Miltiadis Vasilakis
431 6908619b Miltiadis Vasilakis
// GET storageURL/container/object?format=xml&hashmap=[&version=version]
432 2fb7b1fc Miltiadis Vasilakis
+ (id)objectHashmapRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
433 2fb7b1fc Miltiadis Vasilakis
                             version:(NSString *)version {
434 6908619b Miltiadis Vasilakis
    NSString *queryString = @"?format=xml&hashmap=";
435 be116d22 Miltiadis Vasilakis
    if (version)
436 be116d22 Miltiadis Vasilakis
        queryString = [queryString stringByAppendingString:[NSString stringWithFormat:@"&version=%@", version]];
437 2fb7b1fc Miltiadis Vasilakis
	ASIPithosObjectRequest *request = [self storageRequestWithMethod:@"GET" pithos:pithos containerName:containerName objectName:objectName queryString:queryString];
438 be116d22 Miltiadis Vasilakis
    request.objectRequestType = ASIPithosObjectRequestHashmap;
439 be116d22 Miltiadis Vasilakis
    return request;
440 be116d22 Miltiadis Vasilakis
}
441 be116d22 Miltiadis Vasilakis
442 6908619b Miltiadis Vasilakis
// GET storageURL/container/object?format=xml&hashmap=[&version=version] [If-Match]
443 2fb7b1fc Miltiadis Vasilakis
+ (id)objectHashmapRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
444 2fb7b1fc Miltiadis Vasilakis
                             version:(NSString *)version 
445 2fb7b1fc Miltiadis Vasilakis
                             ifMatch:(NSString *)matchETag {
446 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self objectHashmapRequestWithPithos:pithos containerName:containerName objectName:objectName version:version];
447 be116d22 Miltiadis Vasilakis
    [request addRequestIfMatchHeader:matchETag];
448 be116d22 Miltiadis Vasilakis
    return request;
449 be116d22 Miltiadis Vasilakis
}
450 be116d22 Miltiadis Vasilakis
451 6908619b Miltiadis Vasilakis
// GET storageURL/container/object?format=xml&hashmap=[&version=version] [If-NoneMatch]
452 2fb7b1fc Miltiadis Vasilakis
+ (id)objectHashmapRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
453 2fb7b1fc Miltiadis Vasilakis
                             version:(NSString *)version 
454 2fb7b1fc Miltiadis Vasilakis
                         ifNoneMatch:(NSString *)matchETag {
455 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self objectHashmapRequestWithPithos:pithos containerName:containerName objectName:objectName version:version];
456 be116d22 Miltiadis Vasilakis
    [request addRequestIfNoneMatchHeader:matchETag];
457 be116d22 Miltiadis Vasilakis
    return request;
458 be116d22 Miltiadis Vasilakis
}
459 be116d22 Miltiadis Vasilakis
460 6908619b Miltiadis Vasilakis
// GET storageURL/container/object?format=xml&hashmap=[&version=version] [If-Modified-Since]
461 2fb7b1fc Miltiadis Vasilakis
+ (id)objectHashmapRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
462 2fb7b1fc Miltiadis Vasilakis
                             version:(NSString *)version 
463 2fb7b1fc Miltiadis Vasilakis
                     ifModifiedSince:(NSDate *)sinceTimestamp {
464 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self objectHashmapRequestWithPithos:pithos containerName:containerName objectName:objectName version:version];
465 be116d22 Miltiadis Vasilakis
    [request addRequestIfModifiedSinceHeader:sinceTimestamp];
466 be116d22 Miltiadis Vasilakis
    return request;
467 be116d22 Miltiadis Vasilakis
}
468 be116d22 Miltiadis Vasilakis
469 6908619b Miltiadis Vasilakis
// GET storageURL/container/object?format=xml&hashmap=[&version=version] [If-Unmodified-Since]
470 2fb7b1fc Miltiadis Vasilakis
+ (id)objectHashmapRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
471 2fb7b1fc Miltiadis Vasilakis
                             version:(NSString *)version 
472 2fb7b1fc Miltiadis Vasilakis
                   ifUnmodifiedSince:(NSDate *)sinceTimestamp {
473 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self objectHashmapRequestWithPithos:pithos containerName:containerName objectName:objectName version:version];
474 be116d22 Miltiadis Vasilakis
    [request addRequestIfUnmodifiedSinceHeader:sinceTimestamp];
475 be116d22 Miltiadis Vasilakis
    return request;
476 be116d22 Miltiadis Vasilakis
}
477 be116d22 Miltiadis Vasilakis
478 be116d22 Miltiadis Vasilakis
- (NSUInteger)blockSize {
479 be116d22 Miltiadis Vasilakis
    if (hashes == nil)
480 be116d22 Miltiadis Vasilakis
        [self parseXMLData];
481 be116d22 Miltiadis Vasilakis
    return blockSize;
482 be116d22 Miltiadis Vasilakis
}
483 be116d22 Miltiadis Vasilakis
484 be116d22 Miltiadis Vasilakis
- (NSString *)blockHash {
485 be116d22 Miltiadis Vasilakis
    if (hashes == nil)
486 be116d22 Miltiadis Vasilakis
        [self parseXMLData];
487 be116d22 Miltiadis Vasilakis
    return blockHash;
488 be116d22 Miltiadis Vasilakis
}
489 be116d22 Miltiadis Vasilakis
490 be116d22 Miltiadis Vasilakis
- (NSArray *)hashes {
491 be116d22 Miltiadis Vasilakis
    if (hashes == nil)
492 be116d22 Miltiadis Vasilakis
        [self parseXMLData];
493 be116d22 Miltiadis Vasilakis
    return hashes;
494 be116d22 Miltiadis Vasilakis
}
495 be116d22 Miltiadis Vasilakis
496 be116d22 Miltiadis Vasilakis
- (NSUInteger)bytes {
497 be116d22 Miltiadis Vasilakis
    if (hashes == nil)
498 be116d22 Miltiadis Vasilakis
        [self parseXMLData];
499 be116d22 Miltiadis Vasilakis
    return bytes;
500 be116d22 Miltiadis Vasilakis
}
501 be116d22 Miltiadis Vasilakis
502 be116d22 Miltiadis Vasilakis
// GET storageURL/container/object?format=xml&version=list
503 2fb7b1fc Miltiadis Vasilakis
+ (id)objectVersionsRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName {
504 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self storageRequestWithMethod:@"GET" pithos:pithos containerName:containerName objectName:objectName queryString:@"?format=xml&version=list"];
505 be116d22 Miltiadis Vasilakis
    request.objectRequestType = ASIPithosObjectRequestVersions;
506 be116d22 Miltiadis Vasilakis
    return request;
507 be116d22 Miltiadis Vasilakis
}
508 be116d22 Miltiadis Vasilakis
509 be116d22 Miltiadis Vasilakis
// GET storageURL/container/object?format=xml&version=list [If-Match]
510 2fb7b1fc Miltiadis Vasilakis
+ (id)objectVersionsRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
511 2fb7b1fc Miltiadis Vasilakis
                              ifMatch:(NSString *)matchETag {
512 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self objectVersionsRequestWithPithos:pithos containerName:containerName objectName:objectName];
513 be116d22 Miltiadis Vasilakis
    [request addRequestIfMatchHeader:matchETag];
514 be116d22 Miltiadis Vasilakis
    return request;
515 be116d22 Miltiadis Vasilakis
}
516 be116d22 Miltiadis Vasilakis
517 be116d22 Miltiadis Vasilakis
// GET storageURL/container/object?format=xml&version=list [If-None-Match]
518 2fb7b1fc Miltiadis Vasilakis
+ (id)objectVersionsRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
519 2fb7b1fc Miltiadis Vasilakis
                          ifNoneMatch:(NSString *)matchETag {
520 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self objectVersionsRequestWithPithos:pithos containerName:containerName objectName:objectName];
521 be116d22 Miltiadis Vasilakis
    [request addRequestIfNoneMatchHeader:matchETag];
522 be116d22 Miltiadis Vasilakis
    return request;
523 be116d22 Miltiadis Vasilakis
}
524 be116d22 Miltiadis Vasilakis
525 be116d22 Miltiadis Vasilakis
// GET storageURL/container/object?format=xml&version=list [If-Modified-Since]
526 2fb7b1fc Miltiadis Vasilakis
+ (id)objectVersionsRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
527 2fb7b1fc Miltiadis Vasilakis
                      ifModifiedSince:(NSDate *)sinceTimestamp {
528 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self objectVersionsRequestWithPithos:pithos containerName:containerName objectName:objectName];
529 be116d22 Miltiadis Vasilakis
    [request addRequestIfModifiedSinceHeader:sinceTimestamp];
530 be116d22 Miltiadis Vasilakis
    return request;
531 be116d22 Miltiadis Vasilakis
}
532 be116d22 Miltiadis Vasilakis
533 be116d22 Miltiadis Vasilakis
// GET storageURL/container/object?format=xml&version=list [If-Unmodified-Since]
534 2fb7b1fc Miltiadis Vasilakis
+ (id)objectVersionsRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
535 2fb7b1fc Miltiadis Vasilakis
                    ifUnmodifiedSince:(NSDate *)sinceTimestamp {
536 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self objectVersionsRequestWithPithos:pithos containerName:containerName objectName:objectName];
537 be116d22 Miltiadis Vasilakis
    [request addRequestIfUnmodifiedSinceHeader:sinceTimestamp];
538 be116d22 Miltiadis Vasilakis
    return request;
539 be116d22 Miltiadis Vasilakis
}
540 be116d22 Miltiadis Vasilakis
541 be116d22 Miltiadis Vasilakis
- (NSArray *)versions {
542 be116d22 Miltiadis Vasilakis
    if (versions == nil)
543 be116d22 Miltiadis Vasilakis
        [self parseXMLData];
544 be116d22 Miltiadis Vasilakis
    return versions;
545 be116d22 Miltiadis Vasilakis
}
546 be116d22 Miltiadis Vasilakis
547 be116d22 Miltiadis Vasilakis
#pragma mark -
548 be116d22 Miltiadis Vasilakis
#pragma mark PUT, COPY, MOVE
549 be116d22 Miltiadis Vasilakis
550 be116d22 Miltiadis Vasilakis
// PUT storageURL/container/object (from ASIPithosObject with data)
551 2fb7b1fc Miltiadis Vasilakis
+ (id)writeObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName object:(ASIPithosObject *)object {
552 be116d22 Miltiadis Vasilakis
    NSUInteger isPublic = ASIPithosObjectRequestPublicIgnore;
553 be116d22 Miltiadis Vasilakis
    if (object.publicURI) {
554 be116d22 Miltiadis Vasilakis
        isPublic = ASIPithosObjectRequestPublicTrue;
555 be116d22 Miltiadis Vasilakis
        if ([object.publicURI isEqualToString:@""])
556 be116d22 Miltiadis Vasilakis
            isPublic = ASIPithosObjectRequestPublicFalse;
557 be116d22 Miltiadis Vasilakis
    }
558 2fb7b1fc Miltiadis Vasilakis
    return [self writeObjectDataRequestWithPithos:pithos containerName:containerName 
559 be116d22 Miltiadis Vasilakis
                                              objectName:object.name 
560 be116d22 Miltiadis Vasilakis
                                                    eTag:object.hash 
561 be116d22 Miltiadis Vasilakis
                                             contentType:object.contentType 
562 be116d22 Miltiadis Vasilakis
                                         contentEncoding:object.contentEncoding 
563 be116d22 Miltiadis Vasilakis
                                      contentDisposition:object.contentDisposition 
564 be116d22 Miltiadis Vasilakis
                                                manifest:object.manifest 
565 be116d22 Miltiadis Vasilakis
                                                 sharing:object.sharing 
566 be116d22 Miltiadis Vasilakis
                                                isPublic:isPublic
567 be116d22 Miltiadis Vasilakis
                                                metadata:object.metadata 
568 be116d22 Miltiadis Vasilakis
                                                    data:object.data];
569 be116d22 Miltiadis Vasilakis
}
570 be116d22 Miltiadis Vasilakis
571 be116d22 Miltiadis Vasilakis
// PUT storageURL/container/object (from ASIPithosObject with data) [If-Match]
572 2fb7b1fc Miltiadis Vasilakis
+ (id)writeObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName object:(ASIPithosObject *)object 
573 2fb7b1fc Miltiadis Vasilakis
                               ifMatch:(NSString *)matchETag {
574 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self writeObjectDataRequestWithPithos:pithos containerName:containerName object:object];
575 be116d22 Miltiadis Vasilakis
    [request addRequestIfMatchHeader:matchETag];
576 be116d22 Miltiadis Vasilakis
    return request;
577 be116d22 Miltiadis Vasilakis
}
578 be116d22 Miltiadis Vasilakis
579 be116d22 Miltiadis Vasilakis
// PUT storageURL/container/object (from ASIPithosObject with data) [If-None-Match]
580 2fb7b1fc Miltiadis Vasilakis
+ (id)writeObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName object:(ASIPithosObject *)object 
581 2fb7b1fc Miltiadis Vasilakis
                           ifNoneMatch:(NSString *)matchETag  {
582 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self writeObjectDataRequestWithPithos:pithos containerName:containerName object:object];
583 be116d22 Miltiadis Vasilakis
    [request addRequestIfNoneMatchHeader:matchETag];
584 be116d22 Miltiadis Vasilakis
    return request;
585 be116d22 Miltiadis Vasilakis
}
586 be116d22 Miltiadis Vasilakis
587 be116d22 Miltiadis Vasilakis
// PUT storageURL/container/object (from NSData)
588 2fb7b1fc Miltiadis Vasilakis
+ (id)writeObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
589 2fb7b1fc Miltiadis Vasilakis
                                  eTag:(NSString *)eTag 
590 2fb7b1fc Miltiadis Vasilakis
                           contentType:(NSString *)contentType 
591 2fb7b1fc Miltiadis Vasilakis
                       contentEncoding:(NSString *)contentEncoding 
592 2fb7b1fc Miltiadis Vasilakis
                    contentDisposition:(NSString *)contentDisposition 
593 2fb7b1fc Miltiadis Vasilakis
                              manifest:(NSString *)manifest 
594 2fb7b1fc Miltiadis Vasilakis
                               sharing:(NSString *)sharing 
595 2fb7b1fc Miltiadis Vasilakis
                              isPublic:(NSUInteger)isPublic 
596 2fb7b1fc Miltiadis Vasilakis
                              metadata:(NSDictionary *)metadata 
597 2fb7b1fc Miltiadis Vasilakis
                                  data:(NSData *)data {
598 2fb7b1fc Miltiadis Vasilakis
	ASIPithosObjectRequest *request = [self storageRequestWithMethod:@"PUT" pithos:pithos containerName:containerName objectName:objectName];
599 be116d22 Miltiadis Vasilakis
    [request prepareObjectRequestWithETag:eTag 
600 be116d22 Miltiadis Vasilakis
                              contentType:contentType 
601 be116d22 Miltiadis Vasilakis
                          contentEncoding:contentEncoding 
602 be116d22 Miltiadis Vasilakis
                       contentDisposition:contentDisposition 
603 be116d22 Miltiadis Vasilakis
                                 manifest:manifest 
604 be116d22 Miltiadis Vasilakis
                                  sharing:sharing 
605 be116d22 Miltiadis Vasilakis
                                 isPublic:isPublic 
606 be116d22 Miltiadis Vasilakis
                                 metadata:metadata];
607 be116d22 Miltiadis Vasilakis
	[request appendPostData:data];
608 be116d22 Miltiadis Vasilakis
    request.requestMethod = @"PUT";
609 be116d22 Miltiadis Vasilakis
	return request;
610 be116d22 Miltiadis Vasilakis
}
611 be116d22 Miltiadis Vasilakis
612 be116d22 Miltiadis Vasilakis
// PUT storageURL/container/object (from NSData) [If-Match]
613 2fb7b1fc Miltiadis Vasilakis
+ (id)writeObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
614 2fb7b1fc Miltiadis Vasilakis
                                  eTag:(NSString *)eTag 
615 2fb7b1fc Miltiadis Vasilakis
                           contentType:(NSString *)contentType 
616 2fb7b1fc Miltiadis Vasilakis
                       contentEncoding:(NSString *)contentEncoding 
617 2fb7b1fc Miltiadis Vasilakis
                    contentDisposition:(NSString *)contentDisposition 
618 2fb7b1fc Miltiadis Vasilakis
                              manifest:(NSString *)manifest 
619 2fb7b1fc Miltiadis Vasilakis
                               sharing:(NSString *)sharing 
620 2fb7b1fc Miltiadis Vasilakis
                              isPublic:(NSUInteger)isPublic 
621 2fb7b1fc Miltiadis Vasilakis
                              metadata:(NSDictionary *)metadata 
622 2fb7b1fc Miltiadis Vasilakis
                                  data:(NSData *)data 
623 2fb7b1fc Miltiadis Vasilakis
                               ifMatch:(NSString *)matchETag {
624 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self writeObjectDataRequestWithPithos:pithos containerName:containerName objectName:objectName 
625 be116d22 Miltiadis Vasilakis
                                                                               eTag:eTag 
626 be116d22 Miltiadis Vasilakis
                                                                        contentType:contentType 
627 be116d22 Miltiadis Vasilakis
                                                                    contentEncoding:contentEncoding 
628 be116d22 Miltiadis Vasilakis
                                                                 contentDisposition:contentDisposition 
629 be116d22 Miltiadis Vasilakis
                                                                           manifest:manifest 
630 be116d22 Miltiadis Vasilakis
                                                                            sharing:sharing 
631 be116d22 Miltiadis Vasilakis
                                                                           isPublic:isPublic 
632 be116d22 Miltiadis Vasilakis
                                                                           metadata:metadata 
633 be116d22 Miltiadis Vasilakis
                                                                               data:data];
634 be116d22 Miltiadis Vasilakis
    [request addRequestIfMatchHeader:matchETag];
635 be116d22 Miltiadis Vasilakis
    return request;                                                                          
636 be116d22 Miltiadis Vasilakis
}
637 be116d22 Miltiadis Vasilakis
638 be116d22 Miltiadis Vasilakis
// PUT storageURL/container/object (from NSData) [If-None-Match]
639 2fb7b1fc Miltiadis Vasilakis
+ (id)writeObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
640 2fb7b1fc Miltiadis Vasilakis
                                  eTag:(NSString *)eTag 
641 2fb7b1fc Miltiadis Vasilakis
                           contentType:(NSString *)contentType 
642 2fb7b1fc Miltiadis Vasilakis
                       contentEncoding:(NSString *)contentEncoding 
643 2fb7b1fc Miltiadis Vasilakis
                    contentDisposition:(NSString *)contentDisposition 
644 2fb7b1fc Miltiadis Vasilakis
                              manifest:(NSString *)manifest 
645 2fb7b1fc Miltiadis Vasilakis
                               sharing:(NSString *)sharing 
646 2fb7b1fc Miltiadis Vasilakis
                              isPublic:(NSUInteger)isPublic 
647 2fb7b1fc Miltiadis Vasilakis
                              metadata:(NSDictionary *)metadata 
648 2fb7b1fc Miltiadis Vasilakis
                                  data:(NSData *)data 
649 2fb7b1fc Miltiadis Vasilakis
                           ifNoneMatch:(NSString *)matchETag {
650 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self writeObjectDataRequestWithPithos:pithos containerName:containerName objectName:objectName 
651 be116d22 Miltiadis Vasilakis
                                                                               eTag:eTag 
652 be116d22 Miltiadis Vasilakis
                                                                        contentType:contentType 
653 be116d22 Miltiadis Vasilakis
                                                                    contentEncoding:contentEncoding 
654 be116d22 Miltiadis Vasilakis
                                                                 contentDisposition:contentDisposition 
655 be116d22 Miltiadis Vasilakis
                                                                           manifest:manifest 
656 be116d22 Miltiadis Vasilakis
                                                                            sharing:sharing 
657 be116d22 Miltiadis Vasilakis
                                                                           isPublic:isPublic 
658 be116d22 Miltiadis Vasilakis
                                                                           metadata:metadata 
659 be116d22 Miltiadis Vasilakis
                                                                               data:data];
660 be116d22 Miltiadis Vasilakis
    [request addRequestIfNoneMatchHeader:matchETag];
661 be116d22 Miltiadis Vasilakis
    return request;                                                                          
662 be116d22 Miltiadis Vasilakis
}
663 be116d22 Miltiadis Vasilakis
664 be116d22 Miltiadis Vasilakis
// PUT storageURL/container/object (from file)
665 2fb7b1fc Miltiadis Vasilakis
+ (id)writeObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
666 2fb7b1fc Miltiadis Vasilakis
                                  eTag:(NSString *)eTag 
667 2fb7b1fc Miltiadis Vasilakis
                           contentType:(NSString *)contentType 
668 2fb7b1fc Miltiadis Vasilakis
                       contentEncoding:(NSString *)contentEncoding 
669 2fb7b1fc Miltiadis Vasilakis
                    contentDisposition:(NSString *)contentDisposition 
670 2fb7b1fc Miltiadis Vasilakis
                              manifest:(NSString *)manifest 
671 2fb7b1fc Miltiadis Vasilakis
                               sharing:(NSString *)sharing 
672 2fb7b1fc Miltiadis Vasilakis
                              isPublic:(NSUInteger)isPublic 
673 2fb7b1fc Miltiadis Vasilakis
                              metadata:(NSDictionary *)metadata 
674 2fb7b1fc Miltiadis Vasilakis
                                  file:(NSString *)filePath {
675 2fb7b1fc Miltiadis Vasilakis
	ASIPithosObjectRequest *request = [self storageRequestWithMethod:@"PUT" pithos:pithos containerName:containerName objectName:objectName];
676 be116d22 Miltiadis Vasilakis
    [request prepareObjectRequestWithETag:eTag 
677 be116d22 Miltiadis Vasilakis
                              contentType:contentType 
678 be116d22 Miltiadis Vasilakis
                          contentEncoding:contentEncoding 
679 be116d22 Miltiadis Vasilakis
                       contentDisposition:contentDisposition 
680 be116d22 Miltiadis Vasilakis
                                 manifest:manifest 
681 be116d22 Miltiadis Vasilakis
                                  sharing:sharing 
682 be116d22 Miltiadis Vasilakis
                                 isPublic:isPublic 
683 be116d22 Miltiadis Vasilakis
                                 metadata:metadata];
684 be116d22 Miltiadis Vasilakis
	request.shouldStreamPostDataFromDisk = YES;
685 be116d22 Miltiadis Vasilakis
    request.postBodyFilePath = filePath;
686 be116d22 Miltiadis Vasilakis
    request.requestMethod = @"PUT";
687 be116d22 Miltiadis Vasilakis
	return request;    
688 be116d22 Miltiadis Vasilakis
}
689 be116d22 Miltiadis Vasilakis
690 be116d22 Miltiadis Vasilakis
// PUT storageURL/container/object (from file) [If-Match]
691 2fb7b1fc Miltiadis Vasilakis
+ (id)writeObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
692 2fb7b1fc Miltiadis Vasilakis
                                  eTag:(NSString *)eTag 
693 2fb7b1fc Miltiadis Vasilakis
                           contentType:(NSString *)contentType 
694 2fb7b1fc Miltiadis Vasilakis
                       contentEncoding:(NSString *)contentEncoding 
695 2fb7b1fc Miltiadis Vasilakis
                    contentDisposition:(NSString *)contentDisposition 
696 2fb7b1fc Miltiadis Vasilakis
                              manifest:(NSString *)manifest 
697 2fb7b1fc Miltiadis Vasilakis
                               sharing:(NSString *)sharing 
698 2fb7b1fc Miltiadis Vasilakis
                              isPublic:(NSUInteger)isPublic 
699 2fb7b1fc Miltiadis Vasilakis
                              metadata:(NSDictionary *)metadata 
700 2fb7b1fc Miltiadis Vasilakis
                                  file:(NSString *)filePath 
701 2fb7b1fc Miltiadis Vasilakis
                               ifMatch:(NSString *)matchETag {
702 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self writeObjectDataRequestWithPithos:pithos containerName:containerName objectName:objectName 
703 be116d22 Miltiadis Vasilakis
                                                                               eTag:eTag 
704 be116d22 Miltiadis Vasilakis
                                                                        contentType:contentType 
705 be116d22 Miltiadis Vasilakis
                                                                    contentEncoding:contentEncoding 
706 be116d22 Miltiadis Vasilakis
                                                                 contentDisposition:contentDisposition 
707 be116d22 Miltiadis Vasilakis
                                                                           manifest:manifest 
708 be116d22 Miltiadis Vasilakis
                                                                            sharing:sharing 
709 be116d22 Miltiadis Vasilakis
                                                                           isPublic:isPublic 
710 be116d22 Miltiadis Vasilakis
                                                                           metadata:metadata 
711 be116d22 Miltiadis Vasilakis
                                                                               file:filePath];
712 be116d22 Miltiadis Vasilakis
    [request addRequestIfMatchHeader:matchETag];
713 be116d22 Miltiadis Vasilakis
    return request;                                                                          
714 be116d22 Miltiadis Vasilakis
}
715 be116d22 Miltiadis Vasilakis
716 be116d22 Miltiadis Vasilakis
// PUT storageURL/container/object (from file) [If-None-Match]
717 2fb7b1fc Miltiadis Vasilakis
+ (id)writeObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
718 2fb7b1fc Miltiadis Vasilakis
                                  eTag:(NSString *)eTag 
719 2fb7b1fc Miltiadis Vasilakis
                           contentType:(NSString *)contentType 
720 2fb7b1fc Miltiadis Vasilakis
                       contentEncoding:(NSString *)contentEncoding 
721 2fb7b1fc Miltiadis Vasilakis
                    contentDisposition:(NSString *)contentDisposition 
722 2fb7b1fc Miltiadis Vasilakis
                              manifest:(NSString *)manifest 
723 2fb7b1fc Miltiadis Vasilakis
                               sharing:(NSString *)sharing 
724 2fb7b1fc Miltiadis Vasilakis
                              isPublic:(NSUInteger)isPublic 
725 2fb7b1fc Miltiadis Vasilakis
                              metadata:(NSDictionary *)metadata 
726 2fb7b1fc Miltiadis Vasilakis
                                  file:(NSString *)filePath 
727 2fb7b1fc Miltiadis Vasilakis
                           ifNoneMatch:(NSString *)matchETag {
728 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self writeObjectDataRequestWithPithos:pithos containerName:containerName objectName:objectName 
729 be116d22 Miltiadis Vasilakis
                                                                               eTag:eTag 
730 be116d22 Miltiadis Vasilakis
                                                                        contentType:contentType 
731 be116d22 Miltiadis Vasilakis
                                                                    contentEncoding:contentEncoding 
732 be116d22 Miltiadis Vasilakis
                                                                 contentDisposition:contentDisposition 
733 be116d22 Miltiadis Vasilakis
                                                                           manifest:manifest 
734 be116d22 Miltiadis Vasilakis
                                                                            sharing:sharing 
735 be116d22 Miltiadis Vasilakis
                                                                           isPublic:isPublic 
736 be116d22 Miltiadis Vasilakis
                                                                           metadata:metadata 
737 be116d22 Miltiadis Vasilakis
                                                                               file:filePath];
738 be116d22 Miltiadis Vasilakis
    [request addRequestIfNoneMatchHeader:matchETag];
739 be116d22 Miltiadis Vasilakis
    return request;                                                                          
740 be116d22 Miltiadis Vasilakis
}
741 be116d22 Miltiadis Vasilakis
742 be116d22 Miltiadis Vasilakis
// PUT storageURL/container/object (from hashes)
743 2fb7b1fc Miltiadis Vasilakis
+ (id)writeObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
744 2fb7b1fc Miltiadis Vasilakis
                           contentType:(NSString *)contentType 
745 2fb7b1fc Miltiadis Vasilakis
                       contentEncoding:(NSString *)contentEncoding 
746 2fb7b1fc Miltiadis Vasilakis
                    contentDisposition:(NSString *)contentDisposition 
747 2fb7b1fc Miltiadis Vasilakis
                              manifest:(NSString *)manifest 
748 2fb7b1fc Miltiadis Vasilakis
                               sharing:(NSString *)sharing 
749 2fb7b1fc Miltiadis Vasilakis
                              isPublic:(NSUInteger)isPublic 
750 2fb7b1fc Miltiadis Vasilakis
                              metadata:(NSDictionary *)metadata 
751 2fb7b1fc Miltiadis Vasilakis
                             blockSize:(NSUInteger)blockSize 
752 2fb7b1fc Miltiadis Vasilakis
                             blockHash:(NSString *)blockHash 
753 2fb7b1fc Miltiadis Vasilakis
                                hashes:(NSArray *)hashes 
754 2fb7b1fc Miltiadis Vasilakis
                                 bytes:(NSUInteger)bytes {
755 2fb7b1fc Miltiadis Vasilakis
	ASIPithosObjectRequest *request = [self storageRequestWithMethod:@"PUT" pithos:pithos containerName:containerName objectName:objectName queryString:@"?format=xml&hashmap="];
756 be116d22 Miltiadis Vasilakis
    [request prepareObjectRequestWithETag:nil 
757 be116d22 Miltiadis Vasilakis
                              contentType:contentType 
758 be116d22 Miltiadis Vasilakis
                          contentEncoding:contentEncoding 
759 be116d22 Miltiadis Vasilakis
                       contentDisposition:contentDisposition 
760 be116d22 Miltiadis Vasilakis
                                 manifest:manifest 
761 be116d22 Miltiadis Vasilakis
                                  sharing:sharing 
762 be116d22 Miltiadis Vasilakis
                                 isPublic:isPublic 
763 be116d22 Miltiadis Vasilakis
                                 metadata:metadata];
764 be116d22 Miltiadis Vasilakis
    NSString *dataString = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"UTF-8\"?><object name=\"%@\" bytes=\"%lu\" block_size=\"%lu\" block_hash=\"%@\">", 
765 25cafffe Miltiadis Vasilakis
                            [(NSString *)CFXMLCreateStringByEscapingEntities(NULL, (CFStringRef)objectName , NULL) autorelease], 
766 34178792 Miltiadis Vasilakis
                            bytes, blockSize, blockHash];
767 be116d22 Miltiadis Vasilakis
    for (NSString *hash in hashes) {
768 be116d22 Miltiadis Vasilakis
        dataString = [dataString stringByAppendingFormat:@"<hash>%@</hash>", hash];
769 be116d22 Miltiadis Vasilakis
    }
770 cc8c8935 Miltiadis Vasilakis
    dataString = [dataString stringByAppendingString:@"</object>"];
771 be116d22 Miltiadis Vasilakis
	[request appendPostData:[dataString dataUsingEncoding:NSUTF8StringEncoding]];
772 be116d22 Miltiadis Vasilakis
    request.requestMethod = @"PUT";
773 2fb7b1fc Miltiadis Vasilakis
    request.objectRequestType = ASIPithosObjectRequestHashmapWrite;
774 2fb7b1fc Miltiadis Vasilakis
	return request;
775 be116d22 Miltiadis Vasilakis
}
776 be116d22 Miltiadis Vasilakis
777 be116d22 Miltiadis Vasilakis
// PUT storageURL/container/object (from hashes) [If-Match]
778 2fb7b1fc Miltiadis Vasilakis
+ (id)writeObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
779 2fb7b1fc Miltiadis Vasilakis
                           contentType:(NSString *)contentType 
780 2fb7b1fc Miltiadis Vasilakis
                       contentEncoding:(NSString *)contentEncoding 
781 2fb7b1fc Miltiadis Vasilakis
                    contentDisposition:(NSString *)contentDisposition 
782 2fb7b1fc Miltiadis Vasilakis
                              manifest:(NSString *)manifest 
783 2fb7b1fc Miltiadis Vasilakis
                               sharing:(NSString *)sharing 
784 2fb7b1fc Miltiadis Vasilakis
                              isPublic:(NSUInteger)isPublic 
785 2fb7b1fc Miltiadis Vasilakis
                              metadata:(NSDictionary *)metadata 
786 2fb7b1fc Miltiadis Vasilakis
                             blockSize:(NSUInteger)blockSize 
787 2fb7b1fc Miltiadis Vasilakis
                             blockHash:(NSString *)blockHash 
788 2fb7b1fc Miltiadis Vasilakis
                                hashes:(NSArray *)hashes 
789 2fb7b1fc Miltiadis Vasilakis
                                 bytes:(NSUInteger)bytes 
790 2fb7b1fc Miltiadis Vasilakis
                               ifMatch:(NSString *)matchETag {
791 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self writeObjectDataRequestWithPithos:pithos containerName:containerName objectName:objectName 
792 be116d22 Miltiadis Vasilakis
                                                                        contentType:contentType 
793 be116d22 Miltiadis Vasilakis
                                                                    contentEncoding:contentEncoding 
794 be116d22 Miltiadis Vasilakis
                                                                 contentDisposition:contentDisposition 
795 be116d22 Miltiadis Vasilakis
                                                                           manifest:manifest 
796 be116d22 Miltiadis Vasilakis
                                                                            sharing:sharing 
797 be116d22 Miltiadis Vasilakis
                                                                           isPublic:isPublic 
798 be116d22 Miltiadis Vasilakis
                                                                           metadata:metadata 
799 be116d22 Miltiadis Vasilakis
                                                                          blockSize:blockSize 
800 be116d22 Miltiadis Vasilakis
                                                                          blockHash:blockHash 
801 be116d22 Miltiadis Vasilakis
                                                                             hashes:hashes 
802 be116d22 Miltiadis Vasilakis
                                                                              bytes:bytes];
803 be116d22 Miltiadis Vasilakis
    [request addRequestIfMatchHeader:matchETag];
804 be116d22 Miltiadis Vasilakis
    return request;                                                                          
805 be116d22 Miltiadis Vasilakis
}
806 be116d22 Miltiadis Vasilakis
807 be116d22 Miltiadis Vasilakis
// PUT storageURL/container/object (from hashes) [If-None-Match]
808 2fb7b1fc Miltiadis Vasilakis
+ (id)writeObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
809 2fb7b1fc Miltiadis Vasilakis
                           contentType:(NSString *)contentType 
810 2fb7b1fc Miltiadis Vasilakis
                       contentEncoding:(NSString *)contentEncoding 
811 2fb7b1fc Miltiadis Vasilakis
                    contentDisposition:(NSString *)contentDisposition 
812 2fb7b1fc Miltiadis Vasilakis
                              manifest:(NSString *)manifest 
813 2fb7b1fc Miltiadis Vasilakis
                               sharing:(NSString *)sharing 
814 2fb7b1fc Miltiadis Vasilakis
                              isPublic:(NSUInteger)isPublic 
815 2fb7b1fc Miltiadis Vasilakis
                              metadata:(NSDictionary *)metadata 
816 2fb7b1fc Miltiadis Vasilakis
                             blockSize:(NSUInteger)blockSize 
817 2fb7b1fc Miltiadis Vasilakis
                             blockHash:(NSString *)blockHash 
818 2fb7b1fc Miltiadis Vasilakis
                                hashes:(NSArray *)hashes 
819 2fb7b1fc Miltiadis Vasilakis
                                 bytes:(NSUInteger)bytes 
820 2fb7b1fc Miltiadis Vasilakis
                           ifNoneMatch:(NSString *)matchETag {
821 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self writeObjectDataRequestWithPithos:pithos containerName:containerName objectName:objectName 
822 be116d22 Miltiadis Vasilakis
                                                                        contentType:contentType 
823 be116d22 Miltiadis Vasilakis
                                                                    contentEncoding:contentEncoding 
824 be116d22 Miltiadis Vasilakis
                                                                 contentDisposition:contentDisposition 
825 be116d22 Miltiadis Vasilakis
                                                                           manifest:manifest 
826 be116d22 Miltiadis Vasilakis
                                                                            sharing:sharing 
827 be116d22 Miltiadis Vasilakis
                                                                           isPublic:isPublic 
828 be116d22 Miltiadis Vasilakis
                                                                           metadata:metadata 
829 be116d22 Miltiadis Vasilakis
                                                                          blockSize:blockSize 
830 be116d22 Miltiadis Vasilakis
                                                                          blockHash:blockHash 
831 be116d22 Miltiadis Vasilakis
                                                                             hashes:hashes 
832 be116d22 Miltiadis Vasilakis
                                                                              bytes:bytes];
833 be116d22 Miltiadis Vasilakis
    [request addRequestIfNoneMatchHeader:matchETag];
834 be116d22 Miltiadis Vasilakis
    return request;                                                                          
835 be116d22 Miltiadis Vasilakis
}
836 be116d22 Miltiadis Vasilakis
837 be116d22 Miltiadis Vasilakis
// PUT storageURL/container/object (copy from source)
838 2fb7b1fc Miltiadis Vasilakis
+ (id)copyObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
839 2fb7b1fc Miltiadis Vasilakis
                          contentType:(NSString *)contentType 
840 2fb7b1fc Miltiadis Vasilakis
                      contentEncoding:(NSString *)contentEncoding 
841 2fb7b1fc Miltiadis Vasilakis
                   contentDisposition:(NSString *)contentDisposition 
842 2fb7b1fc Miltiadis Vasilakis
                             manifest:(NSString *)manifest 
843 2fb7b1fc Miltiadis Vasilakis
                              sharing:(NSString *)sharing 
844 2fb7b1fc Miltiadis Vasilakis
                             isPublic:(NSUInteger)isPublic 
845 2fb7b1fc Miltiadis Vasilakis
                             metadata:(NSDictionary *)metadata 
846 2fb7b1fc Miltiadis Vasilakis
                  sourceContainerName:(NSString *)sourceContainerName 
847 2fb7b1fc Miltiadis Vasilakis
                     sourceObjectName:(NSString *)sourceObjectName
848 2fb7b1fc Miltiadis Vasilakis
                        sourceAccount:(NSString *)sourceAccount
849 2fb7b1fc Miltiadis Vasilakis
                        sourceVersion:(NSString *)sourceVersion {
850 2fb7b1fc Miltiadis Vasilakis
	ASIPithosObjectRequest *request = [self storageRequestWithMethod:@"PUT" pithos:pithos containerName:containerName objectName:objectName];
851 be116d22 Miltiadis Vasilakis
    [request prepareObjectRequestWithETag:nil 
852 be116d22 Miltiadis Vasilakis
                              contentType:contentType 
853 be116d22 Miltiadis Vasilakis
                          contentEncoding:contentEncoding 
854 be116d22 Miltiadis Vasilakis
                       contentDisposition:contentDisposition 
855 be116d22 Miltiadis Vasilakis
                                 manifest:manifest 
856 be116d22 Miltiadis Vasilakis
                                  sharing:sharing 
857 be116d22 Miltiadis Vasilakis
                                 isPublic:isPublic 
858 be116d22 Miltiadis Vasilakis
                                 metadata:metadata];
859 be116d22 Miltiadis Vasilakis
    [request addRequestHeader:@"Content-Length" value:@"0"];
860 6b3a5e6a Miltiadis Vasilakis
    [request addRequestHeader:@"X-Copy-From" 
861 6d3af6ef Miltiadis Vasilakis
                        value:[self encodeToPercentEscape:[NSString stringWithFormat:@"/%@/%@", sourceContainerName, sourceObjectName]]];
862 9d03a93c Miltiadis Vasilakis
    if (sourceAccount)
863 6b3a5e6a Miltiadis Vasilakis
        [request addRequestHeader:@"X-Source-Account" 
864 6d3af6ef Miltiadis Vasilakis
                            value:[self encodeToPercentEscape:sourceAccount]];
865 be116d22 Miltiadis Vasilakis
    if (sourceVersion)
866 be116d22 Miltiadis Vasilakis
        [request addRequestHeader:@"X-Source-Version" value:sourceVersion];
867 be116d22 Miltiadis Vasilakis
    return request;
868 be116d22 Miltiadis Vasilakis
}
869 be116d22 Miltiadis Vasilakis
870 be116d22 Miltiadis Vasilakis
// PUT storageURL/container/object (copy from source) [If-Match]
871 2fb7b1fc Miltiadis Vasilakis
+ (id)copyObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
872 2fb7b1fc Miltiadis Vasilakis
                          contentType:(NSString *)contentType 
873 2fb7b1fc Miltiadis Vasilakis
                      contentEncoding:(NSString *)contentEncoding 
874 2fb7b1fc Miltiadis Vasilakis
                   contentDisposition:(NSString *)contentDisposition 
875 2fb7b1fc Miltiadis Vasilakis
                             manifest:(NSString *)manifest 
876 2fb7b1fc Miltiadis Vasilakis
                              sharing:(NSString *)sharing 
877 2fb7b1fc Miltiadis Vasilakis
                             isPublic:(NSUInteger)isPublic 
878 2fb7b1fc Miltiadis Vasilakis
                             metadata:(NSDictionary *)metadata 
879 2fb7b1fc Miltiadis Vasilakis
                  sourceContainerName:(NSString *)sourceContainerName 
880 2fb7b1fc Miltiadis Vasilakis
                     sourceObjectName:(NSString *)sourceObjectName
881 2fb7b1fc Miltiadis Vasilakis
                        sourceAccount:(NSString *)sourceAccount
882 2fb7b1fc Miltiadis Vasilakis
                        sourceVersion:(NSString *)sourceVersion 
883 2fb7b1fc Miltiadis Vasilakis
                              ifMatch:(NSString *)matchETag {
884 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self copyObjectDataRequestWithPithos:pithos containerName:containerName objectName:objectName 
885 be116d22 Miltiadis Vasilakis
                                                                       contentType:contentType 
886 be116d22 Miltiadis Vasilakis
                                                                   contentEncoding:contentEncoding 
887 be116d22 Miltiadis Vasilakis
                                                                contentDisposition:contentDisposition 
888 be116d22 Miltiadis Vasilakis
                                                                          manifest:manifest 
889 be116d22 Miltiadis Vasilakis
                                                                           sharing:sharing 
890 be116d22 Miltiadis Vasilakis
                                                                          isPublic:isPublic 
891 be116d22 Miltiadis Vasilakis
                                                                          metadata:metadata 
892 be116d22 Miltiadis Vasilakis
                                                               sourceContainerName:sourceContainerName 
893 be116d22 Miltiadis Vasilakis
                                                                  sourceObjectName:sourceObjectName 
894 9d03a93c Miltiadis Vasilakis
                                                                     sourceAccount:sourceAccount
895 be116d22 Miltiadis Vasilakis
                                                                     sourceVersion:sourceVersion];
896 be116d22 Miltiadis Vasilakis
    [request addRequestIfMatchHeader:matchETag];
897 be116d22 Miltiadis Vasilakis
    return request;                                                                          
898 be116d22 Miltiadis Vasilakis
}
899 be116d22 Miltiadis Vasilakis
900 be116d22 Miltiadis Vasilakis
// PUT storageURL/container/object (copy from source) [If-None-Match]
901 2fb7b1fc Miltiadis Vasilakis
+ (id)copyObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
902 2fb7b1fc Miltiadis Vasilakis
                          contentType:(NSString *)contentType 
903 2fb7b1fc Miltiadis Vasilakis
                      contentEncoding:(NSString *)contentEncoding 
904 2fb7b1fc Miltiadis Vasilakis
                   contentDisposition:(NSString *)contentDisposition 
905 2fb7b1fc Miltiadis Vasilakis
                             manifest:(NSString *)manifest 
906 2fb7b1fc Miltiadis Vasilakis
                              sharing:(NSString *)sharing 
907 2fb7b1fc Miltiadis Vasilakis
                             isPublic:(NSUInteger)isPublic 
908 2fb7b1fc Miltiadis Vasilakis
                             metadata:(NSDictionary *)metadata 
909 2fb7b1fc Miltiadis Vasilakis
                  sourceContainerName:(NSString *)sourceContainerName 
910 2fb7b1fc Miltiadis Vasilakis
                     sourceObjectName:(NSString *)sourceObjectName
911 2fb7b1fc Miltiadis Vasilakis
                        sourceAccount:(NSString *)sourceAccount
912 2fb7b1fc Miltiadis Vasilakis
                        sourceVersion:(NSString *)sourceVersion 
913 2fb7b1fc Miltiadis Vasilakis
                          ifNoneMatch:(NSString *)matchETag {
914 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self copyObjectDataRequestWithPithos:pithos containerName:containerName objectName:objectName 
915 be116d22 Miltiadis Vasilakis
                                                                       contentType:contentType 
916 be116d22 Miltiadis Vasilakis
                                                                   contentEncoding:contentEncoding 
917 be116d22 Miltiadis Vasilakis
                                                                contentDisposition:contentDisposition 
918 be116d22 Miltiadis Vasilakis
                                                                          manifest:manifest 
919 be116d22 Miltiadis Vasilakis
                                                                           sharing:sharing 
920 be116d22 Miltiadis Vasilakis
                                                                          isPublic:isPublic 
921 be116d22 Miltiadis Vasilakis
                                                                          metadata:metadata 
922 be116d22 Miltiadis Vasilakis
                                                               sourceContainerName:sourceContainerName 
923 be116d22 Miltiadis Vasilakis
                                                                  sourceObjectName:sourceObjectName 
924 9d03a93c Miltiadis Vasilakis
                                                                     sourceAccount:sourceAccount
925 be116d22 Miltiadis Vasilakis
                                                                     sourceVersion:sourceVersion];
926 be116d22 Miltiadis Vasilakis
    [request addRequestIfNoneMatchHeader:matchETag];
927 be116d22 Miltiadis Vasilakis
    return request;                                                                          
928 be116d22 Miltiadis Vasilakis
}
929 be116d22 Miltiadis Vasilakis
930 be116d22 Miltiadis Vasilakis
// COPY storageURL/container/object (copy to destination)
931 2fb7b1fc Miltiadis Vasilakis
+ (id)copyObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
932 2fb7b1fc Miltiadis Vasilakis
                          contentType:(NSString *)contentType 
933 2fb7b1fc Miltiadis Vasilakis
                      contentEncoding:(NSString *)contentEncoding 
934 2fb7b1fc Miltiadis Vasilakis
                   contentDisposition:(NSString *)contentDisposition 
935 2fb7b1fc Miltiadis Vasilakis
                             manifest:(NSString *)manifest 
936 2fb7b1fc Miltiadis Vasilakis
                              sharing:(NSString *)sharing 
937 2fb7b1fc Miltiadis Vasilakis
                             isPublic:(NSUInteger)isPublic 
938 2fb7b1fc Miltiadis Vasilakis
                             metadata:(NSDictionary *)metadata 
939 2fb7b1fc Miltiadis Vasilakis
             destinationContainerName:(NSString *)destinationContainerName 
940 2fb7b1fc Miltiadis Vasilakis
                destinationObjectName:(NSString *)destinationObjectName
941 2fb7b1fc Miltiadis Vasilakis
                   destinationAccount:(NSString *)destinationAccount
942 2fb7b1fc Miltiadis Vasilakis
                        sourceVersion:(NSString *)sourceVersion {
943 308855b4 Miltiadis Vasilakis
    NSString *queryString = nil;
944 308855b4 Miltiadis Vasilakis
    if (!contentType)
945 308855b4 Miltiadis Vasilakis
        queryString = @"?ignore_content_type=";
946 308855b4 Miltiadis Vasilakis
	ASIPithosObjectRequest *request = [self storageRequestWithMethod:@"COPY" pithos:pithos containerName:containerName objectName:objectName queryString:queryString];
947 be116d22 Miltiadis Vasilakis
    [request prepareObjectRequestWithETag:nil 
948 be116d22 Miltiadis Vasilakis
                              contentType:contentType 
949 be116d22 Miltiadis Vasilakis
                          contentEncoding:contentEncoding 
950 be116d22 Miltiadis Vasilakis
                       contentDisposition:contentDisposition 
951 be116d22 Miltiadis Vasilakis
                                 manifest:manifest 
952 be116d22 Miltiadis Vasilakis
                                  sharing:sharing 
953 be116d22 Miltiadis Vasilakis
                                 isPublic:isPublic 
954 be116d22 Miltiadis Vasilakis
                                 metadata:metadata];
955 6b3a5e6a Miltiadis Vasilakis
    [request addRequestHeader:@"Destination" 
956 6d3af6ef Miltiadis Vasilakis
                        value:[self encodeToPercentEscape:[NSString stringWithFormat:@"/%@/%@", destinationContainerName, destinationObjectName]]];
957 9d03a93c Miltiadis Vasilakis
    if (destinationAccount)
958 6b3a5e6a Miltiadis Vasilakis
        [request addRequestHeader:@"Destination-Account" 
959 6d3af6ef Miltiadis Vasilakis
                            value:[self encodeToPercentEscape:destinationAccount]];
960 be116d22 Miltiadis Vasilakis
    if (sourceVersion)
961 be116d22 Miltiadis Vasilakis
        [request addRequestHeader:@"X-Source-Version" value:sourceVersion];
962 be116d22 Miltiadis Vasilakis
    return request;
963 be116d22 Miltiadis Vasilakis
}
964 be116d22 Miltiadis Vasilakis
965 be116d22 Miltiadis Vasilakis
// COPY storageURL/container/object (copy to destination) [If-Match]
966 2fb7b1fc Miltiadis Vasilakis
+ (id)copyObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
967 2fb7b1fc Miltiadis Vasilakis
                          contentType:(NSString *)contentType 
968 2fb7b1fc Miltiadis Vasilakis
                      contentEncoding:(NSString *)contentEncoding 
969 2fb7b1fc Miltiadis Vasilakis
                   contentDisposition:(NSString *)contentDisposition 
970 2fb7b1fc Miltiadis Vasilakis
                             manifest:(NSString *)manifest 
971 2fb7b1fc Miltiadis Vasilakis
                              sharing:(NSString *)sharing 
972 2fb7b1fc Miltiadis Vasilakis
                             isPublic:(NSUInteger)isPublic 
973 2fb7b1fc Miltiadis Vasilakis
                             metadata:(NSDictionary *)metadata 
974 2fb7b1fc Miltiadis Vasilakis
             destinationContainerName:(NSString *)destinationContainerName 
975 2fb7b1fc Miltiadis Vasilakis
                destinationObjectName:(NSString *)destinationObjectName
976 2fb7b1fc Miltiadis Vasilakis
                   destinationAccount:(NSString *)destinationAccount
977 2fb7b1fc Miltiadis Vasilakis
                        sourceVersion:(NSString *)sourceVersion 
978 2fb7b1fc Miltiadis Vasilakis
                              ifMatch:(NSString *)matchETag {
979 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self copyObjectDataRequestWithPithos:pithos containerName:containerName objectName:objectName 
980 be116d22 Miltiadis Vasilakis
                                                                       contentType:contentType 
981 be116d22 Miltiadis Vasilakis
                                                                   contentEncoding:contentEncoding 
982 be116d22 Miltiadis Vasilakis
                                                                contentDisposition:contentDisposition 
983 be116d22 Miltiadis Vasilakis
                                                                          manifest:manifest 
984 be116d22 Miltiadis Vasilakis
                                                                           sharing:sharing 
985 be116d22 Miltiadis Vasilakis
                                                                          isPublic:isPublic 
986 be116d22 Miltiadis Vasilakis
                                                                          metadata:metadata 
987 be116d22 Miltiadis Vasilakis
                                                          destinationContainerName:destinationContainerName 
988 be116d22 Miltiadis Vasilakis
                                                             destinationObjectName:destinationObjectName 
989 9d03a93c Miltiadis Vasilakis
                                                                destinationAccount:destinationAccount
990 be116d22 Miltiadis Vasilakis
                                                                     sourceVersion:sourceVersion];
991 be116d22 Miltiadis Vasilakis
    [request addRequestIfMatchHeader:matchETag];
992 be116d22 Miltiadis Vasilakis
    return request;                                                                          
993 be116d22 Miltiadis Vasilakis
}
994 be116d22 Miltiadis Vasilakis
995 be116d22 Miltiadis Vasilakis
// COPY storageURL/container/object (copy to destination) [If-None-Match]
996 2fb7b1fc Miltiadis Vasilakis
+ (id)copyObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
997 2fb7b1fc Miltiadis Vasilakis
                          contentType:(NSString *)contentType 
998 2fb7b1fc Miltiadis Vasilakis
                      contentEncoding:(NSString *)contentEncoding 
999 2fb7b1fc Miltiadis Vasilakis
                   contentDisposition:(NSString *)contentDisposition 
1000 2fb7b1fc Miltiadis Vasilakis
                             manifest:(NSString *)manifest 
1001 2fb7b1fc Miltiadis Vasilakis
                              sharing:(NSString *)sharing 
1002 2fb7b1fc Miltiadis Vasilakis
                             isPublic:(NSUInteger)isPublic 
1003 2fb7b1fc Miltiadis Vasilakis
                             metadata:(NSDictionary *)metadata 
1004 2fb7b1fc Miltiadis Vasilakis
             destinationContainerName:(NSString *)destinationContainerName 
1005 2fb7b1fc Miltiadis Vasilakis
                destinationObjectName:(NSString *)destinationObjectName
1006 2fb7b1fc Miltiadis Vasilakis
                   destinationAccount:(NSString *)destinationAccount
1007 2fb7b1fc Miltiadis Vasilakis
                        sourceVersion:(NSString *)sourceVersion 
1008 2fb7b1fc Miltiadis Vasilakis
                          ifNoneMatch:(NSString *)matchETag {
1009 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self copyObjectDataRequestWithPithos:pithos containerName:containerName objectName:objectName 
1010 be116d22 Miltiadis Vasilakis
                                                                       contentType:contentType 
1011 be116d22 Miltiadis Vasilakis
                                                                   contentEncoding:contentEncoding 
1012 be116d22 Miltiadis Vasilakis
                                                                contentDisposition:contentDisposition 
1013 be116d22 Miltiadis Vasilakis
                                                                          manifest:manifest 
1014 be116d22 Miltiadis Vasilakis
                                                                           sharing:sharing 
1015 be116d22 Miltiadis Vasilakis
                                                                          isPublic:isPublic 
1016 be116d22 Miltiadis Vasilakis
                                                                          metadata:metadata 
1017 be116d22 Miltiadis Vasilakis
                                                          destinationContainerName:destinationContainerName 
1018 be116d22 Miltiadis Vasilakis
                                                             destinationObjectName:destinationObjectName 
1019 9d03a93c Miltiadis Vasilakis
                                                                destinationAccount:destinationAccount
1020 be116d22 Miltiadis Vasilakis
                                                                     sourceVersion:sourceVersion];
1021 be116d22 Miltiadis Vasilakis
    [request addRequestIfNoneMatchHeader:matchETag];
1022 be116d22 Miltiadis Vasilakis
    return request;                                                                          
1023 be116d22 Miltiadis Vasilakis
}
1024 be116d22 Miltiadis Vasilakis
1025 be116d22 Miltiadis Vasilakis
// PUT storageURL/container/object (move from source)
1026 2fb7b1fc Miltiadis Vasilakis
+ (id)moveObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
1027 2fb7b1fc Miltiadis Vasilakis
                          contentType:(NSString *)contentType 
1028 2fb7b1fc Miltiadis Vasilakis
                      contentEncoding:(NSString *)contentEncoding 
1029 2fb7b1fc Miltiadis Vasilakis
                   contentDisposition:(NSString *)contentDisposition 
1030 2fb7b1fc Miltiadis Vasilakis
                             manifest:(NSString *)manifest 
1031 2fb7b1fc Miltiadis Vasilakis
                              sharing:(NSString *)sharing 
1032 2fb7b1fc Miltiadis Vasilakis
                             isPublic:(NSUInteger)isPublic 
1033 2fb7b1fc Miltiadis Vasilakis
                             metadata:(NSDictionary *)metadata 
1034 2fb7b1fc Miltiadis Vasilakis
                  sourceContainerName:(NSString *)sourceContainerName 
1035 2fb7b1fc Miltiadis Vasilakis
                     sourceObjectName:(NSString *)sourceObjectName 
1036 2fb7b1fc Miltiadis Vasilakis
                        sourceAccount:(NSString *)sourceAccount { 
1037 2fb7b1fc Miltiadis Vasilakis
	ASIPithosObjectRequest *request = [self storageRequestWithMethod:@"PUT" pithos:pithos containerName:containerName objectName:objectName];
1038 be116d22 Miltiadis Vasilakis
    [request prepareObjectRequestWithETag:nil 
1039 be116d22 Miltiadis Vasilakis
                              contentType:contentType 
1040 be116d22 Miltiadis Vasilakis
                          contentEncoding:contentEncoding 
1041 be116d22 Miltiadis Vasilakis
                       contentDisposition:contentDisposition 
1042 be116d22 Miltiadis Vasilakis
                                 manifest:manifest 
1043 be116d22 Miltiadis Vasilakis
                                  sharing:sharing 
1044 be116d22 Miltiadis Vasilakis
                                 isPublic:isPublic 
1045 be116d22 Miltiadis Vasilakis
                                 metadata:metadata];
1046 be116d22 Miltiadis Vasilakis
    [request addRequestHeader:@"Content-Length" value:@"0"];
1047 6b3a5e6a Miltiadis Vasilakis
    [request addRequestHeader:@"X-Move-From" 
1048 6d3af6ef Miltiadis Vasilakis
                        value:[self encodeToPercentEscape:[NSString stringWithFormat:@"/%@/%@", sourceContainerName, sourceObjectName]]];
1049 9d03a93c Miltiadis Vasilakis
    if (sourceAccount)
1050 6b3a5e6a Miltiadis Vasilakis
        [request addRequestHeader:@"X-Source-Account" 
1051 6d3af6ef Miltiadis Vasilakis
                            value:[self encodeToPercentEscape:sourceAccount]];
1052 be116d22 Miltiadis Vasilakis
    return request;
1053 be116d22 Miltiadis Vasilakis
}
1054 be116d22 Miltiadis Vasilakis
1055 be116d22 Miltiadis Vasilakis
// PUT storageURL/container/object (move from source) [If-Match]
1056 2fb7b1fc Miltiadis Vasilakis
+ (id)moveObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
1057 2fb7b1fc Miltiadis Vasilakis
                          contentType:(NSString *)contentType 
1058 2fb7b1fc Miltiadis Vasilakis
                      contentEncoding:(NSString *)contentEncoding 
1059 2fb7b1fc Miltiadis Vasilakis
                   contentDisposition:(NSString *)contentDisposition 
1060 2fb7b1fc Miltiadis Vasilakis
                             manifest:(NSString *)manifest 
1061 2fb7b1fc Miltiadis Vasilakis
                              sharing:(NSString *)sharing 
1062 2fb7b1fc Miltiadis Vasilakis
                             isPublic:(NSUInteger)isPublic 
1063 2fb7b1fc Miltiadis Vasilakis
                             metadata:(NSDictionary *)metadata 
1064 2fb7b1fc Miltiadis Vasilakis
                  sourceContainerName:(NSString *)sourceContainerName 
1065 2fb7b1fc Miltiadis Vasilakis
                     sourceObjectName:(NSString *)sourceObjectName
1066 2fb7b1fc Miltiadis Vasilakis
                        sourceAccount:(NSString *)sourceAccount
1067 2fb7b1fc Miltiadis Vasilakis
                              ifMatch:(NSString *)matchETag {
1068 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self moveObjectDataRequestWithPithos:pithos containerName:containerName objectName:objectName 
1069 be116d22 Miltiadis Vasilakis
                                                                       contentType:contentType 
1070 be116d22 Miltiadis Vasilakis
                                                                   contentEncoding:contentEncoding 
1071 be116d22 Miltiadis Vasilakis
                                                                contentDisposition:contentDisposition 
1072 be116d22 Miltiadis Vasilakis
                                                                          manifest:manifest 
1073 be116d22 Miltiadis Vasilakis
                                                                           sharing:sharing 
1074 be116d22 Miltiadis Vasilakis
                                                                          isPublic:isPublic 
1075 be116d22 Miltiadis Vasilakis
                                                                          metadata:metadata 
1076 be116d22 Miltiadis Vasilakis
                                                               sourceContainerName:sourceContainerName 
1077 9d03a93c Miltiadis Vasilakis
                                                                  sourceObjectName:sourceObjectName 
1078 9d03a93c Miltiadis Vasilakis
                                                                     sourceAccount:sourceAccount];
1079 be116d22 Miltiadis Vasilakis
    [request addRequestIfMatchHeader:matchETag];
1080 be116d22 Miltiadis Vasilakis
    return request;                                               
1081 be116d22 Miltiadis Vasilakis
}
1082 be116d22 Miltiadis Vasilakis
1083 be116d22 Miltiadis Vasilakis
// PUT storageURL/container/object (move from source) [If-None-Match]
1084 2fb7b1fc Miltiadis Vasilakis
+ (id)moveObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
1085 2fb7b1fc Miltiadis Vasilakis
                          contentType:(NSString *)contentType 
1086 2fb7b1fc Miltiadis Vasilakis
                      contentEncoding:(NSString *)contentEncoding 
1087 2fb7b1fc Miltiadis Vasilakis
                   contentDisposition:(NSString *)contentDisposition 
1088 2fb7b1fc Miltiadis Vasilakis
                             manifest:(NSString *)manifest 
1089 2fb7b1fc Miltiadis Vasilakis
                              sharing:(NSString *)sharing 
1090 2fb7b1fc Miltiadis Vasilakis
                             isPublic:(NSUInteger)isPublic 
1091 2fb7b1fc Miltiadis Vasilakis
                             metadata:(NSDictionary *)metadata 
1092 2fb7b1fc Miltiadis Vasilakis
                  sourceContainerName:(NSString *)sourceContainerName 
1093 2fb7b1fc Miltiadis Vasilakis
                     sourceObjectName:(NSString *)sourceObjectName
1094 2fb7b1fc Miltiadis Vasilakis
                        sourceAccount:(NSString *)sourceAccount
1095 2fb7b1fc Miltiadis Vasilakis
                          ifNoneMatch:(NSString *)matchETag {
1096 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self moveObjectDataRequestWithPithos:pithos containerName:containerName objectName:objectName 
1097 be116d22 Miltiadis Vasilakis
                                                                       contentType:contentType 
1098 be116d22 Miltiadis Vasilakis
                                                                   contentEncoding:contentEncoding 
1099 be116d22 Miltiadis Vasilakis
                                                                contentDisposition:contentDisposition 
1100 be116d22 Miltiadis Vasilakis
                                                                          manifest:manifest 
1101 be116d22 Miltiadis Vasilakis
                                                                           sharing:sharing 
1102 be116d22 Miltiadis Vasilakis
                                                                          isPublic:isPublic 
1103 be116d22 Miltiadis Vasilakis
                                                                          metadata:metadata 
1104 be116d22 Miltiadis Vasilakis
                                                               sourceContainerName:sourceContainerName 
1105 9d03a93c Miltiadis Vasilakis
                                                                  sourceObjectName:sourceObjectName 
1106 9d03a93c Miltiadis Vasilakis
                                                                     sourceAccount:sourceAccount];
1107 be116d22 Miltiadis Vasilakis
    [request addRequestIfNoneMatchHeader:matchETag];
1108 be116d22 Miltiadis Vasilakis
    return request;                                               
1109 be116d22 Miltiadis Vasilakis
}
1110 be116d22 Miltiadis Vasilakis
1111 be116d22 Miltiadis Vasilakis
// MOVE storageURL/container/object (move to destination)
1112 2fb7b1fc Miltiadis Vasilakis
+ (id)moveObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
1113 2fb7b1fc Miltiadis Vasilakis
                          contentType:(NSString *)contentType 
1114 2fb7b1fc Miltiadis Vasilakis
                      contentEncoding:(NSString *)contentEncoding 
1115 2fb7b1fc Miltiadis Vasilakis
                   contentDisposition:(NSString *)contentDisposition 
1116 2fb7b1fc Miltiadis Vasilakis
                             manifest:(NSString *)manifest 
1117 2fb7b1fc Miltiadis Vasilakis
                              sharing:(NSString *)sharing 
1118 2fb7b1fc Miltiadis Vasilakis
                             isPublic:(NSUInteger)isPublic 
1119 2fb7b1fc Miltiadis Vasilakis
                             metadata:(NSDictionary *)metadata 
1120 2fb7b1fc Miltiadis Vasilakis
             destinationContainerName:(NSString *)destinationContainerName 
1121 2fb7b1fc Miltiadis Vasilakis
                destinationObjectName:(NSString *)destinationObjectName 
1122 2fb7b1fc Miltiadis Vasilakis
                   destinationAccount:(NSString *)destinationAccount {
1123 308855b4 Miltiadis Vasilakis
    NSString *queryString = nil;
1124 308855b4 Miltiadis Vasilakis
    if (!contentType)
1125 308855b4 Miltiadis Vasilakis
        queryString = @"?ignore_content_type=";
1126 308855b4 Miltiadis Vasilakis
	ASIPithosObjectRequest *request = [self storageRequestWithMethod:@"MOVE" pithos:pithos containerName:containerName objectName:objectName queryString:queryString];
1127 be116d22 Miltiadis Vasilakis
    [request prepareObjectRequestWithETag:nil 
1128 be116d22 Miltiadis Vasilakis
                              contentType:contentType 
1129 be116d22 Miltiadis Vasilakis
                          contentEncoding:contentEncoding 
1130 be116d22 Miltiadis Vasilakis
                       contentDisposition:contentDisposition 
1131 be116d22 Miltiadis Vasilakis
                                 manifest:manifest 
1132 be116d22 Miltiadis Vasilakis
                                  sharing:sharing 
1133 be116d22 Miltiadis Vasilakis
                                 isPublic:isPublic 
1134 be116d22 Miltiadis Vasilakis
                                 metadata:metadata];
1135 6b3a5e6a Miltiadis Vasilakis
    [request addRequestHeader:@"Destination" 
1136 6d3af6ef Miltiadis Vasilakis
                        value:[self encodeToPercentEscape:[NSString stringWithFormat:@"/%@/%@", destinationContainerName, destinationObjectName]]];
1137 9d03a93c Miltiadis Vasilakis
    if (destinationAccount)
1138 6b3a5e6a Miltiadis Vasilakis
        [request addRequestHeader:@"Destination-Account" 
1139 6d3af6ef Miltiadis Vasilakis
                            value:[self encodeToPercentEscape:destinationAccount]];
1140 be116d22 Miltiadis Vasilakis
    return request;
1141 be116d22 Miltiadis Vasilakis
}
1142 be116d22 Miltiadis Vasilakis
1143 be116d22 Miltiadis Vasilakis
// MOVE storageURL/container/object (move to destination) [If-Match]
1144 2fb7b1fc Miltiadis Vasilakis
+ (id)moveObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
1145 2fb7b1fc Miltiadis Vasilakis
                          contentType:(NSString *)contentType 
1146 2fb7b1fc Miltiadis Vasilakis
                      contentEncoding:(NSString *)contentEncoding 
1147 2fb7b1fc Miltiadis Vasilakis
                   contentDisposition:(NSString *)contentDisposition 
1148 2fb7b1fc Miltiadis Vasilakis
                             manifest:(NSString *)manifest 
1149 2fb7b1fc Miltiadis Vasilakis
                              sharing:(NSString *)sharing 
1150 2fb7b1fc Miltiadis Vasilakis
                             isPublic:(NSUInteger)isPublic 
1151 2fb7b1fc Miltiadis Vasilakis
                             metadata:(NSDictionary *)metadata 
1152 2fb7b1fc Miltiadis Vasilakis
             destinationContainerName:(NSString *)destinationContainerName 
1153 2fb7b1fc Miltiadis Vasilakis
                destinationObjectName:(NSString *)destinationObjectName
1154 2fb7b1fc Miltiadis Vasilakis
                   destinationAccount:(NSString *)destinationAccount
1155 2fb7b1fc Miltiadis Vasilakis
                              ifMatch:(NSString *)matchETag {
1156 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self moveObjectDataRequestWithPithos:pithos containerName:containerName objectName:objectName 
1157 be116d22 Miltiadis Vasilakis
                                                                       contentType:contentType 
1158 be116d22 Miltiadis Vasilakis
                                                                   contentEncoding:contentEncoding 
1159 be116d22 Miltiadis Vasilakis
                                                                contentDisposition:contentDisposition 
1160 be116d22 Miltiadis Vasilakis
                                                                          manifest:manifest 
1161 be116d22 Miltiadis Vasilakis
                                                                           sharing:sharing 
1162 be116d22 Miltiadis Vasilakis
                                                                          isPublic:isPublic 
1163 be116d22 Miltiadis Vasilakis
                                                                          metadata:metadata 
1164 be116d22 Miltiadis Vasilakis
                                                          destinationContainerName:destinationContainerName 
1165 9d03a93c Miltiadis Vasilakis
                                                             destinationObjectName:destinationObjectName 
1166 9d03a93c Miltiadis Vasilakis
                                                                destinationAccount:destinationAccount];
1167 be116d22 Miltiadis Vasilakis
    [request addRequestIfMatchHeader:matchETag];
1168 be116d22 Miltiadis Vasilakis
    return request;                                                                          
1169 be116d22 Miltiadis Vasilakis
}
1170 be116d22 Miltiadis Vasilakis
1171 be116d22 Miltiadis Vasilakis
// MOVE storageURL/container/object (move to destination) [If-None-Match]
1172 2fb7b1fc Miltiadis Vasilakis
+ (id)moveObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
1173 2fb7b1fc Miltiadis Vasilakis
                          contentType:(NSString *)contentType 
1174 2fb7b1fc Miltiadis Vasilakis
                      contentEncoding:(NSString *)contentEncoding 
1175 2fb7b1fc Miltiadis Vasilakis
                   contentDisposition:(NSString *)contentDisposition 
1176 2fb7b1fc Miltiadis Vasilakis
                             manifest:(NSString *)manifest 
1177 2fb7b1fc Miltiadis Vasilakis
                              sharing:(NSString *)sharing 
1178 2fb7b1fc Miltiadis Vasilakis
                             isPublic:(NSUInteger)isPublic 
1179 2fb7b1fc Miltiadis Vasilakis
                             metadata:(NSDictionary *)metadata 
1180 2fb7b1fc Miltiadis Vasilakis
             destinationContainerName:(NSString *)destinationContainerName 
1181 2fb7b1fc Miltiadis Vasilakis
                destinationObjectName:(NSString *)destinationObjectName
1182 2fb7b1fc Miltiadis Vasilakis
                   destinationAccount:(NSString *)destinationAccount
1183 2fb7b1fc Miltiadis Vasilakis
                          ifNoneMatch:(NSString *)matchETag {
1184 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self moveObjectDataRequestWithPithos:pithos containerName:containerName objectName:objectName 
1185 be116d22 Miltiadis Vasilakis
                                                                       contentType:contentType 
1186 be116d22 Miltiadis Vasilakis
                                                                   contentEncoding:contentEncoding 
1187 be116d22 Miltiadis Vasilakis
                                                                contentDisposition:contentDisposition 
1188 be116d22 Miltiadis Vasilakis
                                                                          manifest:manifest 
1189 be116d22 Miltiadis Vasilakis
                                                                           sharing:sharing 
1190 be116d22 Miltiadis Vasilakis
                                                                          isPublic:isPublic 
1191 be116d22 Miltiadis Vasilakis
                                                                          metadata:metadata 
1192 be116d22 Miltiadis Vasilakis
                                                          destinationContainerName:destinationContainerName 
1193 9d03a93c Miltiadis Vasilakis
                                                             destinationObjectName:destinationObjectName 
1194 9d03a93c Miltiadis Vasilakis
                                                                destinationAccount:destinationAccount];
1195 be116d22 Miltiadis Vasilakis
    [request addRequestIfNoneMatchHeader:matchETag];
1196 be116d22 Miltiadis Vasilakis
    return request;                                                                          
1197 be116d22 Miltiadis Vasilakis
}
1198 be116d22 Miltiadis Vasilakis
1199 be116d22 Miltiadis Vasilakis
#pragma mark -
1200 be116d22 Miltiadis Vasilakis
#pragma mark POST
1201 be116d22 Miltiadis Vasilakis
1202 be116d22 Miltiadis Vasilakis
// POST storageURL/container/object?[update=] (update metadata)
1203 2fb7b1fc Miltiadis Vasilakis
+ (id)updateObjectMetadataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
1204 2fb7b1fc Miltiadis Vasilakis
                                     update:(BOOL)update {
1205 be116d22 Miltiadis Vasilakis
    NSString *queryString = nil;
1206 be116d22 Miltiadis Vasilakis
    if (update)
1207 be116d22 Miltiadis Vasilakis
        queryString = @"?update=";
1208 2fb7b1fc Miltiadis Vasilakis
	return [self storageRequestWithMethod:@"POST" pithos:pithos containerName:containerName objectName:objectName queryString:queryString];
1209 be116d22 Miltiadis Vasilakis
}
1210 be116d22 Miltiadis Vasilakis
1211 be116d22 Miltiadis Vasilakis
// POST storageURL/container/object?[update=] (update metadata) [If-Match]
1212 2fb7b1fc Miltiadis Vasilakis
+ (id)updateObjectMetadataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
1213 2fb7b1fc Miltiadis Vasilakis
                                     update:(BOOL)update 
1214 2fb7b1fc Miltiadis Vasilakis
                                    ifMatch:(NSString *)matchETag {
1215 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self updateObjectMetadataRequestWithPithos:pithos containerName:containerName objectName:objectName update:update];
1216 be116d22 Miltiadis Vasilakis
    [request addRequestIfMatchHeader:matchETag];
1217 be116d22 Miltiadis Vasilakis
    return request;                                                                          
1218 be116d22 Miltiadis Vasilakis
}
1219 be116d22 Miltiadis Vasilakis
1220 be116d22 Miltiadis Vasilakis
// POST storageURL/container/object?[update=] (update metadata) [If-None-Match]
1221 2fb7b1fc Miltiadis Vasilakis
+ (id)updateObjectMetadataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
1222 2fb7b1fc Miltiadis Vasilakis
                                     update:(BOOL)update 
1223 2fb7b1fc Miltiadis Vasilakis
                                ifNoneMatch:(NSString *)matchETag {
1224 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self updateObjectMetadataRequestWithPithos:pithos containerName:containerName objectName:objectName update:update];
1225 be116d22 Miltiadis Vasilakis
    [request addRequestIfNoneMatchHeader:matchETag];
1226 be116d22 Miltiadis Vasilakis
    return request;                                                                          
1227 be116d22 Miltiadis Vasilakis
}
1228 be116d22 Miltiadis Vasilakis
1229 be116d22 Miltiadis Vasilakis
// POST storageURL/container/object?[update=] (update metadata)
1230 2fb7b1fc Miltiadis Vasilakis
+ (id)updateObjectMetadataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
1231 2fb7b1fc Miltiadis Vasilakis
                            contentEncoding:(NSString *)contentEncoding 
1232 2fb7b1fc Miltiadis Vasilakis
                         contentDisposition:(NSString *)contentDisposition 
1233 2fb7b1fc Miltiadis Vasilakis
                                   manifest:(NSString *)manifest 
1234 2fb7b1fc Miltiadis Vasilakis
                                    sharing:(NSString *)sharing 
1235 2fb7b1fc Miltiadis Vasilakis
                                   isPublic:(NSUInteger)isPublic 
1236 2fb7b1fc Miltiadis Vasilakis
                                   metadata:(NSDictionary *)metadata 
1237 2fb7b1fc Miltiadis Vasilakis
                                     update:(BOOL)update {
1238 be116d22 Miltiadis Vasilakis
    NSString *queryString = nil;
1239 be116d22 Miltiadis Vasilakis
    if (update)
1240 be116d22 Miltiadis Vasilakis
        queryString = @"?update=";
1241 2fb7b1fc Miltiadis Vasilakis
	ASIPithosObjectRequest *request = [self storageRequestWithMethod:@"POST" pithos:pithos containerName:containerName objectName:objectName queryString:queryString];
1242 be116d22 Miltiadis Vasilakis
    [request prepareObjectRequestWithETag:nil 
1243 be116d22 Miltiadis Vasilakis
                              contentType:nil 
1244 be116d22 Miltiadis Vasilakis
                          contentEncoding:contentEncoding 
1245 be116d22 Miltiadis Vasilakis
                       contentDisposition:contentDisposition 
1246 be116d22 Miltiadis Vasilakis
                                 manifest:manifest 
1247 be116d22 Miltiadis Vasilakis
                                  sharing:sharing 
1248 be116d22 Miltiadis Vasilakis
                                 isPublic:isPublic 
1249 be116d22 Miltiadis Vasilakis
                                 metadata:metadata];
1250 be116d22 Miltiadis Vasilakis
    return request;
1251 be116d22 Miltiadis Vasilakis
}
1252 be116d22 Miltiadis Vasilakis
1253 be116d22 Miltiadis Vasilakis
// POST storageURL/container/object?[update=] (update metadata) [If-Match]
1254 2fb7b1fc Miltiadis Vasilakis
+ (id)updateObjectMetadataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
1255 2fb7b1fc Miltiadis Vasilakis
                            contentEncoding:(NSString *)contentEncoding 
1256 2fb7b1fc Miltiadis Vasilakis
                         contentDisposition:(NSString *)contentDisposition 
1257 2fb7b1fc Miltiadis Vasilakis
                                   manifest:(NSString *)manifest 
1258 2fb7b1fc Miltiadis Vasilakis
                                    sharing:(NSString *)sharing 
1259 2fb7b1fc Miltiadis Vasilakis
                                   isPublic:(NSUInteger)isPublic 
1260 2fb7b1fc Miltiadis Vasilakis
                                   metadata:(NSDictionary *)metadata 
1261 2fb7b1fc Miltiadis Vasilakis
                                     update:(BOOL)update 
1262 2fb7b1fc Miltiadis Vasilakis
                                    ifMatch:(NSString *)matchETag {
1263 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self updateObjectMetadataRequestWithPithos:pithos containerName:containerName objectName:objectName 
1264 be116d22 Miltiadis Vasilakis
                                                                         contentEncoding:contentEncoding 
1265 be116d22 Miltiadis Vasilakis
                                                                      contentDisposition:contentDisposition 
1266 be116d22 Miltiadis Vasilakis
                                                                                manifest:manifest 
1267 be116d22 Miltiadis Vasilakis
                                                                                 sharing:sharing 
1268 be116d22 Miltiadis Vasilakis
                                                                                isPublic:isPublic 
1269 be116d22 Miltiadis Vasilakis
                                                                                metadata:metadata 
1270 be116d22 Miltiadis Vasilakis
                                                                                  update:update];
1271 be116d22 Miltiadis Vasilakis
    [request addRequestIfMatchHeader:matchETag];
1272 be116d22 Miltiadis Vasilakis
    return request;                                                                          
1273 be116d22 Miltiadis Vasilakis
}
1274 be116d22 Miltiadis Vasilakis
1275 be116d22 Miltiadis Vasilakis
// POST storageURL/container/object?[update=] (update metadata) [If-None-Match]
1276 2fb7b1fc Miltiadis Vasilakis
+ (id)updateObjectMetadataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
1277 2fb7b1fc Miltiadis Vasilakis
                            contentEncoding:(NSString *)contentEncoding 
1278 2fb7b1fc Miltiadis Vasilakis
                         contentDisposition:(NSString *)contentDisposition 
1279 2fb7b1fc Miltiadis Vasilakis
                                   manifest:(NSString *)manifest 
1280 2fb7b1fc Miltiadis Vasilakis
                                    sharing:(NSString *)sharing 
1281 2fb7b1fc Miltiadis Vasilakis
                                   isPublic:(NSUInteger)isPublic 
1282 2fb7b1fc Miltiadis Vasilakis
                                   metadata:(NSDictionary *)metadata 
1283 2fb7b1fc Miltiadis Vasilakis
                                     update:(BOOL)update 
1284 2fb7b1fc Miltiadis Vasilakis
                                ifNoneMatch:(NSString *)matchETag {
1285 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self updateObjectMetadataRequestWithPithos:pithos containerName:containerName objectName:objectName 
1286 be116d22 Miltiadis Vasilakis
                                                                         contentEncoding:contentEncoding 
1287 be116d22 Miltiadis Vasilakis
                                                                      contentDisposition:contentDisposition 
1288 be116d22 Miltiadis Vasilakis
                                                                                manifest:manifest 
1289 be116d22 Miltiadis Vasilakis
                                                                                 sharing:sharing 
1290 be116d22 Miltiadis Vasilakis
                                                                                isPublic:isPublic 
1291 be116d22 Miltiadis Vasilakis
                                                                                metadata:metadata 
1292 be116d22 Miltiadis Vasilakis
                                                                                  update:update];
1293 be116d22 Miltiadis Vasilakis
    [request addRequestIfNoneMatchHeader:matchETag];
1294 be116d22 Miltiadis Vasilakis
    return request;                                                                          
1295 be116d22 Miltiadis Vasilakis
}
1296 be116d22 Miltiadis Vasilakis
1297 be116d22 Miltiadis Vasilakis
// POST storageURL/container/object?[update=] (update data from ASIPithosObject with data)
1298 2fb7b1fc Miltiadis Vasilakis
+ (id)updateObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName object:(ASIPithosObject *)object 
1299 2fb7b1fc Miltiadis Vasilakis
                                 update:(BOOL)update 
1300 2fb7b1fc Miltiadis Vasilakis
                           contentRange:(NSString *)contentRange {
1301 be116d22 Miltiadis Vasilakis
    NSUInteger isPublic = ASIPithosObjectRequestPublicIgnore;
1302 be116d22 Miltiadis Vasilakis
    if (object.publicURI) {
1303 be116d22 Miltiadis Vasilakis
        isPublic = ASIPithosObjectRequestPublicTrue;
1304 be116d22 Miltiadis Vasilakis
        if ([object.publicURI isEqualToString:@""])
1305 be116d22 Miltiadis Vasilakis
            isPublic = ASIPithosObjectRequestPublicFalse;
1306 be116d22 Miltiadis Vasilakis
    }
1307 2fb7b1fc Miltiadis Vasilakis
    return [self updateObjectDataRequestWithPithos:pithos containerName:containerName objectName:object.name 
1308 be116d22 Miltiadis Vasilakis
                                          contentEncoding:object.contentEncoding 
1309 be116d22 Miltiadis Vasilakis
                                       contentDisposition:object.contentDisposition 
1310 be116d22 Miltiadis Vasilakis
                                                 manifest:object.manifest 
1311 be116d22 Miltiadis Vasilakis
                                                  sharing:object.sharing 
1312 be116d22 Miltiadis Vasilakis
                                                 isPublic:isPublic
1313 be116d22 Miltiadis Vasilakis
                                                 metadata:object.metadata 
1314 be116d22 Miltiadis Vasilakis
                                                   update:update 
1315 be116d22 Miltiadis Vasilakis
                                             contentRange:contentRange 
1316 be116d22 Miltiadis Vasilakis
                                                    bytes:[NSNumber numberWithUnsignedLong:object.bytes]
1317 be116d22 Miltiadis Vasilakis
                                                    data:object.data];
1318 be116d22 Miltiadis Vasilakis
}
1319 be116d22 Miltiadis Vasilakis
1320 be116d22 Miltiadis Vasilakis
// POST storageURL/container/object?[update=] (update data from ASIPithosObject with data) [If-Match]
1321 2fb7b1fc Miltiadis Vasilakis
+ (id)updateObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName object:(ASIPithosObject *)object 
1322 2fb7b1fc Miltiadis Vasilakis
                                 update:(BOOL)update 
1323 2fb7b1fc Miltiadis Vasilakis
                           contentRange:(NSString *)contentRange 
1324 2fb7b1fc Miltiadis Vasilakis
                                ifMatch:(NSString *)matchETag {
1325 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self updateObjectDataRequestWithPithos:pithos containerName:containerName object:object 
1326 be116d22 Miltiadis Vasilakis
                                                                              update:update 
1327 be116d22 Miltiadis Vasilakis
                                                                        contentRange:contentRange];
1328 be116d22 Miltiadis Vasilakis
    [request addRequestIfMatchHeader:matchETag];
1329 be116d22 Miltiadis Vasilakis
    return request;                                                                          
1330 be116d22 Miltiadis Vasilakis
}
1331 be116d22 Miltiadis Vasilakis
1332 be116d22 Miltiadis Vasilakis
// POST storageURL/container/object?[update=] (update data from ASIPithosObject with data) [If-None-Match]
1333 2fb7b1fc Miltiadis Vasilakis
+ (id)updateObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName object:(ASIPithosObject *)object 
1334 2fb7b1fc Miltiadis Vasilakis
                                 update:(BOOL)update 
1335 2fb7b1fc Miltiadis Vasilakis
                           contentRange:(NSString *)contentRange 
1336 2fb7b1fc Miltiadis Vasilakis
                            ifNoneMatch:(NSString *)matchETag {
1337 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self updateObjectDataRequestWithPithos:pithos containerName:containerName object:object 
1338 be116d22 Miltiadis Vasilakis
                                                                              update:update 
1339 be116d22 Miltiadis Vasilakis
                                                                        contentRange:contentRange];
1340 be116d22 Miltiadis Vasilakis
    [request addRequestIfNoneMatchHeader:matchETag];
1341 be116d22 Miltiadis Vasilakis
    return request;                                                                          
1342 be116d22 Miltiadis Vasilakis
}
1343 be116d22 Miltiadis Vasilakis
1344 be116d22 Miltiadis Vasilakis
// POST storageURL/container/object?[update=] (update data from NSData)
1345 2fb7b1fc Miltiadis Vasilakis
+ (id)updateObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
1346 2fb7b1fc Miltiadis Vasilakis
                        contentEncoding:(NSString *)contentEncoding 
1347 2fb7b1fc Miltiadis Vasilakis
                     contentDisposition:(NSString *)contentDisposition 
1348 2fb7b1fc Miltiadis Vasilakis
                               manifest:(NSString *)manifest 
1349 2fb7b1fc Miltiadis Vasilakis
                                sharing:(NSString *)sharing 
1350 2fb7b1fc Miltiadis Vasilakis
                               isPublic:(NSUInteger)isPublic 
1351 2fb7b1fc Miltiadis Vasilakis
                               metadata:(NSDictionary *)metadata 
1352 2fb7b1fc Miltiadis Vasilakis
                                 update:(BOOL)update 
1353 2fb7b1fc Miltiadis Vasilakis
                           contentRange:(NSString *)contentRange 
1354 2fb7b1fc Miltiadis Vasilakis
                                  bytes:(NSNumber *)bytes 
1355 2fb7b1fc Miltiadis Vasilakis
                                   data:(NSData *)data {
1356 be116d22 Miltiadis Vasilakis
    NSString *queryString = nil;
1357 be116d22 Miltiadis Vasilakis
    if (update)
1358 be116d22 Miltiadis Vasilakis
        queryString = @"?update=";
1359 2fb7b1fc Miltiadis Vasilakis
	ASIPithosObjectRequest *request = [self storageRequestWithMethod:@"POST" pithos:pithos containerName:containerName objectName:objectName queryString:queryString];
1360 be116d22 Miltiadis Vasilakis
    [request prepareObjectRequestWithETag:nil
1361 be116d22 Miltiadis Vasilakis
                              contentType:@"application/octet-stream"
1362 be116d22 Miltiadis Vasilakis
                          contentEncoding:contentEncoding 
1363 be116d22 Miltiadis Vasilakis
                       contentDisposition:contentDisposition 
1364 be116d22 Miltiadis Vasilakis
                                 manifest:manifest 
1365 be116d22 Miltiadis Vasilakis
                                  sharing:sharing 
1366 be116d22 Miltiadis Vasilakis
                                 isPublic:isPublic 
1367 be116d22 Miltiadis Vasilakis
                                 metadata:metadata];
1368 be116d22 Miltiadis Vasilakis
    if (contentRange)
1369 be116d22 Miltiadis Vasilakis
        [request addRequestHeader:@"Content-Range" value:contentRange];
1370 be116d22 Miltiadis Vasilakis
    if (bytes)
1371 be116d22 Miltiadis Vasilakis
        [request addRequestHeader:@"X-Object-Bytes" value:[NSString stringWithFormat:@"%lu", [bytes unsignedLongValue]]];
1372 be116d22 Miltiadis Vasilakis
	[request appendPostData:data];
1373 be116d22 Miltiadis Vasilakis
	return request;
1374 be116d22 Miltiadis Vasilakis
}
1375 be116d22 Miltiadis Vasilakis
1376 be116d22 Miltiadis Vasilakis
// POST storageURL/container/object?[update=] (update data from NSData) [If-Match]
1377 2fb7b1fc Miltiadis Vasilakis
+ (id)updateObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
1378 2fb7b1fc Miltiadis Vasilakis
                        contentEncoding:(NSString *)contentEncoding 
1379 2fb7b1fc Miltiadis Vasilakis
                     contentDisposition:(NSString *)contentDisposition 
1380 2fb7b1fc Miltiadis Vasilakis
                               manifest:(NSString *)manifest 
1381 2fb7b1fc Miltiadis Vasilakis
                                sharing:(NSString *)sharing 
1382 2fb7b1fc Miltiadis Vasilakis
                               isPublic:(NSUInteger)isPublic 
1383 2fb7b1fc Miltiadis Vasilakis
                               metadata:(NSDictionary *)metadata 
1384 2fb7b1fc Miltiadis Vasilakis
                                 update:(BOOL)update 
1385 2fb7b1fc Miltiadis Vasilakis
                           contentRange:(NSString *)contentRange 
1386 2fb7b1fc Miltiadis Vasilakis
                                  bytes:(NSNumber *)bytes 
1387 2fb7b1fc Miltiadis Vasilakis
                                   data:(NSData *)data 
1388 2fb7b1fc Miltiadis Vasilakis
                                ifMatch:(NSString *)matchETag {
1389 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self updateObjectDataRequestWithPithos:pithos containerName:containerName objectName:objectName 
1390 be116d22 Miltiadis Vasilakis
                                                                     contentEncoding:contentEncoding 
1391 be116d22 Miltiadis Vasilakis
                                                                  contentDisposition:contentDisposition 
1392 be116d22 Miltiadis Vasilakis
                                                                            manifest:manifest 
1393 be116d22 Miltiadis Vasilakis
                                                                             sharing:sharing 
1394 be116d22 Miltiadis Vasilakis
                                                                            isPublic:isPublic 
1395 be116d22 Miltiadis Vasilakis
                                                                            metadata:metadata 
1396 be116d22 Miltiadis Vasilakis
                                                                              update:update 
1397 be116d22 Miltiadis Vasilakis
                                                                        contentRange:contentRange 
1398 be116d22 Miltiadis Vasilakis
                                                                               bytes:bytes 
1399 be116d22 Miltiadis Vasilakis
                                                                                data:data];
1400 be116d22 Miltiadis Vasilakis
    [request addRequestIfMatchHeader:matchETag];
1401 be116d22 Miltiadis Vasilakis
    return request;                                                                          
1402 be116d22 Miltiadis Vasilakis
}
1403 be116d22 Miltiadis Vasilakis
1404 be116d22 Miltiadis Vasilakis
// POST storageURL/container/object?[update=] (update data from NSData) [If-None-Match]
1405 2fb7b1fc Miltiadis Vasilakis
+ (id)updateObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
1406 2fb7b1fc Miltiadis Vasilakis
                        contentEncoding:(NSString *)contentEncoding 
1407 2fb7b1fc Miltiadis Vasilakis
                     contentDisposition:(NSString *)contentDisposition 
1408 2fb7b1fc Miltiadis Vasilakis
                               manifest:(NSString *)manifest 
1409 2fb7b1fc Miltiadis Vasilakis
                                sharing:(NSString *)sharing 
1410 2fb7b1fc Miltiadis Vasilakis
                               isPublic:(NSUInteger)isPublic 
1411 2fb7b1fc Miltiadis Vasilakis
                               metadata:(NSDictionary *)metadata 
1412 2fb7b1fc Miltiadis Vasilakis
                                 update:(BOOL)update 
1413 2fb7b1fc Miltiadis Vasilakis
                           contentRange:(NSString *)contentRange 
1414 2fb7b1fc Miltiadis Vasilakis
                                  bytes:(NSNumber *)bytes 
1415 2fb7b1fc Miltiadis Vasilakis
                                   data:(NSData *)data 
1416 2fb7b1fc Miltiadis Vasilakis
                            ifNoneMatch:(NSString *)matchETag {
1417 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self updateObjectDataRequestWithPithos:pithos containerName:containerName objectName:objectName 
1418 be116d22 Miltiadis Vasilakis
                                                                     contentEncoding:contentEncoding 
1419 be116d22 Miltiadis Vasilakis
                                                                  contentDisposition:contentDisposition 
1420 be116d22 Miltiadis Vasilakis
                                                                            manifest:manifest 
1421 be116d22 Miltiadis Vasilakis
                                                                             sharing:sharing 
1422 be116d22 Miltiadis Vasilakis
                                                                            isPublic:isPublic 
1423 be116d22 Miltiadis Vasilakis
                                                                            metadata:metadata 
1424 be116d22 Miltiadis Vasilakis
                                                                              update:update 
1425 be116d22 Miltiadis Vasilakis
                                                                        contentRange:contentRange 
1426 be116d22 Miltiadis Vasilakis
                                                                               bytes:bytes 
1427 be116d22 Miltiadis Vasilakis
                                                                                data:data];
1428 be116d22 Miltiadis Vasilakis
    [request addRequestIfNoneMatchHeader:matchETag];
1429 be116d22 Miltiadis Vasilakis
    return request;                                                                          
1430 be116d22 Miltiadis Vasilakis
}
1431 be116d22 Miltiadis Vasilakis
1432 be116d22 Miltiadis Vasilakis
// POST storageURL/container/object?[update=] (update data from file)
1433 2fb7b1fc Miltiadis Vasilakis
+ (id)updateObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
1434 2fb7b1fc Miltiadis Vasilakis
                        contentEncoding:(NSString *)contentEncoding 
1435 2fb7b1fc Miltiadis Vasilakis
                     contentDisposition:(NSString *)contentDisposition 
1436 2fb7b1fc Miltiadis Vasilakis
                               manifest:(NSString *)manifest 
1437 2fb7b1fc Miltiadis Vasilakis
                                sharing:(NSString *)sharing 
1438 2fb7b1fc Miltiadis Vasilakis
                               isPublic:(NSUInteger)isPublic 
1439 2fb7b1fc Miltiadis Vasilakis
                               metadata:(NSDictionary *)metadata 
1440 2fb7b1fc Miltiadis Vasilakis
                                 update:(BOOL)update 
1441 2fb7b1fc Miltiadis Vasilakis
                           contentRange:(NSString *)contentRange 
1442 2fb7b1fc Miltiadis Vasilakis
                                  bytes:(NSNumber *)bytes 
1443 2fb7b1fc Miltiadis Vasilakis
                                   file:(NSString *)filePath {
1444 be116d22 Miltiadis Vasilakis
    NSString *queryString = nil;
1445 be116d22 Miltiadis Vasilakis
    if (update)
1446 be116d22 Miltiadis Vasilakis
        queryString = @"?update=";
1447 2fb7b1fc Miltiadis Vasilakis
	ASIPithosObjectRequest *request = [self storageRequestWithMethod:@"POST" pithos:pithos containerName:containerName objectName:objectName queryString:queryString];
1448 be116d22 Miltiadis Vasilakis
    [request prepareObjectRequestWithETag:nil
1449 be116d22 Miltiadis Vasilakis
                              contentType:@"application/octet-stream"
1450 be116d22 Miltiadis Vasilakis
                          contentEncoding:contentEncoding 
1451 be116d22 Miltiadis Vasilakis
                       contentDisposition:contentDisposition 
1452 be116d22 Miltiadis Vasilakis
                                 manifest:manifest 
1453 be116d22 Miltiadis Vasilakis
                                  sharing:sharing 
1454 be116d22 Miltiadis Vasilakis
                                 isPublic:isPublic 
1455 be116d22 Miltiadis Vasilakis
                                 metadata:metadata];
1456 be116d22 Miltiadis Vasilakis
    if (contentRange)
1457 be116d22 Miltiadis Vasilakis
        [request addRequestHeader:@"Content-Range" value:contentRange];
1458 be116d22 Miltiadis Vasilakis
    if (bytes)
1459 be116d22 Miltiadis Vasilakis
        [request addRequestHeader:@"X-Object-Bytes" value:[NSString stringWithFormat:@"%lu", [bytes unsignedLongValue]]];
1460 be116d22 Miltiadis Vasilakis
	request.shouldStreamPostDataFromDisk = YES;
1461 be116d22 Miltiadis Vasilakis
    request.postBodyFilePath = filePath;
1462 be116d22 Miltiadis Vasilakis
	return request;
1463 be116d22 Miltiadis Vasilakis
}
1464 be116d22 Miltiadis Vasilakis
1465 be116d22 Miltiadis Vasilakis
// POST storageURL/container/object?[update=] (update data from file) [If-Match]
1466 2fb7b1fc Miltiadis Vasilakis
+ (id)updateObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
1467 2fb7b1fc Miltiadis Vasilakis
                        contentEncoding:(NSString *)contentEncoding 
1468 2fb7b1fc Miltiadis Vasilakis
                     contentDisposition:(NSString *)contentDisposition 
1469 2fb7b1fc Miltiadis Vasilakis
                               manifest:(NSString *)manifest 
1470 2fb7b1fc Miltiadis Vasilakis
                                sharing:(NSString *)sharing 
1471 2fb7b1fc Miltiadis Vasilakis
                               isPublic:(NSUInteger)isPublic 
1472 2fb7b1fc Miltiadis Vasilakis
                               metadata:(NSDictionary *)metadata 
1473 2fb7b1fc Miltiadis Vasilakis
                                 update:(BOOL)update 
1474 2fb7b1fc Miltiadis Vasilakis
                           contentRange:(NSString *)contentRange 
1475 2fb7b1fc Miltiadis Vasilakis
                                  bytes:(NSNumber *)bytes 
1476 2fb7b1fc Miltiadis Vasilakis
                                   file:(NSString *)filePath 
1477 2fb7b1fc Miltiadis Vasilakis
                                ifMatch:(NSString *)matchETag {
1478 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self updateObjectDataRequestWithPithos:pithos containerName:containerName objectName:objectName 
1479 be116d22 Miltiadis Vasilakis
                                                                     contentEncoding:contentEncoding 
1480 be116d22 Miltiadis Vasilakis
                                                                  contentDisposition:contentDisposition 
1481 be116d22 Miltiadis Vasilakis
                                                                            manifest:manifest 
1482 be116d22 Miltiadis Vasilakis
                                                                             sharing:sharing 
1483 be116d22 Miltiadis Vasilakis
                                                                            isPublic:isPublic 
1484 be116d22 Miltiadis Vasilakis
                                                                            metadata:metadata 
1485 be116d22 Miltiadis Vasilakis
                                                                              update:update 
1486 be116d22 Miltiadis Vasilakis
                                                                        contentRange:contentRange 
1487 be116d22 Miltiadis Vasilakis
                                                                               bytes:bytes 
1488 be116d22 Miltiadis Vasilakis
                                                                                file:filePath];
1489 be116d22 Miltiadis Vasilakis
    [request addRequestIfMatchHeader:matchETag];
1490 be116d22 Miltiadis Vasilakis
    return request;                                                                          
1491 be116d22 Miltiadis Vasilakis
}
1492 be116d22 Miltiadis Vasilakis
1493 be116d22 Miltiadis Vasilakis
// POST storageURL/container/object?[update=] (update data from file) [If-None-Match]
1494 2fb7b1fc Miltiadis Vasilakis
+ (id)updateObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
1495 2fb7b1fc Miltiadis Vasilakis
                        contentEncoding:(NSString *)contentEncoding 
1496 2fb7b1fc Miltiadis Vasilakis
                     contentDisposition:(NSString *)contentDisposition 
1497 2fb7b1fc Miltiadis Vasilakis
                               manifest:(NSString *)manifest 
1498 2fb7b1fc Miltiadis Vasilakis
                                sharing:(NSString *)sharing 
1499 2fb7b1fc Miltiadis Vasilakis
                               isPublic:(NSUInteger)isPublic 
1500 2fb7b1fc Miltiadis Vasilakis
                               metadata:(NSDictionary *)metadata 
1501 2fb7b1fc Miltiadis Vasilakis
                                 update:(BOOL)update 
1502 2fb7b1fc Miltiadis Vasilakis
                           contentRange:(NSString *)contentRange 
1503 2fb7b1fc Miltiadis Vasilakis
                                  bytes:(NSNumber *)bytes 
1504 2fb7b1fc Miltiadis Vasilakis
                                   file:(NSString *)filePath 
1505 2fb7b1fc Miltiadis Vasilakis
                            ifNoneMatch:(NSString *)matchETag {
1506 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self updateObjectDataRequestWithPithos:pithos containerName:containerName objectName:objectName 
1507 be116d22 Miltiadis Vasilakis
                                                                     contentEncoding:contentEncoding 
1508 be116d22 Miltiadis Vasilakis
                                                                  contentDisposition:contentDisposition 
1509 be116d22 Miltiadis Vasilakis
                                                                            manifest:manifest 
1510 be116d22 Miltiadis Vasilakis
                                                                             sharing:sharing 
1511 be116d22 Miltiadis Vasilakis
                                                                            isPublic:isPublic 
1512 be116d22 Miltiadis Vasilakis
                                                                            metadata:metadata 
1513 be116d22 Miltiadis Vasilakis
                                                                              update:update 
1514 be116d22 Miltiadis Vasilakis
                                                                        contentRange:contentRange 
1515 be116d22 Miltiadis Vasilakis
                                                                               bytes:bytes 
1516 be116d22 Miltiadis Vasilakis
                                                                                file:filePath];
1517 be116d22 Miltiadis Vasilakis
    [request addRequestIfNoneMatchHeader:matchETag];
1518 be116d22 Miltiadis Vasilakis
    return request;                                                                          
1519 be116d22 Miltiadis Vasilakis
}
1520 be116d22 Miltiadis Vasilakis
1521 be116d22 Miltiadis Vasilakis
// POST storageURL/container/object?[update=] (update data from source)
1522 2fb7b1fc Miltiadis Vasilakis
+ (id)updateObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
1523 2fb7b1fc Miltiadis Vasilakis
                        contentEncoding:(NSString *)contentEncoding 
1524 2fb7b1fc Miltiadis Vasilakis
                     contentDisposition:(NSString *)contentDisposition 
1525 2fb7b1fc Miltiadis Vasilakis
                               manifest:(NSString *)manifest 
1526 2fb7b1fc Miltiadis Vasilakis
                                sharing:(NSString *)sharing 
1527 2fb7b1fc Miltiadis Vasilakis
                               isPublic:(NSUInteger)isPublic 
1528 2fb7b1fc Miltiadis Vasilakis
                               metadata:(NSDictionary *)metadata 
1529 2fb7b1fc Miltiadis Vasilakis
                                 update:(BOOL)update 
1530 2fb7b1fc Miltiadis Vasilakis
                           contentRange:(NSString *)contentRange 
1531 2fb7b1fc Miltiadis Vasilakis
                                  bytes:(NSNumber *)bytes 
1532 2fb7b1fc Miltiadis Vasilakis
                    sourceContainerName:(NSString *)sourceContainerName 
1533 2fb7b1fc Miltiadis Vasilakis
                       sourceObjectName:(NSString *)sourceObjectName 
1534 2fb7b1fc Miltiadis Vasilakis
                          sourceAccount:(NSString *)sourceAccount
1535 2fb7b1fc Miltiadis Vasilakis
                          sourceVersion:(NSString *)sourceVersion {
1536 be116d22 Miltiadis Vasilakis
    NSString *queryString = nil;
1537 be116d22 Miltiadis Vasilakis
    if (update)
1538 be116d22 Miltiadis Vasilakis
        queryString = @"?update=";
1539 2fb7b1fc Miltiadis Vasilakis
	ASIPithosObjectRequest *request = [self storageRequestWithMethod:@"POST" pithos:pithos containerName:containerName objectName:objectName queryString:queryString];
1540 be116d22 Miltiadis Vasilakis
    [request prepareObjectRequestWithETag:nil
1541 be116d22 Miltiadis Vasilakis
                              contentType:nil
1542 be116d22 Miltiadis Vasilakis
                          contentEncoding:contentEncoding 
1543 be116d22 Miltiadis Vasilakis
                       contentDisposition:contentDisposition 
1544 be116d22 Miltiadis Vasilakis
                                 manifest:manifest 
1545 be116d22 Miltiadis Vasilakis
                                  sharing:sharing 
1546 be116d22 Miltiadis Vasilakis
                                 isPublic:isPublic 
1547 be116d22 Miltiadis Vasilakis
                                 metadata:metadata];
1548 be116d22 Miltiadis Vasilakis
    if (contentRange)
1549 be116d22 Miltiadis Vasilakis
        [request addRequestHeader:@"Content-Range" value:contentRange];
1550 be116d22 Miltiadis Vasilakis
    if (bytes)
1551 be116d22 Miltiadis Vasilakis
        [request addRequestHeader:@"X-Object-Bytes" value:[NSString stringWithFormat:@"%lu", [bytes unsignedLongValue]]];
1552 6b3a5e6a Miltiadis Vasilakis
    [request addRequestHeader:@"X-Source-Object" 
1553 6d3af6ef Miltiadis Vasilakis
                        value:[self encodeToPercentEscape:[NSString stringWithFormat:@"/%@/%@", sourceContainerName, sourceObjectName]]];
1554 b9ebc0f4 Miltiadis Vasilakis
    if (sourceAccount)
1555 6b3a5e6a Miltiadis Vasilakis
        [request addRequestHeader:@"X-Source-Account" 
1556 6d3af6ef Miltiadis Vasilakis
                            value:[self encodeToPercentEscape:sourceAccount]];
1557 be116d22 Miltiadis Vasilakis
    if (sourceVersion)
1558 be116d22 Miltiadis Vasilakis
        [request addRequestHeader:@"X-Source-Version" value:sourceVersion];
1559 be116d22 Miltiadis Vasilakis
	return request;
1560 be116d22 Miltiadis Vasilakis
1561 be116d22 Miltiadis Vasilakis
}
1562 be116d22 Miltiadis Vasilakis
1563 be116d22 Miltiadis Vasilakis
// POST storageURL/container/object?[update=] (update data from source) [If-Match]
1564 2fb7b1fc Miltiadis Vasilakis
+ (id)updateObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
1565 2fb7b1fc Miltiadis Vasilakis
                        contentEncoding:(NSString *)contentEncoding 
1566 2fb7b1fc Miltiadis Vasilakis
                     contentDisposition:(NSString *)contentDisposition 
1567 2fb7b1fc Miltiadis Vasilakis
                               manifest:(NSString *)manifest 
1568 2fb7b1fc Miltiadis Vasilakis
                                sharing:(NSString *)sharing 
1569 2fb7b1fc Miltiadis Vasilakis
                               isPublic:(NSUInteger)isPublic 
1570 2fb7b1fc Miltiadis Vasilakis
                               metadata:(NSDictionary *)metadata 
1571 2fb7b1fc Miltiadis Vasilakis
                                 update:(BOOL)update 
1572 2fb7b1fc Miltiadis Vasilakis
                           contentRange:(NSString *)contentRange 
1573 2fb7b1fc Miltiadis Vasilakis
                                  bytes:(NSNumber *)bytes 
1574 2fb7b1fc Miltiadis Vasilakis
                    sourceContainerName:(NSString *)sourceContainerName 
1575 2fb7b1fc Miltiadis Vasilakis
                       sourceObjectName:(NSString *)sourceObjectName 
1576 2fb7b1fc Miltiadis Vasilakis
                          sourceAccount:(NSString *)sourceAccount
1577 2fb7b1fc Miltiadis Vasilakis
                          sourceVersion:(NSString *)sourceVersion 
1578 2fb7b1fc Miltiadis Vasilakis
                                ifMatch:(NSString *)matchETag {
1579 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self updateObjectDataRequestWithPithos:pithos containerName:containerName objectName:objectName 
1580 be116d22 Miltiadis Vasilakis
                                                                     contentEncoding:contentEncoding 
1581 be116d22 Miltiadis Vasilakis
                                                                  contentDisposition:contentDisposition 
1582 be116d22 Miltiadis Vasilakis
                                                                            manifest:manifest 
1583 be116d22 Miltiadis Vasilakis
                                                                             sharing:sharing 
1584 be116d22 Miltiadis Vasilakis
                                                                            isPublic:isPublic 
1585 be116d22 Miltiadis Vasilakis
                                                                            metadata:metadata 
1586 be116d22 Miltiadis Vasilakis
                                                                              update:update 
1587 be116d22 Miltiadis Vasilakis
                                                                        contentRange:contentRange 
1588 be116d22 Miltiadis Vasilakis
                                                                               bytes:bytes 
1589 be116d22 Miltiadis Vasilakis
                                                                 sourceContainerName:sourceContainerName 
1590 be116d22 Miltiadis Vasilakis
                                                                    sourceObjectName:sourceObjectName 
1591 b9ebc0f4 Miltiadis Vasilakis
                                                                       sourceAccount:sourceAccount 
1592 be116d22 Miltiadis Vasilakis
                                                                       sourceVersion:sourceVersion];
1593 be116d22 Miltiadis Vasilakis
    [request addRequestIfMatchHeader:matchETag];
1594 be116d22 Miltiadis Vasilakis
    return request;                                                                          
1595 be116d22 Miltiadis Vasilakis
}
1596 be116d22 Miltiadis Vasilakis
1597 be116d22 Miltiadis Vasilakis
// POST storageURL/container/object?[update=] (update data from source) [If-None-Match]
1598 2fb7b1fc Miltiadis Vasilakis
+ (id)updateObjectDataRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
1599 2fb7b1fc Miltiadis Vasilakis
                        contentEncoding:(NSString *)contentEncoding 
1600 2fb7b1fc Miltiadis Vasilakis
                     contentDisposition:(NSString *)contentDisposition 
1601 2fb7b1fc Miltiadis Vasilakis
                               manifest:(NSString *)manifest 
1602 2fb7b1fc Miltiadis Vasilakis
                                sharing:(NSString *)sharing 
1603 2fb7b1fc Miltiadis Vasilakis
                               isPublic:(NSUInteger)isPublic 
1604 2fb7b1fc Miltiadis Vasilakis
                               metadata:(NSDictionary *)metadata 
1605 2fb7b1fc Miltiadis Vasilakis
                                 update:(BOOL)update 
1606 2fb7b1fc Miltiadis Vasilakis
                           contentRange:(NSString *)contentRange 
1607 2fb7b1fc Miltiadis Vasilakis
                                  bytes:(NSNumber *)bytes 
1608 2fb7b1fc Miltiadis Vasilakis
                    sourceContainerName:(NSString *)sourceContainerName 
1609 2fb7b1fc Miltiadis Vasilakis
                       sourceObjectName:(NSString *)sourceObjectName 
1610 2fb7b1fc Miltiadis Vasilakis
                          sourceAccount:(NSString *)sourceAccount
1611 2fb7b1fc Miltiadis Vasilakis
                          sourceVersion:(NSString *)sourceVersion 
1612 2fb7b1fc Miltiadis Vasilakis
                            ifNoneMatch:(NSString *)matchETag {
1613 2fb7b1fc Miltiadis Vasilakis
    ASIPithosObjectRequest *request = [self updateObjectDataRequestWithPithos:pithos containerName:containerName objectName:objectName 
1614 be116d22 Miltiadis Vasilakis
                                                                     contentEncoding:contentEncoding 
1615 be116d22 Miltiadis Vasilakis
                                                                  contentDisposition:contentDisposition 
1616 be116d22 Miltiadis Vasilakis
                                                                            manifest:manifest 
1617 be116d22 Miltiadis Vasilakis
                                                                             sharing:sharing 
1618 be116d22 Miltiadis Vasilakis
                                                                            isPublic:isPublic 
1619 be116d22 Miltiadis Vasilakis
                                                                            metadata:metadata 
1620 be116d22 Miltiadis Vasilakis
                                                                              update:update 
1621 be116d22 Miltiadis Vasilakis
                                                                        contentRange:contentRange 
1622 be116d22 Miltiadis Vasilakis
                                                                               bytes:bytes 
1623 be116d22 Miltiadis Vasilakis
                                                                 sourceContainerName:sourceContainerName 
1624 be116d22 Miltiadis Vasilakis
                                                                    sourceObjectName:sourceObjectName 
1625 b9ebc0f4 Miltiadis Vasilakis
                                                                       sourceAccount:sourceAccount 
1626 be116d22 Miltiadis Vasilakis
                                                                       sourceVersion:sourceVersion];
1627 be116d22 Miltiadis Vasilakis
    [request addRequestIfNoneMatchHeader:matchETag];
1628 be116d22 Miltiadis Vasilakis
    return request;                                                                          
1629 be116d22 Miltiadis Vasilakis
}
1630 be116d22 Miltiadis Vasilakis
1631 be116d22 Miltiadis Vasilakis
#pragma mark -
1632 be116d22 Miltiadis Vasilakis
#pragma mark DELETE
1633 be116d22 Miltiadis Vasilakis
1634 be116d22 Miltiadis Vasilakis
// DELETE storageURL/container/object
1635 2fb7b1fc Miltiadis Vasilakis
+ (id)deleteObjectRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName {
1636 2fb7b1fc Miltiadis Vasilakis
    return [self storageRequestWithMethod:@"DELETE" pithos:pithos containerName:containerName objectName:objectName];
1637 be116d22 Miltiadis Vasilakis
}
1638 be116d22 Miltiadis Vasilakis
1639 be116d22 Miltiadis Vasilakis
// DELETE storageURL/container/object?[until=untilTimestamp]
1640 2fb7b1fc Miltiadis Vasilakis
+ (id)deleteObjectRequestWithPithos:(ASIPithos *)pithos containerName:(NSString *)containerName objectName:(NSString *)objectName 
1641 2fb7b1fc Miltiadis Vasilakis
                              until:(NSDate *)untilTimestamp {
1642 be116d22 Miltiadis Vasilakis
    NSString *queryString = nil;
1643 be116d22 Miltiadis Vasilakis
    if (untilTimestamp)
1644 be116d22 Miltiadis Vasilakis
        queryString = [NSString stringWithFormat:@"?until=%d", (int)[untilTimestamp timeIntervalSince1970]];
1645 2fb7b1fc Miltiadis Vasilakis
	return [self storageRequestWithMethod:@"DELETE" pithos:pithos containerName:containerName objectName:objectName queryString:queryString];
1646 be116d22 Miltiadis Vasilakis
}
1647 be116d22 Miltiadis Vasilakis
1648 be116d22 Miltiadis Vasilakis
#pragma mark -
1649 be116d22 Miltiadis Vasilakis
#pragma mark NSXMLParserDelegate
1650 be116d22 Miltiadis Vasilakis
1651 be116d22 Miltiadis Vasilakis
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
1652 be116d22 Miltiadis Vasilakis
	self.currentElement = elementName;
1653 be116d22 Miltiadis Vasilakis
    if ((objectRequestType == ASIPithosObjectRequestHashmap) && [elementName isEqualToString:@"object"]) {
1654 be116d22 Miltiadis Vasilakis
        blockSize = [[attributeDict valueForKey:@"block_size"] intValue];
1655 be116d22 Miltiadis Vasilakis
        blockHash = [[NSString alloc] initWithString:[attributeDict valueForKey:@"block_hash"]];
1656 be116d22 Miltiadis Vasilakis
        bytes = [[attributeDict valueForKey:@"bytes"] intValue];
1657 be116d22 Miltiadis Vasilakis
    } else if ((objectRequestType == ASIPithosObjectRequestVersions) && [elementName isEqualToString:@"version"]) {
1658 be116d22 Miltiadis Vasilakis
        self.currentObject = [ASIPithosObject object];
1659 78355da3 Miltiadis Vasilakis
        currentObject.versionTimestamp = [NSDate dateWithTimeIntervalSince1970:[[attributeDict valueForKey:@"timestamp"] doubleValue]];
1660 be116d22 Miltiadis Vasilakis
	}
1661 be116d22 Miltiadis Vasilakis
	self.currentContent = @"";
1662 be116d22 Miltiadis Vasilakis
}
1663 be116d22 Miltiadis Vasilakis
1664 be116d22 Miltiadis Vasilakis
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
1665 2fb7b1fc Miltiadis Vasilakis
	if (((objectRequestType == ASIPithosObjectRequestHashmap) && [elementName isEqualToString:@"hash"]) ||
1666 2fb7b1fc Miltiadis Vasilakis
        ((objectRequestType == ASIPithosObjectRequestHashmapWrite) && [elementName isEqualToString:@"item"])) {
1667 be116d22 Miltiadis Vasilakis
        [hashes addObject:currentContent];
1668 32017ec6 Miltiadis Vasilakis
    } else if ((objectRequestType == ASIPithosObjectRequestVersions) && ([elementName isEqualToString:@"version"])) {
1669 32017ec6 Miltiadis Vasilakis
        currentObject.version = currentContent;
1670 32017ec6 Miltiadis Vasilakis
        [versions addObject:currentObject];
1671 32017ec6 Miltiadis Vasilakis
        self.currentObject = nil;
1672 be116d22 Miltiadis Vasilakis
	}
1673 be116d22 Miltiadis Vasilakis
}
1674 be116d22 Miltiadis Vasilakis
1675 be116d22 Miltiadis Vasilakis
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
1676 be116d22 Miltiadis Vasilakis
    self.currentContent = [currentContent stringByAppendingString:string];
1677 be116d22 Miltiadis Vasilakis
}
1678 be116d22 Miltiadis Vasilakis
1679 be116d22 Miltiadis Vasilakis
@end