|
- /*
- C->S:
- OPTIONS * RTSP/1.0
- CSeq: 1
- Require: implicit-play
- Proxy-Require: gzipped-messages
-
- S->C:
- RTSP/1.0 200 OK
- CSeq: 1
- Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE
- */
-
- #include "rtsp-client-internal.h"
-
- static const char* sc_format =
- "OPTIONS * RTSP/1.0\r\n"
- "CSeq: %u\r\n"
- "%s" // "Require: implicit-play\r\n"
- "%s" // "Session: xxx\r\n"
- "User-Agent: %s\r\n"
- "\r\n";
-
- int rtsp_client_options(struct rtsp_client_t *rtsp, const char* commands)
- {
- int r = 0;
- char require[128];
- char session[128];
-
- rtsp->state = RTSP_OPTIONS;
-
- require[0] = session[0] = '\0';
- if ((commands && commands[0] && sizeof(require) <= snprintf(require, sizeof(require), "Require: %s\r\n", commands))
- || (rtsp->media_count > 0 && *rtsp->session[0].session && sizeof(session) <= snprintf(session, sizeof(session) - 1, "Session: %s\r\n", rtsp->session[0].session)))
- return -1;
-
- r = snprintf(rtsp->req, sizeof(rtsp->req), sc_format, rtsp->cseq++, require, session, USER_AGENT);
- return (r > 0 && r < sizeof(rtsp->req) && r == rtsp->handler.send(rtsp->param, rtsp->uri, rtsp->req, r)) ? 0 : -1;
- }
-
- int rtsp_client_options_onreply(struct rtsp_client_t* rtsp, void* parser)
- {
- int code;
- const char *methods;
-
- assert(RTSP_OPTIONS == rtsp->state);
- code = http_get_status_code(parser);
- if (200 == code)
- {
- methods = http_get_header_by_name(parser, "Public");
- (void)methods; // TODO: check support methods
- return 0; // next step
- }
- else
- {
- return -1;
- }
- }
|