1syntax = "proto2";
2option go_package = "socket";
3
4package appengine;
5
6message RemoteSocketServiceError {
7  enum ErrorCode {
8    SYSTEM_ERROR = 1;
9    GAI_ERROR = 2;
10    FAILURE = 4;
11    PERMISSION_DENIED = 5;
12    INVALID_REQUEST = 6;
13    SOCKET_CLOSED = 7;
14  }
15
16  enum SystemError {
17    option allow_alias = true;
18
19    SYS_SUCCESS = 0;
20    SYS_EPERM = 1;
21    SYS_ENOENT = 2;
22    SYS_ESRCH = 3;
23    SYS_EINTR = 4;
24    SYS_EIO = 5;
25    SYS_ENXIO = 6;
26    SYS_E2BIG = 7;
27    SYS_ENOEXEC = 8;
28    SYS_EBADF = 9;
29    SYS_ECHILD = 10;
30    SYS_EAGAIN = 11;
31    SYS_EWOULDBLOCK = 11;
32    SYS_ENOMEM = 12;
33    SYS_EACCES = 13;
34    SYS_EFAULT = 14;
35    SYS_ENOTBLK = 15;
36    SYS_EBUSY = 16;
37    SYS_EEXIST = 17;
38    SYS_EXDEV = 18;
39    SYS_ENODEV = 19;
40    SYS_ENOTDIR = 20;
41    SYS_EISDIR = 21;
42    SYS_EINVAL = 22;
43    SYS_ENFILE = 23;
44    SYS_EMFILE = 24;
45    SYS_ENOTTY = 25;
46    SYS_ETXTBSY = 26;
47    SYS_EFBIG = 27;
48    SYS_ENOSPC = 28;
49    SYS_ESPIPE = 29;
50    SYS_EROFS = 30;
51    SYS_EMLINK = 31;
52    SYS_EPIPE = 32;
53    SYS_EDOM = 33;
54    SYS_ERANGE = 34;
55    SYS_EDEADLK = 35;
56    SYS_EDEADLOCK = 35;
57    SYS_ENAMETOOLONG = 36;
58    SYS_ENOLCK = 37;
59    SYS_ENOSYS = 38;
60    SYS_ENOTEMPTY = 39;
61    SYS_ELOOP = 40;
62    SYS_ENOMSG = 42;
63    SYS_EIDRM = 43;
64    SYS_ECHRNG = 44;
65    SYS_EL2NSYNC = 45;
66    SYS_EL3HLT = 46;
67    SYS_EL3RST = 47;
68    SYS_ELNRNG = 48;
69    SYS_EUNATCH = 49;
70    SYS_ENOCSI = 50;
71    SYS_EL2HLT = 51;
72    SYS_EBADE = 52;
73    SYS_EBADR = 53;
74    SYS_EXFULL = 54;
75    SYS_ENOANO = 55;
76    SYS_EBADRQC = 56;
77    SYS_EBADSLT = 57;
78    SYS_EBFONT = 59;
79    SYS_ENOSTR = 60;
80    SYS_ENODATA = 61;
81    SYS_ETIME = 62;
82    SYS_ENOSR = 63;
83    SYS_ENONET = 64;
84    SYS_ENOPKG = 65;
85    SYS_EREMOTE = 66;
86    SYS_ENOLINK = 67;
87    SYS_EADV = 68;
88    SYS_ESRMNT = 69;
89    SYS_ECOMM = 70;
90    SYS_EPROTO = 71;
91    SYS_EMULTIHOP = 72;
92    SYS_EDOTDOT = 73;
93    SYS_EBADMSG = 74;
94    SYS_EOVERFLOW = 75;
95    SYS_ENOTUNIQ = 76;
96    SYS_EBADFD = 77;
97    SYS_EREMCHG = 78;
98    SYS_ELIBACC = 79;
99    SYS_ELIBBAD = 80;
100    SYS_ELIBSCN = 81;
101    SYS_ELIBMAX = 82;
102    SYS_ELIBEXEC = 83;
103    SYS_EILSEQ = 84;
104    SYS_ERESTART = 85;
105    SYS_ESTRPIPE = 86;
106    SYS_EUSERS = 87;
107    SYS_ENOTSOCK = 88;
108    SYS_EDESTADDRREQ = 89;
109    SYS_EMSGSIZE = 90;
110    SYS_EPROTOTYPE = 91;
111    SYS_ENOPROTOOPT = 92;
112    SYS_EPROTONOSUPPORT = 93;
113    SYS_ESOCKTNOSUPPORT = 94;
114    SYS_EOPNOTSUPP = 95;
115    SYS_ENOTSUP = 95;
116    SYS_EPFNOSUPPORT = 96;
117    SYS_EAFNOSUPPORT = 97;
118    SYS_EADDRINUSE = 98;
119    SYS_EADDRNOTAVAIL = 99;
120    SYS_ENETDOWN = 100;
121    SYS_ENETUNREACH = 101;
122    SYS_ENETRESET = 102;
123    SYS_ECONNABORTED = 103;
124    SYS_ECONNRESET = 104;
125    SYS_ENOBUFS = 105;
126    SYS_EISCONN = 106;
127    SYS_ENOTCONN = 107;
128    SYS_ESHUTDOWN = 108;
129    SYS_ETOOMANYREFS = 109;
130    SYS_ETIMEDOUT = 110;
131    SYS_ECONNREFUSED = 111;
132    SYS_EHOSTDOWN = 112;
133    SYS_EHOSTUNREACH = 113;
134    SYS_EALREADY = 114;
135    SYS_EINPROGRESS = 115;
136    SYS_ESTALE = 116;
137    SYS_EUCLEAN = 117;
138    SYS_ENOTNAM = 118;
139    SYS_ENAVAIL = 119;
140    SYS_EISNAM = 120;
141    SYS_EREMOTEIO = 121;
142    SYS_EDQUOT = 122;
143    SYS_ENOMEDIUM = 123;
144    SYS_EMEDIUMTYPE = 124;
145    SYS_ECANCELED = 125;
146    SYS_ENOKEY = 126;
147    SYS_EKEYEXPIRED = 127;
148    SYS_EKEYREVOKED = 128;
149    SYS_EKEYREJECTED = 129;
150    SYS_EOWNERDEAD = 130;
151    SYS_ENOTRECOVERABLE = 131;
152    SYS_ERFKILL = 132;
153  }
154
155  optional int32 system_error = 1 [default=0];
156  optional string error_detail = 2;
157}
158
159message AddressPort {
160  required int32 port = 1;
161  optional bytes packed_address = 2;
162
163  optional string hostname_hint = 3;
164}
165
166
167
168message CreateSocketRequest {
169  enum SocketFamily {
170    IPv4 = 1;
171    IPv6 = 2;
172  }
173
174  enum SocketProtocol {
175    TCP = 1;
176    UDP = 2;
177  }
178
179  required SocketFamily family = 1;
180  required SocketProtocol protocol = 2;
181
182  repeated SocketOption socket_options = 3;
183
184  optional AddressPort proxy_external_ip = 4;
185
186  optional int32 listen_backlog = 5 [default=0];
187
188  optional AddressPort remote_ip = 6;
189
190  optional string app_id = 9;
191
192  optional int64 project_id = 10;
193}
194
195message CreateSocketReply {
196  optional string socket_descriptor = 1;
197
198  optional AddressPort server_address = 3;
199
200  optional AddressPort proxy_external_ip = 4;
201
202  extensions 1000 to max;
203}
204
205
206
207message BindRequest {
208  required string socket_descriptor = 1;
209  required AddressPort proxy_external_ip = 2;
210}
211
212message BindReply {
213  optional AddressPort proxy_external_ip = 1;
214}
215
216
217
218message GetSocketNameRequest {
219  required string socket_descriptor = 1;
220}
221
222message GetSocketNameReply {
223  optional AddressPort proxy_external_ip = 2;
224}
225
226
227
228message GetPeerNameRequest {
229  required string socket_descriptor = 1;
230}
231
232message GetPeerNameReply {
233  optional AddressPort peer_ip = 2;
234}
235
236
237message SocketOption {
238
239  enum SocketOptionLevel {
240    SOCKET_SOL_IP = 0;
241    SOCKET_SOL_SOCKET = 1;
242    SOCKET_SOL_TCP = 6;
243    SOCKET_SOL_UDP = 17;
244  }
245
246  enum SocketOptionName {
247    option allow_alias = true;
248
249    SOCKET_SO_DEBUG = 1;
250    SOCKET_SO_REUSEADDR = 2;
251    SOCKET_SO_TYPE = 3;
252    SOCKET_SO_ERROR = 4;
253    SOCKET_SO_DONTROUTE = 5;
254    SOCKET_SO_BROADCAST = 6;
255    SOCKET_SO_SNDBUF = 7;
256    SOCKET_SO_RCVBUF = 8;
257    SOCKET_SO_KEEPALIVE = 9;
258    SOCKET_SO_OOBINLINE = 10;
259    SOCKET_SO_LINGER = 13;
260    SOCKET_SO_RCVTIMEO = 20;
261    SOCKET_SO_SNDTIMEO = 21;
262
263    SOCKET_IP_TOS = 1;
264    SOCKET_IP_TTL = 2;
265    SOCKET_IP_HDRINCL = 3;
266    SOCKET_IP_OPTIONS = 4;
267
268    SOCKET_TCP_NODELAY = 1;
269    SOCKET_TCP_MAXSEG = 2;
270    SOCKET_TCP_CORK = 3;
271    SOCKET_TCP_KEEPIDLE = 4;
272    SOCKET_TCP_KEEPINTVL = 5;
273    SOCKET_TCP_KEEPCNT = 6;
274    SOCKET_TCP_SYNCNT = 7;
275    SOCKET_TCP_LINGER2 = 8;
276    SOCKET_TCP_DEFER_ACCEPT = 9;
277    SOCKET_TCP_WINDOW_CLAMP = 10;
278    SOCKET_TCP_INFO = 11;
279    SOCKET_TCP_QUICKACK = 12;
280  }
281
282  required SocketOptionLevel level = 1;
283  required SocketOptionName option = 2;
284  required bytes value = 3;
285}
286
287
288message SetSocketOptionsRequest {
289  required string socket_descriptor = 1;
290  repeated SocketOption options = 2;
291}
292
293message SetSocketOptionsReply {
294}
295
296message GetSocketOptionsRequest {
297  required string socket_descriptor = 1;
298  repeated SocketOption options = 2;
299}
300
301message GetSocketOptionsReply {
302  repeated SocketOption options = 2;
303}
304
305
306message ConnectRequest {
307  required string socket_descriptor = 1;
308  required AddressPort remote_ip = 2;
309  optional double timeout_seconds = 3 [default=-1];
310}
311
312message ConnectReply {
313  optional AddressPort proxy_external_ip = 1;
314
315  extensions 1000 to max;
316}
317
318
319message ListenRequest {
320  required string socket_descriptor = 1;
321  required int32 backlog = 2;
322}
323
324message ListenReply {
325}
326
327
328message AcceptRequest {
329  required string socket_descriptor = 1;
330  optional double timeout_seconds = 2 [default=-1];
331}
332
333message AcceptReply {
334  optional bytes new_socket_descriptor = 2;
335  optional AddressPort remote_address = 3;
336}
337
338
339
340message ShutDownRequest {
341  enum How {
342    SOCKET_SHUT_RD = 1;
343    SOCKET_SHUT_WR = 2;
344    SOCKET_SHUT_RDWR = 3;
345  }
346  required string socket_descriptor = 1;
347  required How how = 2;
348  required int64 send_offset = 3;
349}
350
351message ShutDownReply {
352}
353
354
355
356message CloseRequest {
357  required string socket_descriptor = 1;
358  optional int64 send_offset = 2 [default=-1];
359}
360
361message CloseReply {
362}
363
364
365
366message SendRequest {
367  required string socket_descriptor = 1;
368  required bytes data = 2 [ctype=CORD];
369  required int64 stream_offset = 3;
370  optional int32 flags = 4 [default=0];
371  optional AddressPort send_to = 5;
372  optional double timeout_seconds = 6 [default=-1];
373}
374
375message SendReply {
376  optional int32 data_sent = 1;
377}
378
379
380message ReceiveRequest {
381  enum Flags {
382    MSG_OOB = 1;
383    MSG_PEEK = 2;
384  }
385  required string socket_descriptor = 1;
386  required int32 data_size = 2;
387  optional int32 flags = 3 [default=0];
388  optional double timeout_seconds = 5 [default=-1];
389}
390
391message ReceiveReply {
392  optional int64 stream_offset = 2;
393  optional bytes data = 3 [ctype=CORD];
394  optional AddressPort received_from = 4;
395  optional int32 buffer_size = 5;
396}
397
398
399
400message PollEvent {
401
402  enum PollEventFlag {
403    SOCKET_POLLNONE = 0;
404    SOCKET_POLLIN = 1;
405    SOCKET_POLLPRI = 2;
406    SOCKET_POLLOUT = 4;
407    SOCKET_POLLERR = 8;
408    SOCKET_POLLHUP = 16;
409    SOCKET_POLLNVAL = 32;
410    SOCKET_POLLRDNORM = 64;
411    SOCKET_POLLRDBAND = 128;
412    SOCKET_POLLWRNORM = 256;
413    SOCKET_POLLWRBAND = 512;
414    SOCKET_POLLMSG = 1024;
415    SOCKET_POLLREMOVE = 4096;
416    SOCKET_POLLRDHUP = 8192;
417  };
418
419  required string socket_descriptor = 1;
420  required int32 requested_events = 2;
421  required int32 observed_events = 3;
422}
423
424message PollRequest {
425  repeated PollEvent events = 1;
426  optional double timeout_seconds = 2 [default=-1];
427}
428
429message PollReply {
430  repeated PollEvent events = 2;
431}
432
433message ResolveRequest {
434  required string name = 1;
435  repeated CreateSocketRequest.SocketFamily address_families = 2;
436}
437
438message ResolveReply {
439  enum ErrorCode {
440    SOCKET_EAI_ADDRFAMILY = 1;
441    SOCKET_EAI_AGAIN = 2;
442    SOCKET_EAI_BADFLAGS = 3;
443    SOCKET_EAI_FAIL = 4;
444    SOCKET_EAI_FAMILY = 5;
445    SOCKET_EAI_MEMORY = 6;
446    SOCKET_EAI_NODATA = 7;
447    SOCKET_EAI_NONAME = 8;
448    SOCKET_EAI_SERVICE = 9;
449    SOCKET_EAI_SOCKTYPE = 10;
450    SOCKET_EAI_SYSTEM = 11;
451    SOCKET_EAI_BADHINTS = 12;
452    SOCKET_EAI_PROTOCOL = 13;
453    SOCKET_EAI_OVERFLOW = 14;
454    SOCKET_EAI_MAX = 15;
455  };
456
457  repeated bytes packed_address = 2;
458  optional string canonical_name = 3;
459  repeated string aliases = 4;
460}
461