| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| library fuchsia.net; |
| |
| // Legacy interface to create a socket |
| enum SocketDomain { |
| inet = 2; |
| inet6 = 10; |
| }; |
| |
| enum SocketType { |
| stream = 1; |
| dgram = 2; |
| }; |
| |
| enum SocketProtocol { |
| ip = 0; |
| icmp = 1; |
| tcp = 6; |
| udp = 17; |
| ipv6 = 41; |
| icmpv6 = 58; |
| }; |
| |
| enum AddrInfoStatus { |
| ok = 0; |
| // invalid flags |
| bad_flags = 1; |
| // missing node name or service name |
| no_name = 2; |
| // temporary failure |
| again = 3; |
| // non-recoverable failure |
| fail = 4; |
| // no address found for node name |
| no_data = 5; |
| // argument buffer overflow |
| buffer_overflow = 6; |
| // system error |
| system_error = 7; |
| }; |
| |
| struct AddrInfoHints { |
| int32 flags; |
| int32 family; |
| int32 sock_type; |
| int32 protocol; |
| }; |
| |
| struct AddrStorage { |
| array<uint8>:16 val; |
| uint32 len; |
| }; |
| |
| struct AddrInfo { |
| int32 flags; |
| int32 family; |
| int32 sock_type; |
| int32 protocol; |
| AddrStorage addr; // TODO(tamird): use vector<uint8>:16 addr when we can? |
| uint16 port; |
| }; |
| |
| [Discoverable, Layout = "Simple"] |
| interface LegacySocketProvider { |
| 1: OpenSocket(SocketDomain domain, SocketType type, SocketProtocol protocol) |
| -> (handle<socket>? s, int32 status); |
| 2: GetAddrInfo(string:256? node, string:256? service, AddrInfoHints? hints) |
| -> (AddrInfoStatus status, uint32 nres, array<AddrInfo>:4 res); |
| // TODO(tamird): change (nres, res) to a vector once we can. |
| }; |