⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 proxy.h

📁 RTSP PROXY Server and client
💻 H
字号:
#ifndef _PROXY_H_
#define _PROXY_H_


#include <asm/unistd.h>
#include "prototypes.h"
#include "structure.h"
#include "sysctl.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

extern unsigned int gProxyIP;
extern int gUserLimit;
extern atomic_t gNumUsers;
extern atomic_t gMaxPorts;
#define RTSP_SESSION_BUF_SIZE 4096	
#define MAX_SOCKET_NAME 64
#define MX_TRACKS 8 
typedef int (*do_routine)(void *refCon, char *buf, int bufSize);

typedef struct ipList {
	struct ipList	*next;
	unsigned int		ip;
	do_routine		what_to_do;
	void 			*what_to_do_it_with;
} ipList;

typedef struct {
	char	*cmd;
	int		type;
} t_cmd_map;

typedef struct shok {
	struct shok	*next;
       struct socket *socket; //receive from whom?
       unsigned short port;  //HBO
	ipList	*ips; //NBO
	struct shok	*sib;		// sibling - rtcp or rtp
} shok;

typedef struct trans_pb {
	int		*status;		// set to 1 when needs to die
	shok 	*send_from;
       unsigned int send_to_ip;   
       unsigned short send_to_port;
       long long int 	packetSendCount;
	long long int 	nextDropPacket;
	long long int 	droppedPacketCount;
	long long int 	packetCount;
	char		socketName[MAX_SOCKET_NAME];

} trans_pb;

typedef struct {
	int		ID;
	shok	*RTP_S2P;
	shok	*RTCP_S2P;
	shok	*RTP_P2C;
	shok	*RTCP_P2C;
	unsigned short ClientRTPPort;
	unsigned	short ServerRTPPort;
	trans_pb	RTP_S2C_tpb;
	trans_pb	RTCP_S2C_tpb;
	trans_pb	RTCP_C2S_tpb;
} track_info;

/*rtsp session stuff*/
typedef struct rtsp_session {
	struct rtsp_session *next;
	int		                 die;
       int                            new_session;
       struct socket	           *client_skt; //add
       unsigned int              client_ip; //add
	char	                         *server_address;
       struct socket            *server_skt; //add
       unsigned int server_ip; //add
	unsigned 	short server_port; //add
	int		server_skt_pending_connection;
	int		state;
	int		transaction_type;
	char	*sessionID;

       wait_queue_t sleep;	/* For putting in the socket's waitqueue */

	int		cur_trk;
	int		numTracks;
	track_info	trk[MX_TRACKS];

	char	*cinbuf; //one page
	int		amtInClientInBuffer;
	char	*coutbuf;
	int		amtInClientOutBuffer;
	char	*sinbuf;
	int		amtInServerInBuffer;
	char	*soutbuf;
	int		amtInServerOutBuffer;

	int		totalContentLength;
	int		haveParsedServerReplyHeaders;
	int 		contentLength;
	char           *responseBodyP;
	
	unsigned int	tempIP; //nbo
} rtsp_session;

extern int has_two_crlfs(char *s);
extern char *str_sep(char **stringp, char *delim);
extern int is_command(char *inp, char *cmd, char *server);
extern int cmd_to_transaction_type(char *cmd);
extern int has_trackID(char *inp, int *trackID);
extern int track_id_to_idx(rtsp_session *s, int id);
extern int has_client_port(char *inp, unsigned short *port);
extern int make_udp_port_pair(unsigned int fromIP, unsigned int toIP, shok **rtpSocket, shok **rtcpSocket, const int CPUNR);
extern shok *make_new_shok(unsigned int fromIP, unsigned int toIP, int withSib, const int CPUNR);
extern void set_socket_reuse_address(struct socket *skt);
extern int connect_to_address(struct socket *skt, unsigned int address, unsigned port);
extern int has_content_length(char *inp, int *len);
extern int has_sessionID(char *inp, char *sessionID);
extern int has_ports(char *inp, unsigned int *client_port, unsigned int *server_port);
extern int upon_receipt_from(shok *theShok, int fromIP, do_routine doThis, void *withThis);
extern char *source_eq_string(char *inp);
extern int has_IN_IP(char *inp, char *str);
extern struct socket *new_socket_tcp(void);
extern int UdpReceiveBuffer(struct socket *sock, void * ubuf, size_t size, unsigned flags, struct sockaddr *addr, int *addr_len);
extern int UdpSendBuffer(struct socket *sock, void *buff, size_t len, unsigned flags, struct sockaddr *addr, int addr_len);
extern ipList *find_ip_in_list(ipList *list, unsigned int ip);
extern rtsp_session *new_session(void);
extern int transfer_data(void *refCon, char *buf, int bufSize);
extern int ReceiveBuffer(struct socket *sock, void *my_msg, int size);
extern void send_rtsp_error(struct socket *sock, int refusal);
extern char *ntoa(__u32 in);
extern long atoi(char *p);
extern int str_casecmp(char *str1, char *str2);
extern void CleanUpSession(struct rtsp_session *session, const int CPUNR);
extern int add_ips_to_shok(shok *theShok, unsigned int fromIP, unsigned int toIP, int withSib);
extern void make_socket_nonblocking(struct socket *skt);
extern int strn_casecmp(char *str1, char *str2, int l);
extern void GetSecureString(char *String);
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -