/// <reference types="node" />
import { Buffer } from 'buffer';
import { SshDataReader, SshDataWriter } from '../io/sshData';
import { SshSessionConfiguration } from '../sshSessionConfiguration';
export interface SshMessageConstructor<T extends SshMessage = SshMessage> {
    new (): T;
}
export declare abstract class SshMessage {
    get messageType(): number;
    protected rawBytes?: Buffer;
    toBuffer(): Buffer;
    read(reader: SshDataReader): void;
    write(writer: SshDataWriter): void;
    /**
     * Rewrites the message to its buffer to ensure the buffer has the correct values.
     * This should be called after modifying properties of a message that was (potentially)
     * received, before re-sending it.
     */
    rewrite(): void;
    protected onRead(reader: SshDataReader): void;
    protected onWrite(writer: SshDataWriter): void;
    protected validateField<T>(value: T | undefined, name: string): T;
    toString(): string;
    static create(config: SshSessionConfiguration, messageType: number, messageContext: string | null, data: Buffer): SshMessage | null;
    convertTo<T extends SshMessage>(otherMessage: T, copy?: boolean): T;
}
//# sourceMappingURL=sshMessage.d.ts.map