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

📄 main.h

📁 softphone client for test
💻 H
📖 第 1 页 / 共 2 页
字号:
 * Fixed to work with new Linux implementation
 *
 * Revision 1.6  1999/04/26 06:14:46  craigs
 * Initial implementation for RTP decoding and lots of stuff
 * As a whole, these changes are called "First Noise"
 *
 * Revision 1.5  1999/02/23 11:04:28  robertj
 * Added capability to make outgoing call.
 *
 * Revision 1.4  1999/01/16 08:05:00  robertj
 * Moved h323 code to a library
 *
 * Revision 1.3  1999/01/16 01:31:36  robertj
 * Major implementation.
 *
 * Revision 1.2  1998/12/14 10:15:30  robertj
 * Fixed leak of sockets
 *
 * Revision 1.1  1998/12/14 09:13:23  robertj
 * Initial revision
 *
 */

#ifndef _OhPhone_MAIN_H
#define _OhPhone_MAIN_H

#include <h323.h>

#ifdef _WIN32
#include <vblasterlid.h>
#endif

#ifdef HAS_IXJ
#include <ixjlid.h>
#endif

#if defined(HAS_IXJ) || defined(HAS_VBLASTER)
#define HAS_LIDDEVICE
#endif

#if P_SDL
class PSDLDisplayThread;
#endif

#ifdef __BEOS__

#ifndef _APPLICATION_H
#include <Application.h>
#endif


class OhPhoneApplication : public BApplication 
{
  public:
    OhPhoneApplication()
      : BApplication("application/x-vnd.BeOhPhone") { }
};

OhPhoneApplication OhPhoneApp;

#endif


class OhPhone : public PProcess
{
    PCLASSINFO(OhPhone, PProcess)
  public:
    OhPhone();
    ~OhPhone();

    void Main();
};

class CallOptions : public PObject
{
  PCLASSINFO(CallOptions, PObject);

  public:
    BOOL Initialise(PArgList & args);
    void PrintOn(ostream & str) const;

    BOOL     noFastStart;
    BOOL     noH245Tunnelling;
    BOOL     noH245InSetup;
    BOOL     noSilenceSuppression;
    unsigned minJitter;
    unsigned maxJitter;
    PINDEX   connectRing;
    WORD     connectPort;
};


class MyH323EndPoint : public H323EndPoint
{
    PCLASSINFO(MyH323EndPoint, H323EndPoint);
  public:
    // overrides from H323EndPoint
    virtual H323Connection * CreateConnection(unsigned callReference);
    virtual BOOL OnIncomingCall(H323Connection &, const H323SignalPDU &, H323SignalPDU &);
    virtual BOOL OnConnectionForwarded(H323Connection &, const PString &, const H323SignalPDU &);
    virtual void OnConnectionEstablished(H323Connection &, const PString &);
    virtual void OnConnectionCleared(H323Connection &, const PString &);
    virtual BOOL OpenAudioChannel(H323Connection &, BOOL, unsigned, H323AudioCodec &);
    virtual BOOL OpenVideoChannel(H323Connection &, BOOL, H323VideoCodec &);
    virtual H323Connection * SetupTransfer(const PString &, const PString &, const PString &, PString &, void * userData = NULL);
    virtual void TranslateTCPAddress(PIPSocket::Address &localAddr, const PIPSocket::Address &remoteAddr);


    // new functions
    BOOL Initialise(PConfigArgs & args, int verbose, BOOL hasMenu);
    void MakeOutgoingCall(const PString &, const PString &);
    void MakeOutgoingCall(const PString &, const PString &, CallOptions callOptions);
    void AwaitTermination();
    void TriggerDisconnect();

    void HandleUserInterface();
    void StartRinging();
    void StopRinging();
    void HandleRinging();

    void TestVideoGrabber(PConfigArgs &args);
    void TestHandleUserInterface();


#ifdef HAS_LIDDEVICE
    void HandleStateChange(BOOL onHook);
    void HandleHandsetOffHook();
    void HandleHandsetOnHook();
    void HandleHandsetDTMF(PString & digits);
    void HandleHandsetTimeouts(const PTime & offHookTime);
#endif

    void SendDTMF(const char * tone);

    void StartCall(const PString & str);
    void NewSpeedDial(const PString & str);
    void ListSpeedDials();

    PDECLARE_NOTIFIER(PTimer, MyH323EndPoint, OnAutoDisconnect);

    PString GetCurrentCallToken() const
      { return currentCallToken; }

    BOOL       terminateOnHangup;

    void WaitForSdlTermination();
    BOOL InitialiseSdl(PConfigArgs & args);

    int GetChannelsOpenLimit() const
      { return channelsOpenLimit; }

