Example #1
0
        static int DoRecord(string to, string file)
        {
            // Example cmd line: call [email protected]
            OpalMessageRef command = new OpalMessageRef();
            OpalMessageRef response;

            Console.WriteLine("Calling {0}", to);

            command.SetMessageType(Opal_API.OpalMessageType.OpalCmdSetUpCall);
            OpalParamSetUpCallRef m_callSetUp = command.GetCallSetUp();

            m_callSetUp.PartyB = to;
            if ((response = MySendCommand(command, "Could not make call")) == null)
            {
                return(0);
            }

            currentCallToken = response.GetCallSetUp().CallToken;

            Console.WriteLine("Recording {0}", file);

            command.SetMessageType(Opal_API.OpalMessageType.OpalCmdStartRecording);
            OpalParamRecordingRef m_recording = command.GetRecording();

            m_recording.CallToken = currentCallToken;
            m_recording.File      = file;
            m_recording.Channels  = 2;

            if ((response = MySendCommand(command, "Could not start recording")) == null)
            {
                return(0);
            }

            return(1);
        }
Example #2
0
        static int DoPlay(string to, string file)
        {
            // Example cmd line: call [email protected]
            OpalMessageRef command = new OpalMessageRef();
            OpalMessageRef response;

            Console.WriteLine("Playing {0} to {1}", file, to);

            playScript = String.Format("ivr:<?xml version=\"1.0\"?><vxml version=\"1.0\"><form id=\"PlayFile\">" +
                                       "<audio src=\"{0}\"/></form></vxml>", file);

            command.SetMessageType(Opal_API.OpalMessageType.OpalCmdSetUpCall);
            OpalParamSetUpCallRef m_callSetUp = command.GetCallSetUp();

            m_callSetUp.PartyB = to;

            if ((response = MySendCommand(command, "Could not make call")) == null)
            {
                return(0);
            }

            currentCallToken = response.GetCallSetUp().CallToken;

            return(1);
        }
Example #3
0
        static int DoRegister(string aor, string pwd)
        {
            // Example cmd line: register [email protected] secret
            OpalMessageRef command = new OpalMessageRef();
            OpalMessageRef response;

            Console.WriteLine("Registering {0}", aor);

            command.SetMessageType(Opal_API.OpalMessageType.OpalCmdRegistration);
            OpalParamRegistrationRef m_registrationInfo = command.GetRegistrationInfo();

            if (!aor.Contains(':'))
            {
                m_registrationInfo.Protocol   = "h323";
                m_registrationInfo.Identifier = aor;
            }
            else
            {
                m_registrationInfo.Protocol   = aor;
                m_registrationInfo.Identifier = aor.Substring(aor.IndexOf(':') + 1);
            }

            m_registrationInfo.Password   = pwd;
            m_registrationInfo.TimeToLive = 300;

            if ((response = MySendCommand(command, "Could not register endpoint")) == null)
            {
                return(0);
            }

            return(1);
        }
Example #4
0
        static int DoCall(string from, string to)
        {
            // Example cmd line: call [email protected]
            OpalMessageRef command  = new OpalMessageRef();
            OpalMessageRef response = new OpalMessageRef();

            Console.WriteLine("Calling {0}", to);

            command.SetMessageType(Opal_API.OpalMessageType.OpalCmdSetUpCall);
            OpalParamSetUpCallRef m_callSetUp = command.GetCallSetUp();

            m_callSetUp.PartyA = from;
            m_callSetUp.PartyB = to;

            OpalParamProtocolRef overrides = new OpalParamProtocolRef(new Opal_API.OpalParamProtocol());

            overrides.DisplayName = "Test Calling Party";
            m_callSetUp.Overrides = overrides.Param;

            if ((response = MySendCommand(command, "Could not make call")) == null)
            {
                return(0);
            }

            m_callSetUp      = response.GetCallSetUp();
            currentCallToken = m_callSetUp.CallToken;

            return(1);
        }
Example #5
0
        static OpalMessageRef MySendCommand(OpalMessageRef command, string errorMessage)
        {
            OpalMessageRef response = new OpalMessageRef();

            if (!context.SendMessage(command, response))
            {
                return(null);
            }

            if (response.GetMessageType() != Opal_API.OpalMessageType.OpalIndCommandError)
            {
                return(response);
            }

            if (response.GetCommandError() == null || response.GetCommandError() == "\0")
            {
                Console.WriteLine("{0}.\n", errorMessage);
            }
            else
            {
                Console.WriteLine("{0}: {1}\n", errorMessage, response.GetCommandError());
            }

            return(null);
        }
