rtsp_private.h
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:5k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is MPEG4IP.
  13.  * 
  14.  * The Initial Developer of the Original Code is Cisco Systems Inc.
  15.  * Portions created by Cisco Systems Inc. are
  16.  * Copyright (C) Cisco Systems Inc. 2000, 2001.  All Rights Reserved.
  17.  * 
  18.  * Contributor(s): 
  19.  *              Bill May        wmay@cisco.com
  20.  */
  21. #include "rtsp_client.h"
  22. #include "rtsp_thread_ipc.h"
  23. #include <SDL.h>
  24. #include <SDL_thread.h>
  25. #ifndef TRUE
  26. #define TRUE 1
  27. #define FALSE 0
  28. #endif
  29. #define RECV_BUFF_DEFAULT_LEN 2048
  30. /*
  31.  * Some useful macros.
  32.  */
  33. #define ADV_SPACE(a) {while (isspace(*(a)) && (*(a) != ''))(a)++;}
  34. #define CHECK_AND_FREE(a, b) { if (a->b != NULL) { free(a->b); a->b = NULL;}}
  35. /*
  36.  * Session structure.
  37.  */
  38. struct rtsp_session_ {
  39.   struct rtsp_session_ *next;
  40.   rtsp_client_t *parent;
  41.   char *session;
  42.   char *url;
  43. };
  44. #define MAX_RTP_THREAD_SESSIONS 4
  45. /*
  46.  * client main structure
  47.  */
  48. typedef struct rtsp_thread_info_ rtsp_thread_info_t;
  49. struct addrinfo;
  50. struct rtsp_client_ {
  51.   /*
  52.    * Information about the server we're talking to.
  53.    */
  54.   char *orig_url;
  55.   char *url;
  56.   char *server_name;
  57.   uint16_t redirect_count;
  58.   int useTCP;
  59.   struct in_addr server_addr;
  60.   struct addrinfo *addr_info;
  61.   uint16_t port;
  62.   /*
  63.    * Communications information - socket, receive buffer
  64.    */
  65. #ifndef _WIN32
  66.   int server_socket;
  67. #else
  68.   SOCKET server_socket;
  69. #endif
  70.   int recv_timeout;
  71.   /*
  72.    * rtsp information gleamed from other packets
  73.    */
  74.   uint32_t next_cseq;
  75.   char *cookie;
  76.   rtsp_decode_t *decode_response;
  77.   char *session;
  78.   rtsp_session_t *session_list;
  79.   /*
  80.    * Thread information
  81.    */
  82.   struct {
  83.     int rtp_callback_set;
  84.     rtp_callback_f rtp_callback;
  85.     rtsp_thread_callback_f rtp_periodic;
  86.     void *rtp_userdata;
  87.   } m_callback[MAX_RTP_THREAD_SESSIONS];
  88.   SDL_Thread *thread;
  89.   SDL_mutex *msg_mutex;
  90.   rtsp_thread_info_t *m_thread_info;
  91.   /*
  92.    * receive buffer
  93.    */
  94.   uint32_t m_buffer_len, m_offset_on;
  95.   char m_resp_buffer[RECV_BUFF_DEFAULT_LEN + 1];
  96. };
  97. #ifdef __cplusplus
  98. extern "C" {
  99. #endif
  100. void clear_decode_response(rtsp_decode_t *decode);
  101. void free_rtsp_client(rtsp_client_t *rptr);
  102. void free_session_info(rtsp_session_t *session);
  103. rtsp_client_t *rtsp_create_client_common(const char *url, int *perr);
  104. int rtsp_dissect_url(rtsp_client_t *rptr, const char *url);
  105. /* communications routines */
  106. int rtsp_create_socket(rtsp_client_t *info);
  107. void rtsp_close_socket(rtsp_client_t *info);
  108. int rtsp_send(rtsp_client_t *info, const char *buff, uint32_t len);
  109. void rtsp_flush(rtsp_client_t *info);
  110. int rtsp_receive_socket(rtsp_client_t *rptr, char *buffer, uint32_t len,
  111. uint32_t msec_timeout, int wait);
  112. int rtsp_get_response(rtsp_client_t *info);
  113. int rtsp_setup_redirect(rtsp_client_t *info);
  114. void rtsp_debug(int loglevel, const char *fmt, ...)
  115. #ifndef _WIN32
  116.      __attribute__((format(__printf__, 2, 3)));
  117. #else
  118.      ;
  119. #endif
  120. int rtsp_create_thread(rtsp_client_t *info);
  121. void rtsp_close_thread(rtsp_client_t *info);
  122. // Call these only from the rtsp thread
  123. int rtsp_thread(void *data); // don't call this...
  124. int rtsp_thread_ipc_respond(rtsp_client_t *info, int ret); // only from thread
  125. int rtsp_thread_ipc_receive(rtsp_client_t *info, char *buffer, size_t len);
  126. void rtsp_thread_init_thread_info(rtsp_client_t *info);
  127. int rtsp_thread_wait_for_event(rtsp_client_t *info);
  128. int rtsp_thread_has_control_message(rtsp_client_t *info);
  129. int rtsp_thread_get_control_message(rtsp_client_t *info, rtsp_msg_type_t *msg);
  130. int rtsp_thread_has_receive_data(rtsp_client_t *info);
  131. void rtsp_thread_close(rtsp_client_t *info);
  132. void rtsp_thread_set_nonblocking(rtsp_client_t *info);
  133. // Call these only from the server thread.
  134. int rtsp_thread_ipc_send (rtsp_client_t *info,
  135.   unsigned char *msg,
  136.   int len);
  137. int rtsp_thread_ipc_send_wait(rtsp_client_t *info,
  138.       unsigned char *msg,
  139.       int msg_len,
  140.       int *return_msg);
  141. int rtsp_send_and_get(rtsp_client_t *info,
  142.       char *buffer,
  143.       uint32_t buflen);
  144. int rtsp_recv(rtsp_client_t *cptr, char *buffer, uint32_t len);
  145. int rtsp_bytes_in_buffer(rtsp_client_t *cptr);
  146. #ifdef __cplusplus
  147. }
  148. #endif