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

📄 mainunit.pas

📁 VaxSIPUserAgentSDK
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit MainUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, OleCtrls, HelpUnit, VAXSIPUSERAGENTOCXLib_TLB,
  ExtCtrls, MMSystem;

type
   TMainForm = class(TForm)
    GroupBox1: TGroupBox;
    EditLoginId: TEdit;
    EditLoginPwd: TEdit;
    EditSIPProxy: TEdit;
    EditOutboundProxy: TEdit;
    
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    BtnInit: TButton;
    EditPhoneNo: TEdit;
    BtnDial1: TButton;
    BtnDial2: TButton;
    BtnDial3: TButton;
    BtnDial4: TButton;
    BtnDial5: TButton;
    BtnDial6: TButton;
    BtnDial7: TButton;
    BtnDial8: TButton;
    BtnDial9: TButton;
    BtnDialStar: TButton;
    BtnDial0: TButton;
    BtnDialNo: TButton;
    GroupBox2: TGroupBox;
    BtnAcceptCall: TButton;
    BtnDial: TButton;
    BtnHangUp: TButton;
    GroupBoxVolume: TGroupBox;
    LabelSpeaker: TLabel;
    Label5: TLabel;
    TrackBarSpkVol: TTrackBar;
    CheckBoxSpkMute: TCheckBox;
    GroupBoxLine: TGroupBox;
    CheckBoxMuteMic: TCheckBox;
    TrackBarMicVol: TTrackBar;
    GroupBox3: TGroupBox;
    BtnRejectCall: TButton;
    GroupBox4: TGroupBox;
    Label7: TLabel;
    Label8: TLabel;
    GroupBox5: TGroupBox;
    GroupBox6: TGroupBox;
    GroupBox7: TGroupBox;
    Label10: TLabel;
    CheckBoxStartRecording: TCheckBox;
    BtnResetBuffer: TButton;
    BtnSave: TButton;
    EditRecordFileName: TEdit;
    CheckEchoCancel: TCheckBox;
    CheckMicBoost: TCheckBox;
    CheckDonotDisturb: TCheckBox;
    CheckGSM610: TCheckBox;
    CheckiLBC: TCheckBox;
    CheckG711A: TCheckBox;
    CheckG711U: TCheckBox;
    EditTotalLines: TEdit;
    Label11: TLabel;
    CheckBoxEnableSoundDevice: TCheckBox;
    ComboBoxDial: TComboBox;
    Label12: TLabel;
    BtnHold: TButton;
    BtnUnhold: TButton;
    ListBoxIncomingCall: TListBox;
    Label13: TLabel;
    ComboBoxIncomingCall: TComboBox;
    CheckBoxRingTone: TCheckBox;
    ListBoxIcomingCallId: TListBox;
    Label14: TLabel;
    ComboBoxRecord: TComboBox;
    GroupBox8: TGroupBox;
    Label15: TLabel;
    Label16: TLabel;
    CheckBoxPlayListen: TCheckBox;
    BtnPlayWaveStart: TButton;
    BtnOpenPlayWave: TButton;
    EditPlayFileName: TEdit;
    ComboBoxPlayWave: TComboBox;
    BtnPlayWaveRewind: TButton;
    BtnPlayWaveForward: TButton;
    BtnPlayWavePause: TButton;
    BtnPlayWaveStop: TButton;
    BtnMoreHelp: TButton;
    CheckBoxAGC: TCheckBox;
    GroupBox9: TGroupBox;
    Label9: TLabel;
    Label17: TLabel;
    BtnTransferCall: TButton;
    EditTransferNo: TEdit;
    ComboBoxTransferCall: TComboBox;
    GroupBox10: TGroupBox;
    ListStatusLog: TListBox;
    Button10: TButton;
    TimerTick: TTimer;
    SpkProgBar: TProgressBar;
    MicProgBar: TProgressBar;
    Label6: TLabel;
    Label18: TLabel;
    TimerProgress: TTimer;
    Label19: TLabel;
    EditDisplayName: TEdit;
    Label20: TLabel;
    Label21: TLabel;
    Label22: TLabel;
    ListViewLineStatus: TListView;
    CheckBoxRegisterToProxy: TCheckBox;
    GroupBox11: TGroupBox;
    GroupBox12: TGroupBox;
    ListAudioOut: TListBox;
    ListAudioIn: TListBox;
    VaxSIPUserAgentOCX: TVaxSIPUserAgentOCX;
    function InitVaxObject() : WordBool;
    function OpenLines() : WordBool;
    procedure FillComboBoxes();
    procedure ErrorMessages();
    procedure TrackBarSpkVolChange(Sender: TObject);
    procedure TrackBarMicVolChange(Sender: TObject);
    procedure BtnInitClick(Sender: TObject);
    procedure BtnDial1Click(Sender: TObject);
    procedure BtnDial2Click(Sender: TObject);
    procedure BtnDial3Click(Sender: TObject);
    procedure BtnDial4Click(Sender: TObject);
    procedure BtnDial5Click(Sender: TObject);
    procedure BtnDial6Click(Sender: TObject);
    procedure BtnDial7Click(Sender: TObject);
    procedure BtnDial8Click(Sender: TObject);
    procedure BtnDial9Click(Sender: TObject);
    procedure BtnDialStarClick(Sender: TObject);
    procedure BtnDial0Click(Sender: TObject);
    procedure BtnDialNoClick(Sender: TObject);
    procedure BtnDialClick(Sender: TObject);
    procedure BtnHangUpClick(Sender: TObject);
    procedure BtnAcceptCallClick(Sender: TObject);
    procedure BtnRejectCallClick(Sender: TObject);
    procedure BtnClearClick(Sender: TObject);
    procedure BtnSaveClick(Sender: TObject);
    procedure CheckBoxStartRecordingClick(Sender: TObject);
    procedure BtnResetBufferClick(Sender: TObject);
    procedure CheckBoxSpkMuteClick(Sender: TObject);
    procedure CheckBoxMuteMicClick(Sender: TObject);
    procedure AddToStatusLog(LogText : String);
    function GetCodecName(CodecNo : Integer) : String;

    procedure UpdateListAudioIn();
    procedure UpdateListAudioOut();

    function GetSelectedAudioOut() : Integer;
    function GetSelectedAudioIn()  : Integer;
    
    procedure VaxSIPUserAgentOCXFailToRegister(Sender: TObject);
    procedure VaxSIPUserAgentOCXFailToUnRegister(Sender: TObject);
    procedure VaxSIPUserAgentOCXSuccessToUnRegister(Sender: TObject);

    procedure CheckEchoCancelClick(Sender: TObject);
    procedure CheckMicBoostClick(Sender: TObject);
    procedure CheckDonotDisturbClick(Sender: TObject);
    procedure CheckGSM610Click(Sender: TObject);
    procedure CheckiLBCClick(Sender: TObject);
    procedure CheckG711AClick(Sender: TObject);
    procedure CheckG711UClick(Sender: TObject);
    procedure VaxSIPUserAgentOCXSuccessToRegister(Sender: TObject);
    procedure BtnHoldClick(Sender: TObject);
    procedure BtnUnholdClick(Sender: TObject);
    procedure ComboBoxRecordChange(Sender: TObject);
    procedure BtnOpenPlayWaveClick(Sender: TObject);
    procedure BtnPlayWaveStartClick(Sender: TObject);
    procedure BtnPlayWaveRewindClick(Sender: TObject);
    procedure BtnPlayWaveForwardClick(Sender: TObject);
    procedure BtnPlayWavePauseClick(Sender: TObject);
    procedure BtnPlayWaveStopClick(Sender: TObject);
    procedure BtnTransferCallClick(Sender: TObject);
    procedure TimerTickTimer(Sender: TObject);
    procedure VaxSIPUserAgentOCXCallTransferAccepted(ASender: TObject;
      LineNo: Integer);
    procedure VaxSIPUserAgentOCXConnecting(ASender: TObject;
      LineNo: Integer);
    procedure VaxSIPUserAgentOCXDisconnectCall(ASender: TObject;
      LineNo: Integer);
    
    procedure VaxSIPUserAgentOCXFailToConnect(ASender: TObject;
      LineNo: Integer);

    procedure VaxSIPUserAgentOCXGeneralFailureResponse(ASender: TObject;
      LineNo, StatusCode: Integer; const ReasonPhrase: WideString);
    procedure VaxSIPUserAgentOCXProvisionalResponse(ASender: TObject;
      LineNo, StatusCode: Integer; const ReasonPhrase: WideString);
    procedure VaxSIPUserAgentOCXRedirectionResponse(ASender: TObject;
      LineNo, StatusCode: Integer; const ReasonPhrase,
      Contact: WideString);
    procedure VaxSIPUserAgentOCXRequestFailureResponse(ASender: TObject;
      LineNo, StatusCode: Integer; const ReasonPhrase: WideString);
    procedure VaxSIPUserAgentOCXServerFailureResponse(ASender: TObject;
      LineNo, StatusCode: Integer; const ReasonPhrase: WideString);
    
    procedure VaxSIPUserAgentOCXIncomingCallRingingStart(ASender: TObject;
      const CallId: WideString);
    procedure VaxSIPUserAgentOCXIncomingCallRingingStop(ASender: TObject;
      const CallId: WideString);
    procedure VaxSIPUserAgentOCXPlayWaveDone(ASender: TObject;
      LineNo: Integer);

    procedure VaxSIPUserAgentOCXTryingToRegister(Sender: TObject);

    procedure VaxSIPUserAgentOCXTryingToUnRegister(Sender: TObject);
    procedure CheckBoxRingToneClick(Sender: TObject);
    procedure BtnMoreHelpClick(Sender: TObject);
    procedure VaxSIPUserAgentOCXDTMFDigit(ASender: TObject;
      LineNo: Integer; const Digit: WideString);
    procedure VaxSIPUserAgentOCXIncomingCall(ASender: TObject;
      const CallId, DisplayName, UserName, FromURI, ToURI: WideString);
    procedure VaxSIPUserAgentOCXSuccessToConnect(ASender: TObject;
      LineNo: Integer; const ToRTPIP: WideString; ToRTPPort: Integer);

    procedure FormCreate(Sender: TObject);
    procedure TimerProgressTimer(Sender: TObject);
    procedure VaxSIPUserAgentOCXFailToReRegister(Sender: TObject);
    procedure VaxSIPUserAgentOCXSuccessToReRegister(Sender: TObject);
    procedure VaxSIPUserAgentOCXTryingToReRegister(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

procedure TMainForm.ErrorMessages();
var
  ErrorCode : DWORD;
begin

  ErrorCode :=  VaxSIPUserAgentOCX.GetVaxObjectError();

  case ErrorCode of
     10: application.MessageBox('You are not Online, please click the ''Online'' button first.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     11: application.MessageBox('Cann''t open local communication port.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     12: application.MessageBox('License Key is not valid.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     13: application.MessageBox('Fail to initialize VaxVoIP task window.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     14: application.MessageBox('Cann''t access Input/Mic device or device is already in use.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     15: application.MessageBox('Cann''t access Output/Speaker device or device is already in use.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     16: application.MessageBox('Input/Mic device is not open.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     17: application.MessageBox('Output/Speaker device is not open.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     18: application.MessageBox('Your sound device does not support mic volume.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     19: application.MessageBox('Your sound device does not support speaker volume.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     20: application.MessageBox('Recording media initialization fail.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     21: application.MessageBox('Cann''t open the wave file.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     22: application.MessageBox('Provided SIP URI is not valid.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     23: application.MessageBox('Codec is not supported.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     24: application.MessageBox('Error to create SDP (Session Description Protocol) request.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     25: application.MessageBox('Error to create CONNECTION request. Please check the provided SIP URI is valid.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     26: application.MessageBox('Error to create REGISTER request. Please check the provided SIP URI is valid.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     27: application.MessageBox('Error to create UN-REGISTER request. Please check the provided SIP URI is valid.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     28: application.MessageBox('Error to create DISCONNECT request.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     29: application.MessageBox('Line No is not valid.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     30: application.MessageBox('Line is already busy.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     31: application.MessageBox('Line is not open.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     32: application.MessageBox('Invalid Call-Id.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     33: application.MessageBox('Provided value is not valid.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     34: application.MessageBox('Selected line is not in voice session.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     35: application.MessageBox('Fail to read wave file.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     36: application.MessageBox('Fail to write wave file.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     37: application.MessageBox('Unsupported wave file format.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
     
   end;
end;

procedure TMainForm.TrackBarSpkVolChange(Sender: TObject);
begin
    {***************************************************************
     SetSpkVolume method requires Volume value from 0 to 255 range
     but the slider range is 0 to 10, so we multiply the slider value
     to 25 to get the required value to pass to SetSpkVolume method

	For more detail, please see the method details document
   *****************************************************************}

   VaxSIPUserAgentOCX.SetSpkVolume(TrackBarSpkVol.Position * 25);

end;

procedure TMainForm.TrackBarMicVolChange(Sender: TObject);
begin
     {***************************************************************
     SetMicVolume method requires Volume value from 0 to 255 range    
     but the slider range is 0 to 10, so we multiply the slider value
     to 25 to get the required value to pass to SetMicVolume method

         For more detail, please see the method details document
   *****************************************************************}

   VaxSIPUserAgentOCX.SetMicVolume(TrackBarMicVol.Position * 25);
end;

function TMainForm.InitVaxObject() : WordBool;
var
MyIP : string;
FromURI : string;
ListenPort : Integer;
RetValue : WordBool;
Begin

   {****** Constructing SIP From URI for IP Telephony *******}
   if EditDisplayName.Text = ''  then
    FromURI := EditLoginId.Text + ' <sip:' + EditLoginId.Text + '@' + EditSIPProxy.Text + '>'
   else
    FromURI := EditDisplayName.Text + ' <sip:' + EditLoginId.Text + '@' + EditSIPProxy.Text + '>';

   {********************************************************************
      Listen Port: default SIP port 5060.
        SIP Proxy: SIP Proxy IP or FQDN provided by your service provider.
    OutboundProxy: SIP outbound/NAT proxy IP or FQDN provided by your
                   service provider to use SIP phone behind the NAT.

   *********************************************************************}

   MyIP := VaxSIPUserAgentOCX.GetMyIP();

   RetValue := True;

   for ListenPort := 5060 to 7000 do
   Begin

      If False = VaxSIPUserAgentOCX.Initialize(False, MyIP, ListenPort, FromURI, EditOutBoundProxy.Text, EditSIPProxy.Text, EditLoginId.Text, EditLoginPwd.Text, CheckBoxEnableSoundDevice.Checked, StrToInt(EditTotalLines.Text)) Then
      begin
        if VaxSIPUserAgentOCX.GetVaxObjectError() <>  11 then
        begin
          ErrorMessages();
          RetValue := False;
          break;
        end
      end
      else
      begin
          break;
      end;
   end;

   If ListenPort >= 7000 Then
   begin
        application.MessageBox('Cann''t open SIP communication port.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
        RetValue := False;
   end;

  Result := RetValue;

end;

function TMainForm.OpenLines() : WordBool;
var
MyIP : string;
PortRTP : Integer;
LineNo : Integer;
RetValue : WordBool;
ErrorCount : Integer;
Begin

   MyIP := VaxSIPUserAgentOCX.GetMyIP();

   PortRTP := 7000;
   LineNo  := 0;
   ErrorCount := 0;
   RetValue := True;

   while LineNo < StrToInt(EditTotalLines.Text) do
   Begin

      If VaxSIPUserAgentOCX.OpenLine(LineNo, False, MyIP, PortRTP) = False Then
      begin

        if VaxSIPUserAgentOCX.GetVaxObjectError() =  11 then
          begin
            ErrorCount := ErrorCount + 1;
            LineNo := LineNo - 1;
          end
          else
          begin
            ErrorMessages();
            RetValue := False;
            break;
        end;

      end;

      LineNo  := LineNo + 1;
      PortRTP := PortRTP + 2;  // It is importent to increament RTP Listen Port by 2

      If ErrorCount >= (StrToInt(EditTotalLines.Text) + 1000) Then
      begin
        application.MessageBox('Unable to open RTP communication port.', 'VaxVoIP SDK', MB_ICONEXCLAMATION);
        RetValue := False;

⌨️ 快捷键说明

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