diff --git a/src/client/mac/sender/uploader.mm b/src/client/mac/sender/uploader.mm index 42a43bfc..b6a8a846 100644 --- a/src/client/mac/sender/uploader.mm +++ b/src/client/mac/sender/uploader.mm @@ -168,6 +168,10 @@ NSDictionary *readConfigurationData(const char *configFile) { // Records the uploaded crash ID to the log file. - (void)logUploadWithID:(const char *)uploadID; + +// Builds an URL parameter for a given dictionary key. Uses Uploader's parameters +// to provide its value. Returns nil if no item is stored for the given key. +- (NSURLQueryItem *)queryItemWithName:(NSString *)queryItemName forParamKey:(NSString *)key; @end @implementation Uploader @@ -531,9 +535,42 @@ NSDictionary *readConfigurationData(const char *configFile) { [result release]; } +//============================================================================= +- (NSURLQueryItem *)queryItemWithName:(NSString *)queryItemName forParamKey:(NSString *)key { + NSString *value = [parameters_ objectForKey:key]; + NSString *escapedValue = [value stringByAddingPercentEncodingWithAllowedCharacters: + [NSCharacterSet URLQueryAllowedCharacterSet]]; + return [NSURLQueryItem queryItemWithName:queryItemName value:escapedValue]; +} + //============================================================================= - (void)report { NSURL *url = [NSURL URLWithString:[parameters_ objectForKey:@BREAKPAD_URL]]; + + NSString *serverType = [parameters_ objectForKey:@BREAKPAD_SERVER_TYPE]; + if ([serverType length] == 0 || [serverType isEqualToString:kGoogleServerType]) { + // when communicating to Crash @ Google, add URL params which identify the product + NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:url + resolvingAgainstBaseURL:false]; + NSMutableArray *queryItemsToAdd = [urlComponents.queryItems mutableCopyWithZone:nil]; + if (queryItemsToAdd == nil) { + queryItemsToAdd = [[NSMutableArray alloc] init]; + } + + NSURLQueryItem *queryItemProduct = [self queryItemWithName:@"product" + forParamKey:@BREAKPAD_PRODUCT]; + NSURLQueryItem *queryItemVersion = [self queryItemWithName:@"version" + forParamKey:@BREAKPAD_VERSION]; + NSURLQueryItem *queryItemGuid = [self queryItemWithName:@"guid" forParamKey:@"guid"]; + + if (queryItemProduct != nil) [queryItemsToAdd addObject:queryItemProduct]; + if (queryItemVersion != nil) [queryItemsToAdd addObject:queryItemVersion]; + if (queryItemGuid != nil) [queryItemsToAdd addObject:queryItemGuid]; + + urlComponents.queryItems = queryItemsToAdd; + url = [urlComponents URL]; + } + HTTPMultipartUpload *upload = [[HTTPMultipartUpload alloc] initWithURL:url]; NSMutableDictionary *uploadParameters = [NSMutableDictionary dictionary];