static apt_bool_t test_stream_generate(rtsp_generator_t *generator, rtsp_message_t *message) { char buffer[500]; apt_text_stream_t stream; apt_message_status_e status; apt_bool_t continuation; do { apt_text_stream_init(&stream,buffer,sizeof(buffer)-1); continuation = FALSE; status = rtsp_generator_run(generator,message,&stream); if(status == APT_MESSAGE_STATUS_COMPLETE) { stream.text.length = stream.pos - stream.text.buf; *stream.pos = '\0'; apt_log(APT_LOG_MARK,APT_PRIO_NOTICE,"Generated RTSP Stream [%"APR_SIZE_T_FMT" bytes]\n%s",stream.text.length,stream.text.buf); } else if(status == APT_MESSAGE_STATUS_INCOMPLETE) { *stream.pos = '\0'; apt_log(APT_LOG_MARK,APT_PRIO_NOTICE,"Generated RTSP Stream [%"APR_SIZE_T_FMT" bytes] continuation awaited\n%s",stream.text.length,stream.text.buf); continuation = TRUE; } else { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Failed to Generate RTSP Stream"); } } while(continuation == TRUE); return TRUE; }
/* Send RTSP message through RTSP connection */ static apt_bool_t rtsp_server_message_send(rtsp_server_t *server, apt_net_server_connection_t *connection, rtsp_message_t *message) { apt_bool_t status = FALSE; rtsp_server_connection_t *rtsp_connection; apt_text_stream_t *stream; rtsp_stream_result_e result; if(!connection || !connection->sock) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"No RTSP Connection"); return FALSE; } rtsp_connection = connection->obj; stream = &rtsp_connection->tx_stream; rtsp_generator_message_set(rtsp_connection->generator,message); do { stream->text.length = sizeof(rtsp_connection->tx_buffer)-1; stream->pos = stream->text.buf; result = rtsp_generator_run(rtsp_connection->generator,stream); if(result == RTSP_STREAM_MESSAGE_COMPLETE || result == RTSP_STREAM_MESSAGE_TRUNCATED) { stream->text.length = stream->pos - stream->text.buf; *stream->pos = '\0'; apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Send RTSP Stream %s [%lu bytes]\n%s", connection->id, stream->text.length, stream->text.buf); if(apr_socket_send(connection->sock,stream->text.buf,&stream->text.length) == APR_SUCCESS) { status = TRUE; } else { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Failed to Send RTSP Stream"); } } else { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Failed to Generate RTSP Stream"); } } while(result == RTSP_STREAM_MESSAGE_TRUNCATED); return status; }
/* Send RTSP message through RTSP connection */ static apt_bool_t rtsp_server_message_send(rtsp_server_t *server, rtsp_server_connection_t *rtsp_connection, rtsp_message_t *message) { apt_bool_t status = FALSE; apt_text_stream_t *stream; apt_message_status_e result; if(!rtsp_connection || !rtsp_connection->sock) { apt_log(RTSP_LOG_MARK,APT_PRIO_WARNING,"No RTSP Connection"); return FALSE; } stream = &rtsp_connection->tx_stream; do { stream->text.length = sizeof(rtsp_connection->tx_buffer)-1; apt_text_stream_reset(stream); result = rtsp_generator_run(rtsp_connection->generator,message,stream); if(result != APT_MESSAGE_STATUS_INVALID) { stream->text.length = stream->pos - stream->text.buf; *stream->pos = '\0'; apt_log(RTSP_LOG_MARK,APT_PRIO_INFO,"Send RTSP Data %s [%"APR_SIZE_T_FMT" bytes]\n%s", rtsp_connection->id, stream->text.length, stream->text.buf); if(apr_socket_send(rtsp_connection->sock,stream->text.buf,&stream->text.length) == APR_SUCCESS) { status = TRUE; } else { apt_log(RTSP_LOG_MARK,APT_PRIO_WARNING,"Failed to Send RTSP Data"); } } else { apt_log(RTSP_LOG_MARK,APT_PRIO_WARNING,"Failed to Generate RTSP Data"); } } while(result == APT_MESSAGE_STATUS_INCOMPLETE); return status; }