Example #6
0
        static int DoTransfer(string to)
        {
            // Example cmd line: transfer [email protected] [email protected]
            OpalMessageRef command = new OpalMessageRef();
            OpalMessageRef response;

            Console.WriteLine("Transferring to {0}", to);

            command.SetMessageType(Opal_API.OpalMessageType.OpalCmdTransferCall);
            OpalParamSetUpCallRef m_callSetup = command.GetCallSetUp();

            m_callSetup.PartyB    = to;
            m_callSetup.CallToken = currentCallToken;

            if ((response = MySendCommand(command, "Could not transfer call")) == null)
            {
                return(0);
            }

            return(1);
        }
Example #7
0
        static int DoHold()
        {
            // Example cmd line: hold [email protected]
            OpalMessageRef command = new OpalMessageRef();
            OpalMessageRef response;

            Console.WriteLine("Hold");

            command.SetMessageType(Opal_API.OpalMessageType.OpalCmdHoldCall);
            command.SetCallToken(currentCallToken);

            if ((response = MySendCommand(command, "Could not hold call")) == null)
            {
                return(0);
            }

            heldCallToken    = currentCallToken;
            currentCallToken = null;

            return(1);
        }
Example #8
0
        static int DoMute(bool on)
        {
            // Example cmd line: mute [email protected]
            OpalMessageRef command  = new OpalMessageRef();
            OpalMessageRef response = new OpalMessageRef();

            Console.WriteLine("Mute {0}", on ? "on" : "off");

            command.SetMessageType(Opal_API.OpalMessageType.OpalCmdMediaStream);
            OpalStatusMediaStreamRef m_mediaStream = command.GetMediaStream();

            m_mediaStream.CallToken = currentCallToken;
            m_mediaStream.Type      = "audio out";
            m_mediaStream.State     = on ? Opal_API.OpalMediaStates.OpalMediaStatePause : Opal_API.OpalMediaStates.OpalMediaStateResume;
            if ((response = MySendCommand(command, "Could not mute call")) == null)
            {
                return(0);
            }

            return(1);
        }
Example #9
0
        static int DoSubscribe(string package, string aor, string from)
        {
            // Example cmd line: subscribe "dialog;sla;ma" [email protected] [email protected]
            OpalMessageRef command = new OpalMessageRef();
            OpalMessageRef response;

            Console.WriteLine("Susbcribing {0}", aor);

            command.SetMessageType(Opal_API.OpalMessageType.OpalCmdRegistration);
            OpalParamRegistrationRef m_registrationInfo = command.GetRegistrationInfo();

            m_registrationInfo.Protocol     = "sip";
            m_registrationInfo.Identifier   = aor;
            m_registrationInfo.HostName     = from;
            m_registrationInfo.EventPackage = package;
            m_registrationInfo.TimeToLive   = 300;

            if ((response = MySendCommand(command, "Could not subscribe")) == null)
            {
                return(0);
            }

            return(1);
        }
Example #10
0
        static void HandleMessages(uint timeout)
        {
            OpalMessageRef command = new OpalMessageRef();
            OpalMessageRef response;
            OpalMessageRef message = new OpalMessageRef();

            while (context.GetMessage(message, timeout))
            {
                switch (message.GetMessageType())
                {
                case Opal_API.OpalMessageType.OpalIndRegistration:
                    OpalStatusRegistrationRef m_param = message.GetRegistrationStatus();

                    switch (m_param.Status)
                    {
                    case Opal_API.OpalRegistrationStates.OpalRegisterRetrying:
                        Console.WriteLine("Trying registration to {0}.", m_param.ServerName);
                        break;

                    case Opal_API.OpalRegistrationStates.OpalRegisterRestored:
                        Console.WriteLine("Registration of {0} restored.", m_param.ServerName);
                        break;

                    case Opal_API.OpalRegistrationStates.OpalRegisterSuccessful:
                        Console.WriteLine("Registration of {0} successful.", m_param.ServerName);
                        break;

                    case Opal_API.OpalRegistrationStates.OpalRegisterRemoved:
                        Console.WriteLine("Unregistered {0}.", m_param.ServerName);
                        break;

                    case Opal_API.OpalRegistrationStates.OpalRegisterFailed:
                        if (m_param.Error == null || m_param.Error.Length == 0)
                        {
                            Console.WriteLine("Registration of {0} failed.", m_param.ServerName);
                        }
                        else
                        {
                            Console.WriteLine("Registration of {0} error: {1}", m_param.ServerName, m_param.Error);
                        }
                        break;
                    }
                    break;

                case Opal_API.OpalMessageType.OpalIndLineAppearance:
                    OpalStatusLineAppearanceRef m_lineStatus = message.GetLineAppearance();
                    switch (m_lineStatus.State)
                    {
                    case Opal_API.OpalLineAppearanceStates.OpalLineIdle:
                        Console.WriteLine("Line {0} available.", m_lineStatus.Line);
                        break;

                    case Opal_API.OpalLineAppearanceStates.OpalLineTrying:
                        Console.WriteLine("Line {0} in use.", m_lineStatus.Line);
                        break;

                    case Opal_API.OpalLineAppearanceStates.OpalLineProceeding:
                        Console.WriteLine("Line {0} calling.", m_lineStatus.Line);
                        break;

                    case Opal_API.OpalLineAppearanceStates.OpalLineRinging:
                        Console.WriteLine("Line {0} ringing.", m_lineStatus.Line);
                        break;

                    case Opal_API.OpalLineAppearanceStates.OpalLineConnected:
                        Console.WriteLine("Line {0} connected.", m_lineStatus.Line);
                        break;

                    case Opal_API.OpalLineAppearanceStates.OpalLineSubcribed:
                        Console.WriteLine("Line {0} subscription successful.", m_lineStatus.Line);
                        break;

                    case Opal_API.OpalLineAppearanceStates.OpalLineUnsubcribed:
                        Console.WriteLine("Unsubscribed line {0}.", m_lineStatus.Line);
                        break;
                    }
                    break;

                case Opal_API.OpalMessageType.OpalIndIncomingCall:
                    OpalStatusIncomingCallRef incomingCall = message.GetIncomingCall();

                    Console.WriteLine("Incoming call from \"{0}\", \"{1}\" to \"{2}\", handled by \"{3}\".",
                                      incomingCall.RemoteDisplayName,
                                      incomingCall.RemoteAddress,
                                      incomingCall.CalledAddress,
                                      incomingCall.LocalAddress);
                    if (currentCallToken == null)
                    {
                        command = new OpalMessageRef(Opal_API.OpalMessageType.OpalCmdAnswerCall);
                        OpalParamAnswerCallRef answerCall = command.GetAnswerCall();
                        answerCall.CallToken = incomingCall.CallToken;
                        OpalParamProtocolRef overrides = new OpalParamProtocolRef(answerCall.Overrides);
                        overrides.UserName    = "******";
                        overrides.DisplayName = "Test Called Party";
                        answerCall.Overrides  = overrides.Param;

                        MySendCommand(command, "Could not answer call");
                    }
                    else
                    {
                        command = new OpalMessageRef(Opal_API.OpalMessageType.OpalCmdClearCall);
                        OpalParamCallClearedRef   clearCall      = command.GetClearCall();
                        OpalStatusIncomingCallRef m_incomingCall = message.GetIncomingCall();
                        clearCall.CallToken = m_incomingCall.CallToken;
                        clearCall.Reason    = Opal_API.OpalCallEndReason.OpalCallEndedByLocalBusy;
                        MySendCommand(command, "Could not refuse call");
                    }
                    break;

                case Opal_API.OpalMessageType.OpalIndProceeding:
                    Console.WriteLine("Proceeding.");
                    break;

                case Opal_API.OpalMessageType.OpalIndAlerting:
                    Console.WriteLine("Ringing.");
                    break;

                case Opal_API.OpalMessageType.OpalIndEstablished:
                    Console.WriteLine("Established.");

                    if (playScript != null)
                    {
                        Console.WriteLine("Playing {0}", playScript);

                        command = new OpalMessageRef(Opal_API.OpalMessageType.OpalCmdTransferCall);
                        OpalParamSetUpCallRef m_callSetUp = command.GetCallSetUp();
                        m_callSetUp.CallToken = currentCallToken;
                        m_callSetUp.PartyA    = "pc:";
                        m_callSetUp.PartyB    = playScript;
                        MySendCommand(command, "Could not start playing");
                    }
                    break;

                case Opal_API.OpalMessageType.OpalIndMediaStream:
                    OpalStatusMediaStreamRef m_mediaStream = message.GetMediaStream();
                    Console.WriteLine("Media stream {0} {1} using {2}.", m_mediaStream.Type,
                                      m_mediaStream.State == Opal_API.OpalMediaStates.OpalMediaStateOpen ? "opened" : "closed",
                                      m_mediaStream.Format);
                    break;

                case Opal_API.OpalMessageType.OpalIndUserInput:
                    OpalStatusUserInputRef m_userInput = message.GetUserInput();
                    Console.WriteLine("User Input: {0}.", m_userInput.UserInput);
                    break;

                case Opal_API.OpalMessageType.OpalIndCallCleared:
                    OpalStatusCallClearedRef m_callCleared = message.GetCallCleared();
                    if (m_callCleared.Reason == null)
                    {
                        Console.WriteLine("Call cleared.");
                    }
                    else
                    {
                        Console.WriteLine("Call cleared: {0}", m_callCleared.Reason);
                    }
                    break;

                default:
                    break;
                }
            }
        }
Example #11
0
        static int InitialiseOPAL()
        {
            OpalMessageRef command;
            OpalMessageRef response;
            uint           version;

            string OPALOptions = Opal_API.OPAL_PREFIX_H323 + " " +
                                 Opal_API.OPAL_PREFIX_SIP + " " +
                                 Opal_API.OPAL_PREFIX_IAX2 + " " +
#if LOCAL_MEDIA
                                 Opal_API.OPAL_PREFIX_LOCAL +
#else
                                 Opal_API.OPAL_PREFIX_PCSS +
#endif
                                 " " +
                                 Opal_API.OPAL_PREFIX_IVR +
                                 " TraceLevel=4 TraceFile=debugstream";

            ///////////////////////////////////////////////
            // Initialisation

            version = Opal_API.OPAL_C_API_VERSION;

            if (context.Initialise(OPALOptions, version) == version)
            {
                Console.WriteLine("Could not initialise OPAL{0}", Environment.NewLine);
                return(0);
            }

        #if NULL
            // Test shut down and re-initialisation
            context.ShutDown();

            if (context.Initialise(OPALOptions, version) == version)
            {
                Console.WriteLine("Could not reinitialise OPAL{0}", Environment.NewLine);
                return(0);
            }
        #endif

            // General options
            command = new OpalMessageRef(Opal_API.OpalMessageType.OpalCmdSetGeneralParameters);
            //command.m_param.m_general.m_audioRecordDevice = "Camera Microphone (2- Logitech";
            OpalParamGeneralRef m_general = command.GetGeneralParams();

            m_general.AutoRxMedia = m_general.AutoTxMedia = "audio";
            m_general.StunServer  = "stun.voxgratia.org";
            m_general.MediaMask   = "RFC4175*";

#if LOCAL_MEDIA
            m_general.MediaReadData   = MyReadMediaData;
            m_general.MediaWriteData  = MyWriteMediaData;
            m_general.MediaDataHeader = (uint)Opal_API.OpalMediaDataType.OpalMediaDataPayloadOnly;
#endif

            if ((response = MySendCommand(command, "Could not set general options")) == null)
            {
                return(0);
            }

            // Options across all protocols
            command = new OpalMessageRef(Opal_API.OpalMessageType.OpalCmdSetProtocolParameters);
            OpalParamProtocolRef m_protocol = command.GetProtocolParams();

            m_protocol.UserName           = "******";
            m_protocol.DisplayName        = "Robert Jongbloed";
            m_protocol.InterfaceAddresses = "*";

            if ((response = MySendCommand(command, "Could not set protocol options")) == null)
            {
                return(0);
            }

            command    = new OpalMessageRef(Opal_API.OpalMessageType.OpalCmdSetProtocolParameters);
            m_protocol = command.GetProtocolParams();

            m_protocol.Prefix         = "sip";
            m_protocol.DefaultOptions = "PRACK-Mode=0\nInitial-Offer=false";

            if ((response = MySendCommand(command, "Could not set SIP options")) == null)
            {
                return(0);
            }

            return(1);
        }