mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2025-01-19 10:13:13 +00:00
lavf/avio: add avio_accept and avio_handshake
Signed-off-by: Stephan Holljes <klaxa1337@googlemail.com>
This commit is contained in:
parent
5125e4b53f
commit
63c07a956b
@ -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 */
|
||||
|
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user