quic
Version:
A QUIC server/client implementation in Node.js.
269 lines (268 loc) • 5.86 kB
TypeScript
/// <reference types="node" />
import { AddressInfo } from 'dgram';
import { kVal } from './symbol';
import { BufferVisitor } from './common';
export declare enum SessionType {
SERVER = 0,
CLIENT = 1,
}
export declare enum FamilyType {
IPv4 = "IPv4",
IPv6 = "IPv6",
}
/**
* Returns supported version.
*/
export declare function getVersion(): string;
/**
* Returns supported versions array.
*/
export declare function getVersions(): string[];
/**
* Chooses the best version in the overlap of ours and theirs.
*/
export declare function chooseVersion(theirs: string[]): string;
/**
* Returns true if the server supports this version.
*/
export declare function isSupportedVersion(version: string): boolean;
/** Protocol representing a base protocol. */
export declare abstract class Protocol {
static fromBuffer(_bufv: BufferVisitor, _len?: number): Protocol;
protected readonly [kVal]: any;
constructor(val: any);
abstract equals(other: Protocol): boolean;
abstract byteLen(arg?: any): number;
abstract writeTo(bufv: BufferVisitor, arg?: any): BufferVisitor;
abstract valueOf(): any;
abstract toString(): string;
}
/** ConnectionID representing a connectionID. */
export declare class ConnectionID extends Protocol {
static fromBuffer(bufv: BufferVisitor): ConnectionID;
static random(): ConnectionID;
constructor(id: string);
/**
* @return {string} - 16 length hex string
*/
valueOf(): string;
equals(other: ConnectionID): boolean;
byteLen(): number;
writeTo(bufv: BufferVisitor): BufferVisitor;
toString(): string;
}
/** PacketNumber representing a packetNumber. */
export declare class PacketNumber extends Protocol {
static flagToByteLen(flagBits: number): number;
static fromBuffer(bufv: BufferVisitor, len: number): PacketNumber;
constructor(val: number);
valueOf(): number;
nextNumber(): PacketNumber;
prevNumber(): PacketNumber;
isLimitReached(): boolean;
delta(other: PacketNumber): number;
closestTo(a: PacketNumber, b: PacketNumber): PacketNumber;
flagBits(): number;
equals(other: PacketNumber): boolean;
byteLen(isFull?: boolean): number;
writeTo(bufv: BufferVisitor, isFull?: boolean): BufferVisitor;
toString(): string;
}
/** StreamID representing a streamID. */
export declare class StreamID extends Protocol {
/**
* 2 bits -> 8/8, 16/8, 24/8, 32/8
*/
static flagToByteLen(flagBits: number): number;
static fromBuffer(bufv: BufferVisitor, len: number): StreamID;
constructor(id: number);
valueOf(): number;
flagBits(): number;
nextID(): StreamID;
prevID(): StreamID;
equals(other: StreamID): boolean;
byteLen(isFull?: boolean): number;
writeTo(bufv: BufferVisitor, isFull?: boolean): BufferVisitor;
toString(): string;
}
/** Offset representing a data offset. */
export declare class Offset extends Protocol {
/**
* 3 bits -> 0, 16/8, 24/8, 32/8, 40/8, 48/8, 56/8, 64/8
*/
static flagToByteLen(flagBits: number): number;
static fromBuffer(bufv: BufferVisitor, len: number): Offset;
constructor(offset: number);
valueOf(): number;
equals(other: Offset): boolean;
gt(other: Offset): boolean;
byteLen(isFull?: boolean): number;
/**
* 0, 16/8, 24/8, 32/8, 40/8, 48/8, 56/8, 64/8 -> 3 bits
*/
flagBits(): number;
writeTo(bufv: BufferVisitor, isFull?: boolean): BufferVisitor;
toString(): string;
}
/** SocketAddress representing a socket address. */
export declare class SocketAddress extends Protocol {
static fromBuffer(bufv: BufferVisitor): SocketAddress;
port: number;
address: string;
family: FamilyType;
constructor(obj: AddressInfo);
valueOf(): {
address: string;
family: string;
port: number;
};
equals(other: SocketAddress): boolean;
byteLen(): number;
writeTo(bufv: BufferVisitor): BufferVisitor;
toString(): string;
}
/** QuicTags representing a QUIC tag. */
export declare class QuicTags extends Protocol {
static fromBuffer(bufv: BufferVisitor): QuicTags;
name: Tag;
tags: Map<Tag, Buffer>;
constructor(name: Tag);
valueOf(): {
name: string;
tags: any;
};
readonly size: number;
[Symbol.iterator](): IterableIterator<[Tag, Buffer]>;
set(key: Tag, val: Buffer): void;
get(key: Tag): Buffer | undefined;
has(key: Tag): boolean;
equals(other: QuicTags): boolean;
byteLen(): number;
writeTo(bufv: BufferVisitor): BufferVisitor;
toString(): string;
}
export declare enum Tag {
CHLO,
SHLO,
SCFG,
REJ,
SREJ,
CETV,
PRST,
SCUP,
ALPN,
P256,
C255,
AESG,
CC20,
SRBF,
QBIC,
AFCW,
IFW5,
IFW6,
IFW7,
IFW8,
IFW9,
IFWA,
TBBR,
'1RTT',
'2RTT',
LRTT,
BBRR,
BBR1,
BBR2,
RENO,
TPCC,
BYTE,
IW03,
IW10,
IW20,
IW50,
'1CON',
NTLP,
NCON,
NRTO,
UNDO,
TIME,
ATIM,
MIN1,
MIN4,
TLPR,
ACKD,
AKD2,
AKD3,
AKD4,
AKDU,
SSLR,
NPRR,
'5RTO',
'3RTO',
CTIM,
DHDT,
CONH,
LFAK,
SMHL,
CCVX,
CBQT,
BLMX,
CPAU,
NSTP,
TCID,
MPTH,
NCMR,
BWRE,
BWMX,
BWRS,
BWS2,
MTUH,
MTUL,
ASYN,
SYNC,
FHL2,
X509,
X59R,
CHID,
VER,
NONC,
NONP,
KEXS,
AEAD,
COPT,
CLOP,
ICSL,
SCLS,
MSPC,
MIDS,
IRTT,
SWND,
SNI,
PUBS,
SCID,
ORBT,
PDMD,
PROF,
CCS,
CCRT,
EXPY,
STTL,
SFCW,
CFCW,
UAID,
XLCT,
TBKP,
TB10,
RREJ,
RCID,
CADR,
ASAD,
CIDK,
CIDS,
RNON,
RSEQ,
PAD,
SPSH,
SNO,
STK,
CRT,
CSCT,
}