  protected:
    // only used internally
    BOOL SetSoundDevice(PConfigArgs &, const char *, PSoundChannel::Directions);
    void AnswerCall(H323Connection::AnswerCallResponse response);

    void ReportSessionStatistics(H323Connection *connection, unsigned sessionID);

    CallOptions defaultCallOptions;
    CallOptions currentCallOptions;


    int  verbose;
    BOOL autoAnswer;

    PString  alwaysForwardParty;
    PString  busyForwardParty;
    PString  noAnswerForwardParty;
    unsigned noAnswerTime;
    PTimer   noAnswerTimer;
    PDECLARE_NOTIFIER(PTimer, MyH323EndPoint, OnNoAnswerTimeout);

    PString videoReceiveDevice;
    int  videoQuality;
    int  videoTxQuality;
    int  videoTxMinQuality;

    int  videoSize;       //0=small, 1=large.
    int  videoInput;
    int  videoQ;           
    int  videoFill;
    int  videoFramesPS;
    int  videoBitRate;
    int  frameTimeMs;

    BOOL    videoIsPal;
    BOOL    videoFake;    
    BOOL    videoLocal;
    BOOL    videoPIP;
    PString videoDevice;
    PString pfdColourFormat;
    int     videoCu30Stats;
    PString configDirectory;

// used for testing the video (no connection made).
    PVideoChannel *localVideoChannel; 

    PString autoDial;
    BOOL    dialAfterHangup;
    BOOL    callerIdEnable;
    BOOL    callerIdCallWaitingEnable;
    PString setupParameter;

    PFilePath ringFile;
    int ringDelay;
    PSyncPoint ringFlag;
    PThread * ringThread;

    int autoDisconnect;
    PTimer autoDisconnectTimer;

    int recordVolume;
    int playVolume;

#ifdef HAS_OSS
    BOOL InitialiseMixer(PConfigArgs & args, int _verbose);
    int  mixerDev;
    int  mixerRecChan;
    int  savedMixerRecChan;
    int  ossRecVol;
    int  ossPlayVol;
#endif

    PString currentCallToken;
    PString callTransferCallToken;

    enum {
      uiDialtone,
      uiAnsweringCall,
      uiConnectingCall,
      uiWaitingForAnswer,
      uiCallInProgress,
      uiCallHungup,
      uiStateIllegal,
    } uiState;

    PMutex uiStateMutex;

    PSyncPoint exitFlag;
    BOOL       speakerphoneSwitch;
    BOOL       hasMenu;
#ifdef HAS_LIDDEVICE
    BOOL autoHook;

    OpalLineInterfaceDevice * lidDevice;
    BOOL isXJack;
#endif

#if P_SDL
    PSDLDisplayThread *sdlThread;
    PMutex           sdlThreadLock;
#endif
    int channelsOpenLimit;

    BOOL behind_masq;
    PIPSocket::Address *masqAddressPtr;

  friend class MyH323Connection;
};


class MyH323Connection : public H323Connection
{
    PCLASSINFO(MyH323Connection, H323Connection);

  public:
    MyH323Connection(
      MyH323EndPoint & ep,
      unsigned callRef,
      unsigned options,
      unsigned minJitter,
      unsigned maxJitter,
      int verbose
    );

    // overrides from H323Connection
    BOOL OnSendSignalSetup(H323SignalPDU & setupPDU);
    AnswerCallResponse OnAnswerCall(const PString &, const H323SignalPDU &, H323SignalPDU &);
    BOOL OnStartLogicalChannel(H323Channel &);
    void OnClosedLogicalChannel(H323Channel &);
    BOOL OnAlerting(const H323SignalPDU &, const PString &);
    void OnUserInputString(const PString &);
    PString GetCallerIdString() const;

  protected:
    MyH323EndPoint & myEndpoint;
    int verbose;
    int channelsOpen;
};

//////////////////////////////////////////////

class UserInterfaceThread : public PThread
{
    PCLASSINFO(UserInterfaceThread, PThread);
  public:
    UserInterfaceThread(MyH323EndPoint & end)
      : PThread(1000, NoAutoDeleteThread), endpoint(end) { Resume(); }
    void Main()
      { endpoint.HandleUserInterface(); }
  protected:
    MyH323EndPoint & endpoint;
};

//////////////////////////////////////////////

class TestUserInterfaceThread : public PThread
{
    PCLASSINFO(TestUserInterfaceThread, PThread);
  public:
    TestUserInterfaceThread(MyH323EndPoint & end)
      : PThread(1000, NoAutoDeleteThread), endpoint(end) { Resume(); }
    void Main()
      { endpoint.TestHandleUserInterface(); }
  protected:
    MyH323EndPoint & endpoint;
};

#endif  // _OhPhone_MAIN_H


// End of File ///////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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