summaryrefslogtreecommitdiff
path: root/js/net.ts
diff options
context:
space:
mode:
Diffstat (limited to 'js/net.ts')
-rw-r--r--js/net.ts205
1 files changed, 0 insertions, 205 deletions
diff --git a/js/net.ts b/js/net.ts
deleted file mode 100644
index a7ad2b73c..000000000
--- a/js/net.ts
+++ /dev/null
@@ -1,205 +0,0 @@
-// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
-import { EOF, Reader, Writer, Closer } from "./io.ts";
-import { notImplemented } from "./util.ts";
-import { read, write, close } from "./files.ts";
-import * as dispatch from "./dispatch.ts";
-import { sendSync, sendAsync } from "./dispatch_json.ts";
-
-export type Transport = "tcp";
-// TODO support other types:
-// export type Transport = "tcp" | "tcp4" | "tcp6" | "unix" | "unixpacket";
-
-// TODO(ry) Replace 'address' with 'hostname' and 'port', similar to DialOptions
-// and ListenOptions.
-export interface Addr {
- transport: Transport;
- address: string;
-}
-
-/** A Listener is a generic transport listener for stream-oriented protocols. */
-export interface Listener extends AsyncIterator<Conn> {
- /** Waits for and resolves to the next connection to the `Listener`. */
- accept(): Promise<Conn>;
-
- /** Close closes the listener. Any pending accept promises will be rejected
- * with errors.
- */
- close(): void;
-
- /** Return the address of the `Listener`. */
- addr(): Addr;
-
- [Symbol.asyncIterator](): AsyncIterator<Conn>;
-}
-
-enum ShutdownMode {
- // See http://man7.org/linux/man-pages/man2/shutdown.2.html
- // Corresponding to SHUT_RD, SHUT_WR, SHUT_RDWR
- Read = 0,
- Write,
- ReadWrite // unused
-}
-
-function shutdown(rid: number, how: ShutdownMode): void {
- sendSync(dispatch.OP_SHUTDOWN, { rid, how });
-}
-
-export class ConnImpl implements Conn {
- constructor(
- readonly rid: number,
- readonly remoteAddr: string,
- readonly localAddr: string
- ) {}
-
- write(p: Uint8Array): Promise<number> {
- return write(this.rid, p);
- }
-
- read(p: Uint8Array): Promise<number | EOF> {
- return read(this.rid, p);
- }
-
- close(): void {
- close(this.rid);
- }
-
- /** closeRead shuts down (shutdown(2)) the reading side of the TCP connection.
- * Most callers should just use close().
- */
- closeRead(): void {
- shutdown(this.rid, ShutdownMode.Read);
- }
-
- /** closeWrite shuts down (shutdown(2)) the writing side of the TCP
- * connection. Most callers should just use close().
- */
- closeWrite(): void {
- shutdown(this.rid, ShutdownMode.Write);
- }
-}
-
-class ListenerImpl implements Listener {
- constructor(
- readonly rid: number,
- private transport: Transport,
- private localAddr: string
- ) {}
-
- async accept(): Promise<Conn> {
- const res = await sendAsync(dispatch.OP_ACCEPT, { rid: this.rid });
- return new ConnImpl(res.rid, res.remoteAddr, res.localAddr);
- }
-
- close(): void {
- close(this.rid);
- }
-
- addr(): Addr {
- return {
- transport: this.transport,
- address: this.localAddr
- };
- }
-
- async next(): Promise<IteratorResult<Conn>> {
- return {
- done: false,
- value: await this.accept()
- };
- }
-
- [Symbol.asyncIterator](): AsyncIterator<Conn> {
- return this;
- }
-}
-
-export interface Conn extends Reader, Writer, Closer {
- /** The local address of the connection. */
- localAddr: string;
- /** The remote address of the connection. */
- remoteAddr: string;
- /** The resource ID of the connection. */
- rid: number;
- /** Shuts down (`shutdown(2)`) the reading side of the TCP connection. Most
- * callers should just use `close()`.
- */
- closeRead(): void;
- /** Shuts down (`shutdown(2)`) the writing side of the TCP connection. Most
- * callers should just use `close()`.
- */
- closeWrite(): void;
-}
-
-export interface ListenOptions {
- port: number;
- hostname?: string;
- transport?: Transport;
-}
-
-/** Listen announces on the local transport address.
- *
- * @param options
- * @param options.port The port to connect to. (Required.)
- * @param options.hostname A literal IP address or host name that can be
- * resolved to an IP address. If not specified, defaults to 0.0.0.0
- * @param options.transport Defaults to "tcp". Later we plan to add "tcp4",
- * "tcp6", "udp", "udp4", "udp6", "ip", "ip4", "ip6", "unix", "unixgram" and
- * "unixpacket".
- *
- * Examples:
- *
- * listen({ port: 80 })
- * listen({ hostname: "192.0.2.1", port: 80 })
- * listen({ hostname: "[2001:db8::1]", port: 80 });
- * listen({ hostname: "golang.org", port: 80, transport: "tcp" })
- */
-export function listen(options: ListenOptions): Listener {
- const hostname = options.hostname || "0.0.0.0";
- const transport = options.transport || "tcp";
- const res = sendSync(dispatch.OP_LISTEN, {
- hostname,
- port: options.port,
- transport
- });
- return new ListenerImpl(res.rid, transport, res.localAddr);
-}
-
-export interface DialOptions {
- port: number;
- hostname?: string;
- transport?: Transport;
-}
-
-/** Dial connects to the address on the named transport.
- *
- * @param options
- * @param options.port The port to connect to. (Required.)
- * @param options.hostname A literal IP address or host name that can be
- * resolved to an IP address. If not specified, defaults to 127.0.0.1
- * @param options.transport Defaults to "tcp". Later we plan to add "tcp4",
- * "tcp6", "udp", "udp4", "udp6", "ip", "ip4", "ip6", "unix", "unixgram" and
- * "unixpacket".
- *
- * Examples:
- *
- * dial({ port: 80 })
- * dial({ hostname: "192.0.2.1", port: 80 })
- * dial({ hostname: "[2001:db8::1]", port: 80 });
- * dial({ hostname: "golang.org", port: 80, transport: "tcp" })
- */
-export async function dial(options: DialOptions): Promise<Conn> {
- const res = await sendAsync(dispatch.OP_DIAL, {
- hostname: options.hostname || "127.0.0.1",
- port: options.port,
- transport: options.transport || "tcp"
- });
- return new ConnImpl(res.rid, res.remoteAddr!, res.localAddr!);
-}
-
-/** **RESERVED** */
-export async function connect(
- _transport: Transport,
- _address: string
-): Promise<Conn> {
- return notImplemented();
-}