socket_service.proto 9.1 KB

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