153 lines
6.4 KiB
C
153 lines
6.4 KiB
C
/***************************************************************************************
|
|
*
|
|
* IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
|
*
|
|
* By downloading, copying, installing or using the software you agree to this license.
|
|
* If you do not agree to this license, do not download, install,
|
|
* copy or use the software.
|
|
*
|
|
* Copyright (C) 2014-2024, Happytimesoft Corporation, all rights reserved.
|
|
*
|
|
* Redistribution and use in binary forms, with or without modification, are permitted.
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software distributed
|
|
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
|
* CONDITIONS OF ANY KIND, either express or implied. See the License for the specific
|
|
* language governing permissions and limitations under the License.
|
|
*
|
|
****************************************************************************************/
|
|
|
|
#ifndef _RTSP_PARSE_H
|
|
#define _RTSP_PARSE_H
|
|
|
|
#include "sys_inc.h"
|
|
|
|
/*************************************************************************/
|
|
typedef enum rtsp_req_mt
|
|
{
|
|
RTSP_MT_NULL = 0,
|
|
RTSP_MT_DESCRIBE,
|
|
RTSP_MT_ANNOUNCE,
|
|
RTSP_MT_OPTIONS,
|
|
RTSP_MT_PAUSE,
|
|
RTSP_MT_PLAY,
|
|
RTSP_MT_RECORD,
|
|
RTSP_MT_REDIRECT,
|
|
RTSP_MT_SETUP,
|
|
RTSP_MT_SET_PARAMETER,
|
|
RTSP_MT_GET_PARAMETER,
|
|
RTSP_MT_TEARDOWN
|
|
} RTSP_RMT;
|
|
|
|
typedef struct rtsp_req_message_type_value
|
|
{
|
|
RTSP_RMT msg_type;
|
|
char msg_str[32];
|
|
int msg_len;
|
|
} RREQMTV;
|
|
|
|
typedef enum rtsp_context_type
|
|
{
|
|
RTSP_CTX_NULL = 0,
|
|
RTSP_CTX_RTSP,
|
|
RTSP_CTX_SDP,
|
|
RTSP_CTX_TXT,
|
|
RTSP_CTX_HTM,
|
|
} RTSPCTXT;
|
|
|
|
typedef struct hrtsp_msg_content
|
|
{
|
|
uint32 msg_type; // message type : 0 represents a request, 1 represents a response
|
|
uint32 msg_sub_type; // message sub type
|
|
HDRV first_line;
|
|
|
|
PPSN_CTX rtsp_ctx;
|
|
PPSN_CTX sdp_ctx;
|
|
|
|
int rtsp_len;
|
|
int sdp_len;
|
|
|
|
RTSPCTXT ctx_type;
|
|
int ctx_len;
|
|
|
|
char * msg_buf;
|
|
int buf_offset;
|
|
|
|
uint32 remote_ip;
|
|
uint16 remote_port;
|
|
uint16 local_port;
|
|
}HRTSP_MSG;
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*************************************************************************/
|
|
BOOL rtsp_is_rtsp_msg(char * msg_buf);
|
|
void rtsp_headl_parse(char * pline, int llen, HRTSP_MSG * p_msg);
|
|
int rtsp_line_parse(char * p_buf, int max_len, char sep_char, PPSN_CTX * p_ctx);
|
|
int rtsp_ctx_parse(HRTSP_MSG * p_msg);
|
|
int rtsp_msg_parse(char * msg_buf, int msg_buf_len, HRTSP_MSG * msg);
|
|
int rtsp_msg_parse_part1(char * p_buf, int buf_len, HRTSP_MSG * msg);
|
|
int rtsp_msg_parse_part2(char * p_buf, int buf_len, HRTSP_MSG * msg);
|
|
|
|
/*************************************************************************/
|
|
HDRV * rtsp_find_headline(HRTSP_MSG * msg, const char * head);
|
|
HDRV * rtsp_find_headline_next(HRTSP_MSG * msg, const char * head, HDRV * hrv);
|
|
HDRV * rtsp_find_sdp_headline(HRTSP_MSG * msg, const char * head);
|
|
BOOL rtsp_msg_with_sdp(HRTSP_MSG * msg);
|
|
BOOL rtsp_match_msg_session(HRTSP_MSG * rx_msg, HRTSP_MSG * tx_msg);
|
|
BOOL rtsp_match_msg_cseq(HRTSP_MSG * rx_msg, HRTSP_MSG * tx_msg);
|
|
BOOL rtsp_get_headline_uri(HRTSP_MSG * rx_msg, char * p_uri, int size);
|
|
BOOL rtsp_get_headline_string(HRTSP_MSG * rx_msg, const char * head, char * p_value, int size);
|
|
BOOL rtsp_get_msg_session(HRTSP_MSG * rx_msg, char *session_buf, int len);
|
|
BOOL rtsp_get_msg_cseq(HRTSP_MSG * rx_msg, char *cseq_buf, int len);
|
|
BOOL rtsp_get_user_agent_info(HRTSP_MSG * rx_msg, char * agent_buf, int max_len);
|
|
BOOL rtsp_get_session_info(HRTSP_MSG * rx_msg, char * session_buf, int max_len, int * timeout);
|
|
BOOL rtsp_get_rtp_info(HRTSP_MSG * rx_msg, char * v_ctl, uint32 * p_v_ts, char * a_ctl, uint32 * p_a_ts);
|
|
BOOL rtsp_get_tcp_transport_info(HRTSP_MSG * rx_msg, uint16 *interleaved);
|
|
BOOL rtsp_get_udp_transport_info(HRTSP_MSG * rx_msg, uint16 *client_port, uint16 *server_port);
|
|
BOOL rtsp_get_mc_transport_info(HRTSP_MSG * rx_msg, char *destination, uint16 *port);
|
|
BOOL rtsp_get_cbase_info(HRTSP_MSG * rx_msg, char * cbase_buf, int max_len);
|
|
BOOL rtsp_get_digest_info(HRTSP_MSG * rx_msg, HD_AUTH_INFO * auth_info);
|
|
BOOL rtsp_get_auth_digest_info(HRTSP_MSG * rx_msg, HD_AUTH_INFO * p_auth);
|
|
BOOL rtsp_is_line_exist(HRTSP_MSG * rx_msg, const char * head, const char * value);
|
|
void rtsp_add_tx_msg_line(HRTSP_MSG * tx_msg, const char * msg_hdr, const char * msg_fmt, ...);
|
|
void rtsp_add_tx_msg_sdp_line(HRTSP_MSG * tx_msg, const char * msg_hdr, const char * msg_fmt, ...);
|
|
void rtsp_add_tx_msg_fline(HRTSP_MSG * tx_msg, const char * msg_hdr, const char * msg_fmt, ...);
|
|
void rtsp_copy_msg_line(HRTSP_MSG * src_msg, HRTSP_MSG * dst_msg, const char * msg_hdr);
|
|
void rtsp_free_msg(HRTSP_MSG * msg);
|
|
void rtsp_free_msg_content(HRTSP_MSG * msg);
|
|
|
|
/*************************************************************************/
|
|
BOOL rtsp_get_remote_media_ip(HRTSP_MSG * rx_msg, uint32 * media_ip);
|
|
HDRV * rtsp_find_mdesc_point(HRTSP_MSG * rx_msg, HDRV * pStartHdr, const char * cap_name, int * next_offset, const char * attr=NULL);
|
|
BOOL rtsp_get_remote_cap(HRTSP_MSG * rx_msg, const char * cap_name, int * cap_count, uint8 * cap_array, uint16 * rtp_port, const char * attr=NULL);
|
|
BOOL rtsp_get_remote_cap_desc(HRTSP_MSG * rx_msg, const char * cap_name, char cap_desc[][MAX_AVDESCLEN], const char * attr=NULL);
|
|
BOOL rtsp_find_sdp_control(HRTSP_MSG * rx_msg, char * ctl_buf, const char * tname, int max_len, const char *attr = NULL);
|
|
BOOL rtsp_get_sdp_range(HRTSP_MSG * rx_msg, int * p_start, int * p_end);
|
|
BOOL rtsp_is_support_mcast(HRTSP_MSG * rx_msg);
|
|
BOOL rtsp_get_scale_info(HRTSP_MSG * rx_msg, int * p_scale);
|
|
BOOL rtsp_get_rate_control(HRTSP_MSG * rx_msg, int * p_ratectrl);
|
|
BOOL rtsp_get_immediate(HRTSP_MSG * rx_msg, int * p_imme);
|
|
BOOL rtsp_get_frame_info(HRTSP_MSG * rx_msg, int * p_frame, int * p_interval);
|
|
|
|
/*************************************************************************/
|
|
BOOL rtsp_msg_buf_init(int num);
|
|
void rtsp_msg_buf_deinit();
|
|
HRTSP_MSG * rtsp_get_msg_buf();
|
|
void rtsp_msg_ctx_init(HRTSP_MSG * msg);
|
|
void rtsp_free_msg_buf(HRTSP_MSG * msg);
|
|
uint32 rtsp_idle_msg_buf_num();
|
|
BOOL rtsp_parse_buf_init(int nums);
|
|
void rtsp_parse_buf_deinit();
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // _RTSP_PARSE_H
|
|
|
|
|