Darwin-Streaming-Server/StreamingProxy.tproj/proxy.h

167 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__