13d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// Copyright (c) 2011, Google Inc. 23d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// All rights reserved. 33d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// 43d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// Redistribution and use in source and binary forms, with or without 53d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// modification, are permitted provided that the following conditions are 63d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// met: 73d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// 83d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// * Redistributions of source code must retain the above copyright 93d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// notice, this list of conditions and the following disclaimer. 103d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// * Redistributions in binary form must reproduce the above 113d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// copyright notice, this list of conditions and the following disclaimer 123d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// in the documentation and/or other materials provided with the 133d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// distribution. 143d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// * Neither the name of Google Inc. nor the names of its 153d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// contributors may be used to endorse or promote products derived from 163d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// this software without specific prior written permission. 173d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// 183d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 193d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 203d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 213d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 223d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 233d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 243d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 253d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 263d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 273d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 283d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 293d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// 303d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// This component uses the HTTPMultipartUpload of the breakpad project to send 313d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// the minidump and associated data to the crash reporting servers. 323d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// It will perform throttling based on the parameters passed to it and will 333d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org// prompt the user to send the minidump. 343d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org 353d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org#include <Foundation/Foundation.h> 363d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org 373d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org#import "common/mac/GTMDefines.h" 383d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org 393d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org#define kClientIdPreferenceKey @"clientid" 403d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org 413d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.orgextern NSString *const kGoogleServerType; 423d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.orgextern NSString *const kSocorroServerType; 433d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.orgextern NSString *const kDefaultServerType; 443d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org 453d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org@interface Uploader : NSObject { 463d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org @private 473d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org NSMutableDictionary *parameters_; // Key value pairs of data (STRONG) 483d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org NSData *minidumpContents_; // The data in the minidump (STRONG) 493d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org NSData *logFileData_; // An NSdata for the tar, 503d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org // bz2'd log file. 513d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org NSMutableDictionary *serverDictionary_; // The dictionary mapping a 523d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org // server type name to a 533d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org // dictionary of server 543d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org // parameter names. 553d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org NSMutableDictionary *socorroDictionary_; // The dictionary for 563d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org // Socorro. 573d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org NSMutableDictionary *googleDictionary_; // The dictionary for 583d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org // Google. 593d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org NSMutableDictionary *extraServerVars_; // A dictionary containing 603d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org // extra key/value pairs 613d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org // that are uploaded to the 623d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org // crash server with the 633d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org // minidump. 643d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org} 653d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org 663d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org- (id)initWithConfigFile:(const char *)configFile; 673d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org 6802b5e0adbccf21fb273bb31353b4982a892b1387qsr@chromium.org- (id)initWithConfig:(NSDictionary *)config; 6902b5e0adbccf21fb273bb31353b4982a892b1387qsr@chromium.org 70455c485a75015a7cecaf8b435b19218da64f35e9blundell@chromium.org// Reads the file |configFile| and returns the corresponding NSDictionary. 71455c485a75015a7cecaf8b435b19218da64f35e9blundell@chromium.org// |configFile| will be deleted after reading. 72455c485a75015a7cecaf8b435b19218da64f35e9blundell@chromium.org+ (NSDictionary *)readConfigurationDataFromFile:(NSString *)configFile; 73455c485a75015a7cecaf8b435b19218da64f35e9blundell@chromium.org 743d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org- (NSMutableDictionary *)parameters; 753d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org 763d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org- (void)report; 773d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org 7802b5e0adbccf21fb273bb31353b4982a892b1387qsr@chromium.org// Upload the given data to the crash server. 7902b5e0adbccf21fb273bb31353b4982a892b1387qsr@chromium.org- (void)uploadData:(NSData *)data name:(NSString *)name; 8002b5e0adbccf21fb273bb31353b4982a892b1387qsr@chromium.org 8102b5e0adbccf21fb273bb31353b4982a892b1387qsr@chromium.org// This method adds a key/value pair to the dictionary that 8202b5e0adbccf21fb273bb31353b4982a892b1387qsr@chromium.org// will be uploaded to the crash server. 8302b5e0adbccf21fb273bb31353b4982a892b1387qsr@chromium.org- (void)addServerParameter:(id)value forKey:(NSString *)key; 8402b5e0adbccf21fb273bb31353b4982a892b1387qsr@chromium.org 85455c485a75015a7cecaf8b435b19218da64f35e9blundell@chromium.org// This method process the HTTP response and renames the minidump file with the 86455c485a75015a7cecaf8b435b19218da64f35e9blundell@chromium.org// new ID. 87455c485a75015a7cecaf8b435b19218da64f35e9blundell@chromium.org- (void)handleNetworkResponse:(NSData *)data withError:(NSError *)error; 88455c485a75015a7cecaf8b435b19218da64f35e9blundell@chromium.org 893d4b6e7a208c2694c633136ed57701bb868029a1qsr@chromium.org@end 90