21#define RTSP_BUFFER_SIZE 10000
23#define RTSP_PARAM_STRING_MAX 100
25#define MAX_HOSTNAME_LEN 256
27#define RTSP_RESPONSE_BUFFER_SIZE 2251
29#define RTSP_SDP_BUFFER_SIZE 1024
31#define RTSP_URL_BUFFER_SIZE 1024
33#define RTSP_SMALL_BUFFER_SIZE 256
76template <
typename Platform>
102 LOGI(
"RTSP session created");
114 LOGI(
"RTSP session destructor");
118 LOGI(
"Final cleanup: stopping streamer in destructor");
129 LOGI(
"RTSP session cleanup completed");
149 LOGD(
"handleRequests");
182 LOGI(
"Stopping streamer due to TEARDOWN");
190 }
else if (res == 0) {
191 LOGW(
"client closed socket, exiting");
196 LOGI(
"Stopping streamer due to client disconnect");
404 LOGI(
"aRequest: ------------------------\n%s\n-------------------------",
496 if (
c ==
' ' ||
c ==
'\t') {
504 LOGE(
"failed to parse RTSP");
531 while (
j <
reqSize && (req[
j] ==
' ' || req[
j] ==
'\t')) ++
j;
533 if ((req[
j] ==
'r' || req[
j] ==
'R') && (req[
j + 1] ==
't' || req[
j + 1] ==
'T') &&
534 (req[
j + 2] ==
's' || req[
j + 2] ==
'S') && (req[
j + 3] ==
'p' || req[
j + 3] ==
'P') &&
535 req[
j + 4] ==
':' && req[
j + 5] ==
'/') {
553 if (i <
reqSize && req[i] ==
'/') {
565 LOGW(
"Session rejected by onSessionPath callback");
574 if (req[
k] ==
'R' && req[
k + 1] ==
'T' && req[
k + 2] ==
'S' && req[
k + 3] ==
'P' && req[
k + 4] ==
'/') {
575 while (--
k >= i && req[
k] ==
' ') {}
577 while (
k1 > i && req[
k1] !=
'=') --
k1;
579 unsigned n = 0,
k2 =
k1 + 1;
594 LOGD(
"URL Suffix parse succeeded: %i", ok);
600 if (req[
j] ==
'C' && req[
j + 1] ==
'S' && req[
j + 2] ==
'e' && req[
j + 3] ==
'q' && req[
j + 4] ==
':') {
602 while (
j <
reqSize && (req[
j] ==
' ' || req[
j] ==
'\t')) ++
j;
606 if (
c ==
'\r' ||
c ==
'\n') {
616 LOGD(
"Look for CSeq success: %i", ok);
622 if (req[
j] ==
'C' && req[
j + 1] ==
'o' && req[
j + 2] ==
'n' && req[
j + 3] ==
't' &&
623 req[
j + 4] ==
'e' && req[
j + 5] ==
'n' && req[
j + 6] ==
't' && req[
j + 7] ==
'-' &&
624 (req[
j + 8] ==
'L' || req[
j + 8] ==
'l') && req[
j + 9] ==
'e' && req[
j + 10] ==
'n' &&
625 req[
j + 11] ==
'g' && req[
j + 12] ==
't' && req[
j + 13] ==
'h' && req[
j + 14] ==
':') {
627 while (
j <
reqSize && (req[
j] ==
' ' || req[
j] ==
'\t')) ++
j;
635 char*
ua =
strstr(req,
"User-Agent:");
660 "RTSP/1.0 200 OK\r\nCSeq: %s\r\n"
661 "Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE\r\n\r\n",
689 "o=- %d 0 IN IP4 %s\r\n"
700 "RTSP/1.0 200 OK\r\nCSeq: %s\r\n"
702 "Content-Base: %s/\r\n"
703 "Content-Type: application/sdp\r\n"
704 "Content-Length: %d\r\n\r\n"
710 Serial.println(
"------------------------------");
712 Serial.println(
"------------------------------");
729 "RTP/AVP/TCP;unicast;interleaved=%d-%d",
ch0,
ch1);
735 "RTP/AVP;unicast;client_port=%i-%i;server_port=%i-%i;ssrc=%08X",
741 "RTSP/1.0 200 OK\r\n"
749 Serial.println(
"------------------------------");
751 Serial.println(
"------------------------------");
771 "RTSP/1.0 200 OK\r\n"
773 "Range: npt=0.000-\r\n"
775 "RTP-Info: url=%s;seq=%u;rtptime=%u\r\n\r\n",
779 Serial.println(
"------------------------------");
781 Serial.println(
"------------------------------");
797 "RTSP/1.0 200 OK\r\n"
799 "Session: %i\r\n\r\n",
812 "RTSP/1.0 200 OK\r\n"
840 LOGI(
"SETUP peer resolved: %s:%u (RTP client_port=%u)",
872 const void*
buf,
size_t len) {
873 return Platform::sendSocket(
sock,
buf, len);
881 static char buf[200];
#define LOGW(...)
Definition AudioLoggerIDF.h:29
#define LOGI(...)
Definition AudioLoggerIDF.h:28
#define LOGD(...)
Definition AudioLoggerIDF.h:27
#define LOGE(...)
Definition AudioLoggerIDF.h:30
#define RTSP_SDP_BUFFER_SIZE
Size of SDP buffer (previously hardcoded 1024*2)
Definition RTSPSession.h:29
#define RTSP_PARAM_STRING_MAX
Size of RTSP parameter buffers.
Definition RTSPSession.h:23
#define RTSP_RESPONSE_BUFFER_SIZE
Size of response buffer (previously hardcoded 2251)
Definition RTSPSession.h:27
#define RTSP_SMALL_BUFFER_SIZE
Generic small temp buffer size (previously hardcoded 256)
Definition RTSPSession.h:33
#define RTSP_URL_BUFFER_SIZE
Size of URL buffer (previously hardcoded 1024)
Definition RTSPSession.h:31
#define MAX_HOSTNAME_LEN
Buffer size for RTSP host name.
Definition RTSPSession.h:25
#define RTSP_BUFFER_SIZE
Buffer size for incoming requests, and outgoing responses.
Definition RTSPSession.h:21