aboutsummaryrefslogtreecommitdiff
path: root/src/processor/network_source_line_protocol.h
blob: b9744a8a49d5a539089a79282ffd7e4776922c06 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
// Copyright (c) 2010, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

// This file contains constants used in the network source line server
// protocol.

// Brief protocol description:
//
// Requests are sent via UDP. All requests begin with a sequence number
// that is prepended to the response. The sequence number is opaque
// to the server, it is provided for client tracking of requests.
//
// In this file, request and response fields will be described as:
// <foo:N>, which should be read as "foo, an N byte unsigned integer
// in network byte order". Strings will be described as <foo:S>.
//
// A client request looks like:
// <seq:2><command:1><command data>
// Where <seq> is a sequence number as described above, <command>
// is one of the commands listed below, and <command data> is arbitrary
// data, defined per-command.
//
// A server response looks like:
// <seq:2><status:1><data>
// Where <seq> is the same sequence number from the request,
// <status> is one of the OK or ERROR values defined below,
// with OK signifying that the request was formatted properly and
// the response contains data, and ERROR signifying that the request
// was malformed in some way. <data> is arbitrary data, defined
// per-command below.
//
// Strings are sent as a 2-byte integer encoding the length, followed
// by <length> bytes.
//
// Valid Commands:
//==================================================
// <HAS:1><module name:S><debug file:S><debug identifier:S>
// example: <HAS><0x8>test.dll<0x8>test.pdb<0xA>0123456789
//
// Query whether the module with this filename and debug information
// has been previously loaded.
//
// Server Response:
// <loaded:1>
// Where <loaded> is one of MODULE_LOADED or MODULE_NOT_LOADED
//
//==================================================
// <LOAD:1><module name:S><debug file:S><debug identifier:S>
// example: <LOAD><0x8>test.dll<0x8>test.pdb<0xA>0123456789
//
// Request that the server find and load symbols for this module.
//
// Server Response:
// <result:1>
// Where <result> is one of:
// LOAD_NOT_FOUND
//  - Symbols not found
// LOAD_INTERRUPT
//  - Processing should be interrupted, symbols may be available later
// LOAD_FAIL
//  - Found symbols, but failed to load them
// LOAD_OK
//  - Found and loaded symbols successfully
//
//==================================================
// <GET:1><module name:S><debug file:S><debug identifier:S><module base address:8><instruction address:8>
// example: <GET><0x8>test.dll<0x8>test.pdb<0x9>0123456789<0x0000000000010000><0x0000000000011A2B>
//
// Look up source line info for this module, loaded at this base address,
// for the code at this instruction address.
//
// Server Response:
// <function:S><func_base:8><source_file:S><source_line:4><source_line_base:8>
//  - As many fields as available are filled in. Fields that are not available
//    will contain an empty string, or a zero for numeric values.

//==================================================
// <GETSTACKWIN:1><module name:S><debug file:S><debug identifier:S><module base address:8><instruction address:8>
// example: <GETSTACKWIN><0x8>test.dll<0x8>test.pdb<0x9>0123456789<0x0000000000010000><0x0000000000011A2B>
//
// Look up Windows stack frame info for this module, loaded at this base
// address, for the code at this instruction address.
//
// Server Response:
// <stack:S>
//    The stack info is formatted as in the symbol file format, with
//    "STACK " omitted, as documented at:
//    http://code.google.com/p/google-breakpad/wiki/SymbolFiles
//    If no Windows stack frame info is available, an empty string is returned.

//==================================================
// <GETSTACKCFI:1><module name:S><debug file:S><debug identifier:S><module base address:8><instruction address:8>
// example: <GETSTACKCFI><0x8>test.dll<0x8>test.pdb<0x9>0123456789<0x0000000000010000><0x0000000000011A2B>
//
// Look up CFI stack frame info for this module, loaded at this base
// address, for the code at this instruction address.
//
// Server Response:
// <stack:S>
//    The stack info is formatted as in the symbol file format, with
//    "STACK " omitted, as documented at:
//    http://code.google.com/p/google-breakpad/wiki/SymbolFiles
//    If no CFI stack frame info is available, an empty string is returned.

#ifndef GOOGLE_BREAKPAD_PROCESSOR_NETWORK_SOURCE_LINE_PROTOCOL_H_
#define GOOGLE_BREAKPAD_PROCESSOR_NETWORK_SOURCE_LINE_PROTOCOL_H_

#include "google_breakpad/common/breakpad_types.h"

namespace google_breakpad {
namespace source_line_protocol {

// Response status codes
const u_int8_t OK    = 1;
const u_int8_t ERROR = 0;

// Commands
const u_int8_t HAS          = 1;
const u_int8_t LOAD         = 2;
const u_int8_t GET          = 3;
const u_int8_t GETSTACKWIN  = 4;
const u_int8_t GETSTACKCFI  = 5;

// HAS responses
const u_int8_t MODULE_NOT_LOADED  = 0;
const u_int8_t MODULE_LOADED      = 1;

// LOAD responses
const u_int8_t LOAD_NOT_FOUND = 0;
const u_int8_t LOAD_INTERRUPT = 1;
const u_int8_t LOAD_FAIL      = 2;
const u_int8_t LOAD_OK        = 3;

}  // namespace source_line_protocol
}  // namespace google_breakpad
#endif  // GOOGLE_BREAKPAD_PROCESSOR_NETWORK_SOURCE_LINE_PROTOCOL_H_