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

📄 iaxwrapper.h

📁 YakaPhone, 著名的VOIP客户端, 需要使用iax库和QT库.界面很漂亮
💻 H
字号:
#ifndef IAXWRAPPER_H_
#define IAXWRAPPER_H_


#include <QObject>
#include <QApplication>
#include <QEvent>
#include <QCustomEvent>
#include <QMutex>
#include <QMap>
#include <QTimer>

#include <src/iaxclient.h>

#include "iaxwrapperevent.h"
#include "prefs.h"
#include "account.h"
#include "callrecord.h"

// A global callback function used by libiaxclient
int iaxc_callback(iaxc_event e);

class IaxWrapper : public QObject
{
Q_OBJECT

public:
    IaxWrapper(QObject *parent = 0, const char *name = 0);
    ~IaxWrapper();

public slots: 
  /* High-Level GUI related methods */
  virtual void registerWithServer();
  virtual void unregisterFromServer();
  //virtual void dial(QString contactNumber);
  virtual void dial(QString accountId, QString contactName, QString contactNumber);  
  virtual void answer_call(int callNo);
  virtual void hold_call(int callNo);
  virtual void resume_call(int callNo);
  virtual void interrupt_call();
  virtual void reject_call(int callNo);
  virtual void select_call(int callNumber);
  virtual void transfer_call(int callNo, QString number);
  virtual void send_dtmf(char digit);
  virtual void ring(); // called by the timer
  virtual void startRing(); // duration varies based on reason
  virtual void stopRing();

  /* Initialization routines */
  virtual bool init_iax_client();  // called from main win constructor
  virtual void start_iax_client();  // starts iaxclient thread
  virtual void stop_iax_client();  // stops iaxclient thread
  virtual int registerAccount(Account* account); // register account
  virtual int unregisterAccount(Account* account); // unregister account
  virtual void registerMultipleAccounts();
  virtual void configureCall(int accountNumber);
  virtual void shutdown_iax_client(); // called from ~IaxWrapper
  virtual iaxc_sound* initTone(int F1, int F2, int Dur, int Len, int Repeat);
  //virtual void debugStatistics(int callNo, int callInterval);  
  
protected slots:
	void callDuration();
  
signals: 
  /* Signals to notify the GUI */ 
  /* Wrapper events */
  //void signalCalling(QString callerId, QString callerStatus); //used only for ringing out
  void signalFree();
  void signalCalling(int callNumber, QString callerStatus); //used only for ringing out
  void signalAnsweredCall(int callNo);
  void signalHoldCall(int callNo);
  void signalResumedCall(int callNo);
  void signalBusy(int callNo);
  void signalTransfer(int callNo);  
  void signalRegistered();
  void signalUnregistered();
  
  /*Callback events */
  void signalLevels(int inValue, int outValue, int threshold ); // audio and mic levels
  void signalOutgoingRinging(int callNo); // ringing status of the tab created by singalCalling()
  void signalIncomingRinging(int callNo); // create tab and set status rining
  void signalComplete(int callNo); // call established, ready to speak
  void signalInactive(int callNo); // inactive call - hangup, forwarded to signalHangup(QString)
  void signalRegistrationRequested(Account* account);
  //void signalRegistrationAccepted(Account* account);
  //void signalRegistrationRejected(Account* account);
  //void signalRegistrationTimeout(Account* account);  
  void signalTextMessage(int id, int status); // inactive call - hangup, forwarded to   signalHangup(QString)
  void signalTextMessage(QString message);
  void signalDebug(const char * error);
  
  void callTime(int callNo, int hours, int minutes, int seconds); // inform about the time of the call - every second
  void fatalError(QString message);
  
private:
  Prefs * settings;
  struct iaxc_sound* ringInTone;
  struct iaxc_sound* ringOutTone;
  QTimer* ringTimer;
  QTimer* callDurationTimer;
  int * rtt;
  iaxc_netstat * localNetstat;
  iaxc_netstat * remoteNetstat;
  bool showStats;
  char* iaxc_ver;
  
  /* Lower level libiaxclient routines */
  void fatal_error(QString err);
  uint getCodecMaskFromName(QString codecName);
  int findAccountById(QString accountId);
  
protected:
	bool event(QEvent * e);  
  
public:  
  Account* getAccountByRegistrationId(int regId);  
  bool registered;// to be sure we have a person who can receive calls
  QMap<int, CallRecord> callSession; //map callNo to callRecord
  QMutex callSessionMutex;  

  bool isCallActive();
    
  int getSelectedCall();
  QString getIaxClientVersion(); 
  
  virtual void iaxWrapperEvent(IaxWrapperEvent * event); 
  
  /* Event Handling Routines */
  void handleIaxCEvent(iaxc_event e); // event callback
  void event_level(float in, float out); // monitors video and audio signal levels
  void event_registration(int id, int reply, int msgcount);// monitors registration status
  void event_state(int callNo, int state, char *remote, char *remote_name, char *local, char *local_context, int reg_id);
  void event_text(int type, char *message);
  void event_unknown(int type); 
  
  Prefs * getSettings();
  
  CallRecord* createCallRecord(QString accountId, QString name, QString number, bool outgoing);    
  
  void debug(const char* log, ...);
  void setShowStats(bool flag);
  bool getShowStats();  
};

#endif /*IAXWRAPPER_H_*/

⌨️ 快捷键说明

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