📄 rtspserver.h
字号:
// RTSPServer.h: interface for the RTSPServer class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_RTSPSERVER_H__EE3E881B_7E39_479F_8A85_0C36E2DF5696__INCLUDED_)
#define AFX_RTSPSERVER_H__EE3E881B_7E39_479F_8A85_0C36E2DF5696__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#pragma warning(disable : 4786)
#include <string>
#include <map>
#include <list>
using namespace std;
#include "winsock.h"
#include "Type.h"
#include "ServerMediaSubsession.h"
#include "ServerMediaSession.h"
#include "BankSocket.h"
#include "BasicTaskScheduler.h"
#define RTSP_BUFFER_SIZE 10000 // for incoming requests, and outgoing responses
class RTSPServer
{
public:
RTSPServer(Port ourPort);
virtual ~RTSPServer();
void RunServer();
void incomingConnectionHandler1();
char* rtspURL(ServerMediaSession const* serverMediaSession) const;
//ServerMediaSession
void addServerMediaSession(ServerMediaSession* serverMediaSession);
ServerMediaSession* lookupServerMediaSession(char const* streamName);
public:
BasicTaskScheduler fBasicTaskScheduler;
private:
friend class RTSPClientSession;
int fServerSocket;
Port fServerPort;
unsigned fSessionIdCounter;
map<string,ServerMediaSession *> fServerMediaSession;
CBankSocket fBankSocket;
private:
// The state of each individual session handled by a RTSP server:
class RTSPClientSession {
public:
static void incomingRequestHandler(void*, int /*mask*/);
RTSPClientSession(RTSPServer& ourServer, unsigned sessionId,
int clientSocket, struct sockaddr_in clientAddr);
virtual ~RTSPClientSession();
void incomingRequestHandler1();
void handleCmd_bad(char const* cseq);
void handleCmd_notSupported(char const* cseq);
void handleCmd_notFound(char const* cseq);
void handleCmd_unsupportedTransport(char const* cseq);
void handleCmd_OPTIONS(char const* cseq);
void handleCmd_DESCRIBE(char const* cseq, char const* urlSuffix,
char const* fullRequestStr);
void handleCmd_SETUP(char const* cseq,
char const* urlPreSuffix, char const* urlSuffix,
char const* fullRequestStr);
void handleCmd_withinSession(char const* cmdName,
char const* urlPreSuffix, char const* urlSuffix,
char const* cseq, char const* fullRequestStr);
void handleCmd_TEARDOWN(ServerMediaSubsession* subsession,
char const* cseq);
void handleCmd_PLAY(ServerMediaSubsession* subsession,
char const* cseq, char const* fullRequestStr);
void handleCmd_PAUSE(ServerMediaSubsession* subsession,
char const* cseq);
void handleCmd_GET_PARAMETER(ServerMediaSubsession* subsession,
char const* cseq, char const* fullRequestStr);
Boolean authenticationOK(char const* cmdName, char const* cseq,
char const* fullRequestStr);
Boolean parseRequestString(char const *reqStr, unsigned reqStrSize,
char *resultCmdName,
unsigned resultCmdNameMaxSize,
char* resultURLPreSuffix,
unsigned resultURLPreSuffixMaxSize,
char* resultURLSuffix,
unsigned resultURLSuffixMaxSize,
char* resultCSeq,
unsigned resultCSeqMaxSize);
private:
void reclaimStreamStates();
private:
RTSPServer& fOurServer;
unsigned fOurSessionId;
ServerMediaSession* fOurServerMediaSession;
int fClientSocket;
struct sockaddr_in fClientAddr;
unsigned char fBuffer[RTSP_BUFFER_SIZE];
unsigned char fResponseBuffer[RTSP_BUFFER_SIZE];
Boolean fSessionIsActive, fStreamAfterSETUP;
unsigned char fTCPStreamIdCount; // used for (optional) RTP/TCP
unsigned fNumStreamStates;
struct streamState {
ServerMediaSubsession* subsession;
void* streamToken;
} * fStreamStates;
};
};
#endif // !defined(AFX_RTSPSERVER_H__EE3E881B_7E39_479F_8A85_0C36E2DF5696__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -