168 lines
4.1 KiB
C
168 lines
4.1 KiB
C
|
/*
|
||
|
*
|
||
|
* @APPLE_LICENSE_HEADER_START@
|
||
|
*
|
||
|
* Copyright (c) 1999-2008 Apple Inc. All Rights Reserved.
|
||
|
*
|
||
|
* This file contains Original Code and/or Modifications of Original Code
|
||
|
* as defined in and that are subject to the Apple Public Source License
|
||
|
* Version 2.0 (the 'License'). You may not use this file except in
|
||
|
* compliance with the License. Please obtain a copy of the License at
|
||
|
* http://www.opensource.apple.com/apsl/ and read it before using this
|
||
|
* file.
|
||
|
*
|
||
|
* The Original Code and all software distributed under the License are
|
||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
||
|
* Please see the License for the specific language governing rights and
|
||
|
* limitations under the License.
|
||
|
*
|
||
|
* @APPLE_LICENSE_HEADER_END@
|
||
|
*
|
||
|
*/
|
||
|
/*
|
||
|
* proxy.h
|
||
|
*
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#ifndef __PROXY_H__
|
||
|
#define __PROXY_H__
|
||
|
|
||
|
#include "shared_udp.h"
|
||
|
/**********************************************/
|
||
|
enum {
|
||
|
stIdle,
|
||
|
stError,
|
||
|
|
||
|
stRecvClientCommand,
|
||
|
stWaitingForIPAddress,
|
||
|
stParseClientCommand,
|
||
|
stSendClientResponse,
|
||
|
stServerTransactionSend,
|
||
|
stServerTransactionRecv,
|
||
|
stClientShutdown,
|
||
|
stServerShutdown,
|
||
|
stBadServerName,
|
||
|
stCantConnectToServer,
|
||
|
stDone
|
||
|
}; // rtsp session states
|
||
|
|
||
|
enum {
|
||
|
ttNone,
|
||
|
ttDescribe,
|
||
|
ttSetup,
|
||
|
ttPlay,
|
||
|
ttPause,
|
||
|
ttStop,
|
||
|
ttTeardown,
|
||
|
ttOptions,
|
||
|
ttAnnounce,
|
||
|
ttRedirect,
|
||
|
ttGetParameter,
|
||
|
ttSetParameter
|
||
|
}; // rtsp command types
|
||
|
|
||
|
enum {
|
||
|
kPermissionDenied,
|
||
|
kTooManyUsers,
|
||
|
kServerNotFound,
|
||
|
kUnknownError
|
||
|
}; // refusal type
|
||
|
|
||
|
typedef struct {
|
||
|
char *cmd;
|
||
|
int type;
|
||
|
} t_cmd_map;
|
||
|
|
||
|
#define MAX_TRACKS 32
|
||
|
|
||
|
typedef struct {
|
||
|
int ID;
|
||
|
shok *RTP_S2P;
|
||
|
shok *RTCP_S2P;
|
||
|
shok *RTP_P2C;
|
||
|
shok *RTCP_P2C;
|
||
|
int ClientRTPPort;
|
||
|
int ServerRTPPort;
|
||
|
trans_pb RTP_S2C_tpb;
|
||
|
trans_pb RTCP_S2C_tpb;
|
||
|
trans_pb RTCP_C2S_tpb;
|
||
|
} track_info;
|
||
|
|
||
|
/* This size will fit nicely in a standard ethernet frame */
|
||
|
#define RTSP_SESSION_BUF_SIZE 4096
|
||
|
|
||
|
typedef struct rtsp_session {
|
||
|
struct rtsp_session *next;
|
||
|
int die;
|
||
|
int newSession;
|
||
|
int client_skt;
|
||
|
int client_ip;
|
||
|
char *server_address;
|
||
|
int server_skt;
|
||
|
int server_interface_addr;
|
||
|
int client_interface_addr;
|
||
|
int server_ip;
|
||
|
int server_port;
|
||
|
int server_skt_pending_connection;
|
||
|
int state;
|
||
|
int transaction_type;
|
||
|
char *sessionID;
|
||
|
|
||
|
int cur_trk;
|
||
|
int numTracks;
|
||
|
track_info trk[MAX_TRACKS];
|
||
|
|
||
|
char cinbuf[RTSP_SESSION_BUF_SIZE];
|
||
|
int amtInClientInBuffer;
|
||
|
char coutbuf[RTSP_SESSION_BUF_SIZE];
|
||
|
int amtInClientOutBuffer;
|
||
|
char sinbuf[RTSP_SESSION_BUF_SIZE];
|
||
|
int amtInServerInBuffer;
|
||
|
char soutbuf[RTSP_SESSION_BUF_SIZE];
|
||
|
int amtInServerOutBuffer;
|
||
|
int totalContentLength;
|
||
|
int haveParsedServerReplyHeaders;
|
||
|
int contentLength;
|
||
|
char* responseBodyP;
|
||
|
|
||
|
int tempIP;
|
||
|
} rtsp_session;
|
||
|
|
||
|
typedef struct subnet_allow {
|
||
|
struct subnet_allow *next;
|
||
|
int ip;
|
||
|
int range;
|
||
|
} subnet_allow;
|
||
|
|
||
|
typedef struct rtsp_listener {
|
||
|
struct rtsp_listener *next;
|
||
|
int port;
|
||
|
int skt;
|
||
|
} rtsp_listener;
|
||
|
|
||
|
/**********************************************/
|
||
|
int service_listeners();
|
||
|
int service_sessions();
|
||
|
|
||
|
void add_rtsp_port_listener(int address,int port);
|
||
|
void cleanup_listeners(void);
|
||
|
void answer_new_connection(rtsp_listener *listener);
|
||
|
void add_session(rtsp_session *session);
|
||
|
void remove_session(rtsp_session *session);
|
||
|
rtsp_session *new_session(void);
|
||
|
void cleanup_sessions(void);
|
||
|
void cleanup_session(rtsp_session *session);
|
||
|
void service_session(rtsp_session *session);
|
||
|
void service_session_rtp(rtsp_session *session);
|
||
|
void read_config(void);
|
||
|
void add_allow_subnet(int ip, int range);
|
||
|
bool allow_ip(int ip);
|
||
|
void send_rtsp_error(int skt, int refusal);
|
||
|
|
||
|
#endif // __PROXY_H__
|
||
|
|