Skip to content

Commit

Permalink
lavf/avio: add avio_accept and avio_handshake
Browse files Browse the repository at this point in the history
Signed-off-by: Stephan Holljes <[email protected]>
  • Loading branch information
klaxa committed Jul 31, 2015
1 parent 5125e4b commit 63c07a9
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 0 deletions.
29 changes: 29 additions & 0 deletions libavformat/avio.h
Original file line number Diff line number Diff line change
Expand Up @@ -648,4 +648,33 @@ struct AVBPrint;
*/
int avio_read_to_bprint(AVIOContext *h, struct AVBPrint *pb, size_t max_size);

/**
* Accept and allocate a client context on a server context.
* @param s the server context
* @param c the client context, must be unallocated
* @return >= 0 on success or a negative value corresponding
* to an AVERROR on failure
*/
int avio_accept(AVIOContext *s, AVIOContext **c);

/**
* Perform one step of the protocol handshake to accept a new client.
* This function must be called on a client returned by avio_accept() before
* using it as a read/write context.
* It is separate from avio_accept() because it may block.
* A step of the handshake is defined by places where the application may
* decide to change the proceedings.
* For example, on a protocol with a request header and a reply header, each
* one can constitute a step because the application may use the parameters
* from the request to change parameters in the reply; or each individual
* chunk of the request can constitute a step.
* If the handshake is already finished, avio_handshake() does nothing and
* returns 0 immediately.
*
* @param c the client context to perform the handshake on
* @return 0 on a complete and successful handshake
* > 0 if the handshake progressed, but is not complete
* < 0 for an AVERROR code
*/
int avio_handshake(AVIOContext *c);
#endif /* AVFORMAT_AVIO_H */
17 changes: 17 additions & 0 deletions libavformat/aviobuf.c
Original file line number Diff line number Diff line change
Expand Up @@ -1021,6 +1021,23 @@ int avio_read_to_bprint(AVIOContext *h, AVBPrint *pb, size_t max_size)
return 0;
}

int avio_accept(AVIOContext *s, AVIOContext **c)
{
int ret;
URLContext *sc = s->opaque;
URLContext *cc = NULL;
ret = ffurl_accept(sc, &cc);
if (ret < 0)
return ret;
return ffio_fdopen(c, cc);
}

int avio_handshake(AVIOContext *c)
{
URLContext *cc = c->opaque;
return ffurl_handshake(cc);
}

/* output in a dynamic buffer */

typedef struct DynBuffer {
Expand Down

0 comments on commit 63c07a9

Please sign in to comment.