xref: /aosp_15_r20/external/google-breakpad/src/common/windows/symbol_collector_client.h (revision 9712c20fc9bbfbac4935993a2ca0b3958c5adad2)
1 // Copyright 2019 Google LLC
2 //
3 // Redistribution and use in source and binary forms, with or without
4 // modification, are permitted provided that the following conditions are
5 // met:
6 //
7 //     * Redistributions of source code must retain the above copyright
8 // notice, this list of conditions and the following disclaimer.
9 //     * Redistributions in binary form must reproduce the above
10 // copyright notice, this list of conditions and the following disclaimer
11 // in the documentation and/or other materials provided with the
12 // distribution.
13 //     * Neither the name of Google LLC nor the names of its
14 // contributors may be used to endorse or promote products derived from
15 // this software without specific prior written permission.
16 //
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 
29 #ifndef COMMON_WINDOWS_SYMBOL_COLLECTOR_CLIENT_H_
30 #define COMMON_WINDOWS_SYMBOL_COLLECTOR_CLIENT_H_
31 
32 #include <string>
33 
34 namespace google_breakpad {
35 
36   using std::wstring;
37 
38   struct UploadUrlResponse {
39     // URL at which to HTTP PUT symbol file.
40     wstring upload_url;
41     // Unique key used to complete upload of symbol file.
42     wstring upload_key;
43   };
44 
45   enum SymbolStatus {
46     Found,
47     Missing,
48     Unknown
49   };
50 
51   enum CompleteUploadResult {
52     Ok,
53     DuplicateData,
54     Error
55   };
56 
57   // Client to interact with sym-upload-v2 API server via HTTP/REST.
58   class SymbolCollectorClient {
59   public:
60     // Returns a URL at which a symbol file can be HTTP PUT without
61     // authentication, along with an upload key that can be used to
62     // complete the upload process with CompleteUpload.
63     static bool CreateUploadUrl(
64         wstring& api_url,
65         wstring& api_key,
66         int* timeout_ms,
67         UploadUrlResponse *uploadUrlResponse);
68 
69     // Notify the API that symbol file upload is finished and its contents
70     // are ready to be read and/or used for further processing.
71     static CompleteUploadResult CompleteUpload(wstring& api_url,
72                                                wstring& api_key,
73                                                int* timeout_ms,
74                                                const wstring& upload_key,
75                                                const wstring& debug_file,
76                                                const wstring& debug_id,
77                                                const wstring& type,
78                                                const wstring& product_name);
79 
80     // Returns whether or not a symbol file corresponding to the debug_file/
81     // debug_id pair is already present in symbol storage.
82     static SymbolStatus CheckSymbolStatus(
83         wstring& api_url,
84         wstring& api_key,
85         int* timeout_ms,
86         const wstring& debug_file,
87         const wstring& debug_id);
88   };
89 
90 }  // namespace google_breakpad
91 
92 #endif  // COMMON_WINDOWS_SYMBOL_COLLECTOR_CLIENT_H_
93