All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.bitcoin.net.StreamParser Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2013 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.google.bitcoin.net;

import java.nio.ByteBuffer;

/**
 * A generic handler which is used in {@link NioServer}, {@link NioClient} and {@link BlockingClient} to handle incoming
 * data streams.
 */
public interface StreamParser {
    /** Called when the connection socket is closed */
    void connectionClosed();

    /** Called when the connection socket is first opened */
    void connectionOpened();

    /**
     * 

Called when new bytes are available from the remote end. This should only ever be called by the single * writeTarget associated with any given StreamParser, multiple callers will likely confuse implementations.

* * Implementers/callers must follow the following conventions exactly: *
    *
  • buff will start with its limit set to the position we can read to and its position set to the location we * will start reading at (always 0)
  • *
  • May read more than one message (recursively) if there are enough bytes available
  • *
  • Uses some internal buffering to store message which are larger (incl their length prefix) than buff's * capacity(), ie it is up to this method to ensure we dont run out of buffer space to decode the next message. *
  • *
  • buff will end with its limit the same as it was previously, and its position set to the position up to which * bytes have been read (the same as its return value)
  • *
  • buff must be at least the size of a Bitcoin header (incl magic bytes).
  • *
* * @return The amount of bytes consumed which should not be provided again */ int receiveBytes(ByteBuffer buff) throws Exception; /** * Called when this parser is attached to an upstream write target (ie a low-level connection handler). This * writeTarget should be stored and used to close the connection or write data to the socket. */ void setWriteTarget(MessageWriteTarget writeTarget); /** * Returns the maximum message size of a message on the socket. This is used in calculating size of buffers to * allocate. */ int getMaxMessageSize(); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy