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

📄 main.h

📁 performance analysis in H.323 environments. Open H.323 Call Generator是一个OpenH323 (www.openh323.org)子
💻 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 + -