class RpcStreamConnection extends RpcConnection {

    public long putRpcPacket(@Nonnull RpcPacket packet) throws ConnectionException {
        Validate.notNull(packet);
        throwP4JavaErrorIfConditionFails(nonNull(packet.getFuncNameString()),
                "Unmapped / unmappable function in RpcPacket.put()");

        // Skip over the first few bytes for the preamble,
        // which we'll come back to fill in later when we know the marshaled
        // length.
        int startPos = RpcPacketPreamble.RPC_PREAMBLE_SIZE;

        RpcPacketSupplier supplier = new RpcPacketSupplier();
        supplier.sendBytes(new byte[INITIAL_SENDBUF_SIZE]).sendPos(startPos);

        // FixedOrder
        processNameArgs(packet, supplier);
        processStringArgs(packet, supplier);
        processExternalEnv(packet, supplier);
        processFuncName(packet, supplier);

        calculatePreambleBytesAndSendtoDownstream(supplier);
        return 0;
    }

    public  RpcStreamConnection(String serverHost, int serverPort, Properties props,
                               ServerStats stats, P4Charset p4Charset, boolean secure);
    private  RpcStreamConnection(String serverHost, int serverPort, Properties props,
            ServerStats stats, P4Charset p4Charset, Socket socket, boolean secure);
    private  RpcStreamConnection(String serverHost, int serverPort, Properties props,
            ServerStats stats, P4Charset p4Charset, Socket socket, RpcSocketPool pool, boolean secure);
    public  RpcStreamConnection(String serverHost, int serverPort, Properties props,
            ServerStats stats, P4Charset p4Charset, Socket socket, RpcSocketPool pool, boolean secure,
            String rsh);

}