f2e5af4058
This commit changes the Stream interface, so as to allow the yamux protocol to have channels. It is necessary, but touches many areas. The codebase is better for it.
82 lines
2.2 KiB
C
82 lines
2.2 KiB
C
#pragma once
|
|
|
|
#include "libp2p/net/protocol.h"
|
|
#include "libp2p/net/stream.h"
|
|
#include "libp2p/yamux/stream.h"
|
|
|
|
/***
|
|
* Declarations for the Yamux protocol
|
|
*/
|
|
|
|
static const int yamux_default_timeout = 10;
|
|
|
|
static const char YAMUX_CONTEXT = 'Y';
|
|
static const char YAMUX_CHANNEL_CONTEXT = 'C';
|
|
|
|
/***
|
|
* Context struct for Yamux
|
|
*/
|
|
struct YamuxContext {
|
|
char type;
|
|
struct Stream* stream;
|
|
struct yamux_session* session;
|
|
struct Libp2pVector* channels;
|
|
};
|
|
|
|
struct YamuxChannelContext {
|
|
char type;
|
|
struct YamuxContext* yamux_context;
|
|
// this stream
|
|
struct Stream* stream;
|
|
// the child protocol's stream
|
|
struct Stream* child_stream;
|
|
// the channel number
|
|
int channel;
|
|
// the window size for this channel
|
|
int window_size;
|
|
// the state of the connection
|
|
int state;
|
|
// whether or not the connection is closed
|
|
int closed;
|
|
};
|
|
|
|
/**
|
|
* Build a handler that can handle the yamux protocol
|
|
*/
|
|
struct Libp2pProtocolHandler* libp2p_yamux_build_protocol_handler();
|
|
/***
|
|
* Send the yamux protocol out the default stream
|
|
* NOTE: if we initiate the connection, we should expect the same back
|
|
* @param stream the stream
|
|
* @returns true(1) on success, false(0) otherwise
|
|
*/
|
|
int yamux_send_protocol(struct Stream* stream);
|
|
|
|
/***
|
|
* Check to see if the reply is the yamux protocol header we expect
|
|
* NOTE: if we initiate the connection, we should expect the same back
|
|
* @param context the SessionContext
|
|
* @returns true(1) on success, false(0) otherwise
|
|
*/
|
|
int yamux_receive_protocol(struct YamuxContext* context);
|
|
|
|
struct Stream* libp2p_yamux_stream_new(struct Stream* parent_stream);
|
|
|
|
void libp2p_yamux_stream_free(struct Stream* stream);
|
|
|
|
/****
|
|
* Add a stream "channel" to the yamux handler
|
|
* @param ctx the context
|
|
* @param stream the stream to add
|
|
* @returns true(1) on success, false(0) otherwise
|
|
*/
|
|
int libp2p_yamux_stream_add(struct YamuxContext* ctx, struct Stream* stream);
|
|
|
|
/**
|
|
* Create a stream that has a "YamuxChannelContext" related to this yamux protocol
|
|
* @param parent_stream the parent yamux stream
|
|
* @returns a new Stream that is a YamuxChannelContext
|
|
*/
|
|
struct Stream* libp2p_yamux_channel_new(struct Stream* parent_stream);
|
|
|
|
void libp2p_yamux_channel_free(struct YamuxChannelContext* ctx);
|