Revision 6d9d5dce

b/pithos-apple-common
1
Subproject commit 8fb25a1bf3c5e88def03d59bbae18dfbbc967567
1
Subproject commit 2f6bc433e2b453f5f9e56d07115497809416eb13
b/pithos-macos/PithosAccount.m
488 488
                            authToken:authToken
489 489
                             authUser:authUser
490 490
                      ignoreSSLErrors:ignoreSSLErrors
491
                           resetNodes:NO];
491
                           resetNodes:YES];
492 492
    }
493 493
}
494 494

  
b/pithos-macos/PithosAccountNode.m
209 209
        });
210 210
        NSUInteger retries = [[accountRequest.userInfo objectForKey:@"retries"] unsignedIntegerValue];
211 211
        if (retries > 0) {
212
            ASIPithosAccountRequest *newAccountRequest = (ASIPithosAccountRequest *)[PithosUtilities copyRequest:accountRequest];
212
            ASIPithosAccountRequest *newAccountRequest = (ASIPithosAccountRequest *)[PithosUtilities retryWithUpdatedURLRequest:accountRequest
213
                                                                                                        andPithosAccountManager:pithosAccountManager];
213 214
            [(NSMutableDictionary *)(newAccountRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"];
215

  
214 216
            self.accountRequest = newAccountRequest;
215 217
            [[PithosUtilities prepareRequest:accountRequest priority:[[accountRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
216 218
        } else {
......
337 339
    @autoreleasepool {
338 340
        NSUInteger retries = [[request.userInfo objectForKey:@"retries"] unsignedIntegerValue];
339 341
        if (retries > 0) {
340
            ASIPithosAccountRequest *newRequest = (ASIPithosAccountRequest *)[PithosUtilities copyRequest:request];
342
            ASIPithosAccountRequest *newRequest = (ASIPithosAccountRequest *)[PithosUtilities retryWithUpdatedURLRequest:request
343
                                                                                                 andPithosAccountManager:pithosAccountManager];;
341 344
            [(NSMutableDictionary *)(newRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"];
342 345
            if ([request isEqualTo:applyMetadataAccountRequest]) {
343 346
                @synchronized(self) {
b/pithos-macos/PithosBrowserController.m
1632 1632
        }
1633 1633
        NSUInteger retries = [[request.userInfo objectForKey:@"retries"] unsignedIntegerValue];
1634 1634
        if (retries > 0) {
1635
            ASIPithosRequest *newRequest = (ASIPithosRequest *)[PithosUtilities copyRequest:request];
1635
            ASIPithosRequest *newRequest = (ASIPithosRequest *)[PithosUtilities retryWithUpdatedURLRequest:request
1636
                                                                                   andPithosAccountManager:pithosAccountManager];;
1636 1637
            [(NSMutableDictionary *)(newRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"];
1637 1638
            [(NSMutableDictionary *)(newRequest.userInfo)setObject:[NSNumber numberWithBool:NO] forKey:@"unexpectedResponseStatus"];
1638 1639
            [[newRequest.userInfo objectForKey:@"networkQueue"] addOperation:[PithosUtilities prepareRequest:newRequest priority:[[newRequest.userInfo objectForKey:@"priority"] integerValue]]];
b/pithos-macos/PithosContainerNode.m
210 210
        });
211 211
        NSUInteger retries = [[containerRequest.userInfo objectForKey:@"retries"] unsignedIntegerValue];
212 212
        if (retries > 0) {
213
            ASIPithosContainerRequest *newContainerRequest = (ASIPithosContainerRequest *)[PithosUtilities copyRequest:containerRequest];
213
            ASIPithosContainerRequest *newContainerRequest = (ASIPithosContainerRequest *)[PithosUtilities retryWithUpdatedURLRequest:containerRequest
214
                                                                                                              andPithosAccountManager:pithosAccountManager];
214 215
            [(NSMutableDictionary *)(newContainerRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"];
215 216
            self.containerRequest = newContainerRequest;
216 217
            [[PithosUtilities prepareRequest:containerRequest priority:[[containerRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
......
404 405
    @autoreleasepool {
405 406
        NSUInteger retries = [[request.userInfo objectForKey:@"retries"] unsignedIntegerValue];
406 407
        if (retries > 0) {
407
            ASIPithosContainerRequest *newRequest = (ASIPithosContainerRequest *)[PithosUtilities copyRequest:request];
408
            ASIPithosContainerRequest *newRequest = (ASIPithosContainerRequest *)[PithosUtilities retryWithUpdatedURLRequest:request
409
                                                                                                     andPithosAccountManager:pithosAccountManager];
408 410
            [(NSMutableDictionary *)(newRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"];
409 411
            if ([request isEqualTo:applyMetadataContainerRequest]) {
410 412
                @synchronized(self) {
b/pithos-macos/PithosObjectNode.m
224 224
    @autoreleasepool {
225 225
        NSUInteger retries = [[request.userInfo objectForKey:@"retries"] unsignedIntegerValue];
226 226
        if (retries > 0) {
227
            ASIPithosObjectRequest *newRequest = (ASIPithosObjectRequest *)[PithosUtilities copyRequest:request];
227
            ASIPithosObjectRequest *newRequest = (ASIPithosObjectRequest *)[PithosUtilities retryWithUpdatedURLRequest:request
228
                                                                                               andPithosAccountManager:pithosAccountManager];
228 229
            [(NSMutableDictionary *)(newRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"];
229 230
            if ([request isEqualTo:applyMetadataObjectRequest]) {
230 231
                @synchronized(self) {
b/pithos-macos/PithosSharingAccountsNode.m
143 143
        });
144 144
        NSUInteger retries = [[sharingAccountsRequest.userInfo objectForKey:@"retries"] unsignedIntegerValue];
145 145
        if (retries > 0) {
146
            ASIPithosRequest *newSharingAccountsRequest = (ASIPithosRequest *)[PithosUtilities copyRequest:sharingAccountsRequest];
146
            ASIPithosRequest *newSharingAccountsRequest = (ASIPithosRequest *)[PithosUtilities retryWithUpdatedURLRequest:sharingAccountsRequest
147
                                                                                                  andPithosAccountManager:pithosAccountManager];;
147 148
            [(NSMutableDictionary *)(newSharingAccountsRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"];
148 149
            self.sharingAccountsRequest = newSharingAccountsRequest;
149 150
            [[PithosUtilities prepareRequest:sharingAccountsRequest priority:[[sharingAccountsRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
b/pithos-macos/PithosSubdirNode.m
241 241
    @autoreleasepool {
242 242
        NSUInteger retries = [[request.userInfo objectForKey:@"retries"] unsignedIntegerValue];
243 243
        if (retries > 0) {
244
            ASIPithosObjectRequest *newRequest = (ASIPithosObjectRequest *)[PithosUtilities copyRequest:request];
244
            ASIPithosObjectRequest *newRequest = (ASIPithosObjectRequest *)[PithosUtilities retryWithUpdatedURLRequest:request
245
                                                                                               andPithosAccountManager:pithosAccountManager];
245 246
            [(NSMutableDictionary *)(newRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"];
246 247
            if ([request isEqualTo:applyMetadataObjectRequest]) {
247 248
                @synchronized(self) {
b/pithos-macos/PithosUtilities.h
40 40
@class ASIPithosContainerRequest;
41 41
@class ASIPithosObjectRequest;
42 42
@class ASIPithosObject;
43
@class PithosAccount;
43 44

  
44 45
@interface PithosUtilities : NSObject
45 46

  
......
164 165
+ (ASIPithosRequest *)prepareRequest:(ASIPithosRequest *)request;
165 166
+ (ASIPithosRequest *)copyRequest:(ASIPithosRequest *)request;
166 167
+ (void)startAndWaitForRequest:(ASIPithosRequest *)request;
168
+ (ASIPithosRequest *)retryWithUpdatedURLRequest:(ASIPithosRequest *)request andPithosAccountManager:(PithosAccount *)pithosAccountManager;
167 169

  
168 170
@end
b/pithos-macos/PithosUtilities.m
41 41
#import "ASIPithosContainerRequest.h"
42 42
#import "ASIPithosObjectRequest.h"
43 43
#import "ASIPithosObject.h"
44
#import "PithosAccount.h"
44 45
#import "HashMapHash.h"
45 46

  
46 47
@implementation PithosUtilities
......
1305 1306
    [networkQueue addOperations:[NSArray arrayWithObject:[self prepareRequest:request]] waitUntilFinished:YES];
1306 1307
}
1307 1308

  
1309
+ (ASIPithosRequest *)retryWithUpdatedURLRequest:(ASIPithosRequest *)request andPithosAccountManager:(PithosAccount *)pithosAccountManager {
1310
    ASIPithosRequest *newRequest = [PithosUtilities copyRequest:request];
1311
    if (((request.responseStatusCode == 401) || (request.responseStatusCode == 404) || (request.responseStatusCode == 0)) &&
1312
        request.retryBaseURLString) {
1313
        ASIPithosRequest *serviceCatalogRequest = [ASIPithosRequest serviceCatalogRequestWithPithos:pithosAccountManager.pithos];
1314
        [PithosUtilities startAndWaitForRequest:serviceCatalogRequest];
1315
        [pithosAccountManager updateServicesFromServiceCatalogRequest:serviceCatalogRequest];
1316

  
1317
        if (newRequest.retryType == ASIPithosRequestTypeStorage) {
1318
            NSString *URLPrefix = pithosAccountManager.pithos.storageURLPrefix;
1319
            NSString *URLSuffix = [[newRequest.url description] substringFromIndex:[newRequest.retryBaseURLString length]];
1320
            newRequest.url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", URLPrefix, URLSuffix]];
1321
        } else if (newRequest.retryType == ASIPithosRequestTypeUserCatalog) {
1322
            NSString *URLPrefix = pithosAccountManager.pithos.userCatalogURL;
1323
            NSString *URLSuffix = [[newRequest.url description] substringFromIndex:[newRequest.retryBaseURLString length]];
1324
            newRequest.url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", URLPrefix, URLSuffix]];
1325
        }
1326
    }
1327

  
1328
    return newRequest;
1329
}
1330

  
1308 1331
@end

Also available in: Unified diff