📄 main.h
字号:
/* H.323 Call Generator.
(c) Benny L. Prijono <seventhson@theseventhson.freeserve.co.uk>
Thomas Kessler <thomas.kessler@gmx.net>
Changelog:
25 Jan 2000 Update to incorporate openh323 v.01 alpha2 and fix gatekeeper
related codes [bennylp]
12 Jul 2000 Update to incorporate openh323 v1.1 beta 2
(Win32 not tested!) [thomask]
*/
///////////////////////////////////////////////////////////////////////////////
class MyMain : public PProcess {
PCLASSINFO(MyMain, PProcess)
public:
MyMain()
: PProcess("Callgen323", "MyMain", 0, 1, AlphaCode, 1) {};
void Main();
};
///////////////////////////////////////////////////////////////////////////////
class COH323LineDevice;
class COH323Connection;
enum ECallDirection {
eCD_INCOMING,
eCD_OUTGOING
};
PLIST(LineDeviceList, COH323LineDevice);
class COH323EndPoint : public H323EndPoint {
PCLASSINFO(COH323EndPoint, H323EndPoint);
public:
COH323EndPoint();
~COH323EndPoint();
// override from H323EndPoint
virtual H323Connection* CreateConnection ( unsigned callReference );
virtual void OnConnectionEstablished ( H323Connection &, const PString &);
virtual void OnConnectionCleared ( H323Connection &, const PString &);
// new functions
BOOL Initialise(const PArgList&);
BOOL CreateListener();
BOOL RegisterGk(const PString& gk_host);
PString MakeOutgoingCall(COH323LineDevice &line_dev, const PString& dest);
BOOL ListenForIncomingCalls();
BOOL OnIncomingCall(COH323Connection &con, const PString &token);
COH323LineDevice *CreateLineDevice(const char *name, ECallDirection dir);
private:
// lines
PMutex m_LineMutex;
LineDeviceList m_FreeIncomingLines, m_BusyIncomingLines,
m_FreeOutgoingLines, m_BusyOutgoingLines,
m_AllLines;
};
///////////////////////////////////////////////////////////////////////////////
class COH323Connection : public H323Connection {
PCLASSINFO(COH323Connection, H323Connection);
public:
COH323Connection ( H323EndPoint & endpoint, unsigned callReference );
~COH323Connection();
// override from H323Connection
BOOL OnIncomingCall ( const H323SignalPDU & setupPDU, H323SignalPDU & alertingPDU );
AnswerCallResponse OnAnswerCall(const PString &, const H323SignalPDU &, H323SignalPDU &);
/*
void OnUserInputString(const PString &);
*/
// new functions
void Hangup();
private:
// new functions
void OnConnectionCleared(const PString &token);
COH323LineDevice *GetLineDevice() const { return m_LineDevice; };
void SetLineDevice(COH323LineDevice& dev) { m_LineDevice=&dev;};
COH323LineDevice *m_LineDevice;
friend class COH323EndPoint;
};
///////////////////////////////////////////////////////////////////////////////
enum STATUS {
NOT_OK=-1,
OK=0
};
class COH323LineDevice : public PObject {
PCLASSINFO(COH323LineDevice,PObject);
public:
COH323LineDevice(const char *name, COH323EndPoint &endpt, ECallDirection dir);
const char *GetName() const { return m_Name; };
STATUS Connect( const char *remote_host );
STATUS Listen();
STATUS Hangup();
ECallDirection GetDirection() const { return m_Dir; };
BOOL IsReadyForIncomingCall() const;
BOOL IsReadyForOutgoingCall() const;
// callback notification
void OnConnectionEstablished(const PString &token);
void OnConnectionCleared(const PString &token);
void OnIncomingConnection(const PString &token);
void OnAnswerCall();
/*
void OnUserInputString(const PString &);
*/
PObject *Clone() const;
static int GetNConnected() { return m_NConnected; };
private:
COH323EndPoint &m_Endpt;
PString m_ConnectionToken;
PString m_Name;
ECallDirection m_Dir;
enum State {
STATE_IDLE,
STATE_BUSY,
STATE_CONNECTED
} m_State;
static int m_NConnected;
static PMutex m_Mutex;
};
///////////////////////////////////////////////////////////////////////////////
class COH323Codec : public H323Codec {
PCLASSINFO(COH323Codec, H323Codec);
public:
enum {
Codec_G711ULaw64k,
};
COH323Codec(Direction dir, PINDEX codecIndex);
~COH323Codec();
BOOL NeedsJitterBuffer() const { return FALSE; }
unsigned GetMaxFrameSize() const { return 64; }
unsigned GetFrameRate() const { return 1; }
unsigned GetTimeUnits() const { return 8; }
unsigned GetBandwidth() const { return 6400; }
BOOL Read(BYTE * buffer, unsigned & length, RTP_DataFrame & rtp);
BOOL Write(const BYTE * buffer, unsigned length, const RTP_DataFrame & rtp, unsigned & frames);
BOOL Open(H323Connection & connection);
void Close();
private:
//PSyncPoint m_RWaitFlag, m_WWaitFlag;
PSyncPoint m_WaitFlag;
};
///////////////////////////////////////////////////////////////////////////////
class COH323Capability : public H323AudioCapability {
PCLASSINFO(COH323Capability, H323AudioCapability);
public:
COH323Capability(PINDEX codec_index, unsigned sub_type, const char *name);
~COH323Capability();
unsigned GetSubType() const { return m_SubType; }
H323Codec * CreateCodec(H323Codec::Direction dir) const
{
return new COH323Codec(dir, m_SubType);
}
void PrintOn(ostream & strm) const { strm << m_Name; }
protected:
PINDEX m_CodecIndex;
unsigned m_SubType;
const char *m_Name;
};
///////////////////////////////////////////////////////////////////////////////
class COHG711ULaw64kCapability : public COH323Capability {
PCLASSINFO(COHG711ULaw64kCapability, COH323Capability);
public:
COHG711ULaw64kCapability()
: COH323Capability(COH323Codec::Codec_G711ULaw64k,
H245_AudioCapability::e_g711Ulaw64k,
"g711Ulaw64k") {};
BOOL OnSendingPDU(H245_AudioCapability&, unsigned) const { return TRUE; };
BOOL OnReceivedPDU(const H245_AudioCapability&, unsigned&) { return TRUE; };
PString GetFormatName() const {return "";};
PObject * Clone() const { return new COHG711ULaw64kCapability(); };
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -