예제 #1
0
        private static void SIPTransportRequestReceived(SIPEndPoint localSIPEndPoint, SIPEndPoint remoteEndPoint, SIPRequest sipRequest)
        {
            if (sipRequest.Method == SIPMethodsEnum.INVITE)
            {
                Console.WriteLine("INVITE received from  " + localSIPEndPoint.ToString());
                IPEndPoint sipPhoneEndPoint = SDP.GetSDPRTPEndPoint(sipRequest.Body);

                UASInviteTransaction uasTransaction = m_sipTransport.CreateUASTransaction(sipRequest, remoteEndPoint, localSIPEndPoint, null);
                SIPServerUserAgent   uas            = new SIPServerUserAgent(m_sipTransport, null, null, null, SIPCallDirection.In, null, null, null, uasTransaction);

                SIPResponse tryingResponse = SIPTransport.GetResponse(sipRequest, SIPResponseStatusCodesEnum.Trying, null);
                uasTransaction.SendInformationalResponse(tryingResponse);

                if (m_xmppClient == null)
                {
                    m_xmppClient = new XMPPClient(XMPP_SERVER, XMPP_SERVER_PORT, XMPP_REALM, m_xmppUsername, m_xmppPassword);
                    m_xmppClient.Disconnected += XMPPDisconnected;
                    m_xmppClient.IsBound      += () => { XMPPPlaceCall(uas); };
                    ThreadPool.QueueUserWorkItem(delegate { m_xmppClient.Connect(); });
                }
                else
                {
                    XMPPPlaceCall(uas);
                }
            }
            else if (sipRequest.Method == SIPMethodsEnum.CANCEL)
            {
                UASInviteTransaction inviteTransaction = (UASInviteTransaction)m_sipTransport.GetTransaction(SIPTransaction.GetRequestTransactionId(sipRequest.Header.Vias.TopViaHeader.Branch, SIPMethodsEnum.INVITE));

                if (inviteTransaction != null)
                {
                    Console.WriteLine("Matching CANCEL request received " + sipRequest.URI.ToString() + ".");
                    SIPCancelTransaction cancelTransaction = m_sipTransport.CreateCancelTransaction(sipRequest, remoteEndPoint, localSIPEndPoint, inviteTransaction);
                    cancelTransaction.GotRequest(localSIPEndPoint, remoteEndPoint, sipRequest);
                }
                else
                {
                    Console.WriteLine("No matching transaction was found for CANCEL to " + sipRequest.URI.ToString() + ".");
                    SIPResponse noCallLegResponse = SIPTransport.GetResponse(sipRequest, SIPResponseStatusCodesEnum.CallLegTransactionDoesNotExist, null);
                    m_sipTransport.SendResponse(noCallLegResponse);
                }
            }
            else if (sipRequest.Method == SIPMethodsEnum.BYE)
            {
                Console.WriteLine("BYE request received.");

                if (m_activeCalls.ContainsKey(sipRequest.Header.CallId))
                {
                    SIPResponse okResponse = SIPTransport.GetResponse(sipRequest, SIPResponseStatusCodesEnum.Ok, null);
                    m_sipTransport.SendResponse(okResponse);
                    m_activeCalls[sipRequest.Header.CallId].TerminateXMPPCall();
                    m_activeCalls.Remove(sipRequest.Header.CallId);
                }
                else
                {
                    SIPResponse doesntExistResponse = SIPTransport.GetResponse(sipRequest, SIPResponseStatusCodesEnum.CallLegTransactionDoesNotExist, null);
                    m_sipTransport.SendResponse(doesntExistResponse);
                }
            }
        }
예제 #2
0
        public void TestInvite()
        {
            XMPPClient ObjXmppClient = new XMPPClient();

            //initializing the xmpp client with credentials
            ObjXmppClient.JID            = "*****@*****.**";
            ObjXmppClient.Password       = "******";
            ObjXmppClient.Server         = "54.173.99.54";
            ObjXmppClient.AutoReconnect  = true;
            ObjXmppClient.RetrieveRoster = true;
            ObjXmppClient.PresenceStatus = new PresenceStatus()
            {
                PresenceType = PresenceType.available, IsOnline = true
            };
            ObjXmppClient.AutoAcceptPresenceSubscribe = true;
            ObjXmppClient.AttemptReconnectOnBadPing   = true;
            //
            XMPPConnection ObjXmppCon = new XMPPConnection(ObjXmppClient);

            ObjXmppCon = new XMPPConnection(ObjXmppClient);
            ObjXmppCon.Connect();
            ObjXmppClient.Connect();
            //muc manager test
            MucManager mucManager = new MucManager(ObjXmppClient);
            JID        roomJID    = "*****@*****.**";

            mucManager.EnterRoom(roomJID, "XMPPTestNickName");
            JID to = "*****@*****.**";

            mucManager.DirectInvite(to, roomJID);
        }
예제 #3
0
파일: App.xaml.cs 프로젝트: quangfox/Voip
        void DeviceNetworkInformation_NetworkAvailabilityChanged(object sender, NetworkNotificationEventArgs e)
        {
            switch (e.NotificationType)
            {
            case NetworkNotificationType.InterfaceConnected:
                LogMessage("Network", SocketServer.MessageImportance.Medium, "Network was Connected at {0}\r\n", DateTime.Now);

                if ((XMPPClient != null) && (XMPPClient.XMPPState == XMPPState.Unknown) && (XMPPClient.XMPPAccount != null) && (XMPPClient.XMPPAccount.HaveSuccessfullyConnectedAndAuthenticated == true))
                {
                    XMPPClient.Connect(this);
                }
                break;

            case NetworkNotificationType.InterfaceDisconnected:
                LogMessage("Network", SocketServer.MessageImportance.Medium, "Network was Disconnected at {0}\r\n", DateTime.Now);
                if ((XMPPClient != null) && (XMPPClient.XMPPState != XMPPState.Unknown))
                {
                    XMPPClient.Disconnect();
                    XMPPClient.Connect(this);
                    //MessageBox.Show("Network connection lost");
                }
                break;

            case NetworkNotificationType.CharacteristicUpdate:

                break;

            default:

                break;
            }
        }
예제 #4
0
        public void Connect(string username, string password, Constants.Server.Region region)
        {
            if (string.IsNullOrWhiteSpace(username) || string.IsNullOrWhiteSpace(password) || region == Constants.Server.Region.UNK)
            {
                throw new ArgumentException("Username, password or region is emtpy");
            }

            var address = _serverAddresses.Single(o => o.Key == region).Value;

            XMPPClient.UserName = username;
            XMPPClient.Password = _passPrefix + password;
            XMPPClient.Server   = address;
            XMPPClient.Domain   = _domain;
            XMPPClient.Resource = "xiff";
            XMPPClient.Port     = 5223;

            XMPPClient.UseTLS = true;

            XMPPClient.UseOldStyleTLS = true;

            XMPPClient.AutoAcceptPresenceSubscribe  = false;
            XMPPClient.AutomaticallyDownloadAvatars = false;
            XMPPClient.RetrieveRoster = true;

            XMPPClient.OnStateChanged        += XMPPClient_OnStateChanged;
            XMPPClient.OnRetrievedRoster     += XMPPClient_OnRetrievedRoster;
            XMPPClient.OnNewConversationItem += XMPPClient_OnNewConversationItem;
            XMPPClient.Connect();
        }
예제 #5
0
        protected override void OnStart(string[] args)
        {
            base.OnStart(args);
            var client = new XMPPClient("etienne.pierrot", "fakepass");
            client.Connect();
            ObjectFactory.Configure(init => init.For<XMPPClient>().Singleton().Use(client));
            TimerCallback timerDelegate = new TimerCallback(ChangeStatus);

            // create timer and attach our method delegate to it
            _serviceTimer =new Timer(timerDelegate, null, 1000, 5000);
        }
예제 #6
0
        public void Call(SIPCallDescriptor sipCallDescriptor)
        {
            CallDescriptor         = sipCallDescriptor;
            m_xmppClient           = new XMPPClient("talk.google.com", 5222, "google.com", null, null);
            m_xmppClient.IsBound  += IsBound;
            m_xmppClient.Answered += Answered;

            IPEndPoint sdpEndPoint = SDP.GetSDPRTPEndPoint(CallDescriptor.Content);

            if (IPSocket.IsPrivateAddress(sdpEndPoint.Address.ToString()))
            {
                bool wasSDPMangled;
                CallDescriptor.Content = SIPPacketMangler.MangleSDP(CallDescriptor.Content, CallDescriptor.MangleIPAddress.ToString(), out wasSDPMangled);
            }

            ThreadPool.QueueUserWorkItem(delegate { m_xmppClient.Connect(); });
        }
예제 #7
0
        static void Main(string[] args)
        {
            try
            {
                //if (args == null || args.Count() == 0)
                //{
                //    Console.WriteLine(USAGE_STRING);
                //}
                //else
                //{
                //    bool validArgs = ParseArgs(args);

                //    if (validArgs)
                //    {
                        Console.WriteLine("XMPP Test Client:");

                        m_xmppClient = new XMPPClient(XMPP_SERVER, XMPP_SERVER_PORT, XMPP_REALM, m_xmppUsername, m_xmppPassword);
                        m_xmppClient.Disconnected += XMPPDisconnected;
                        m_xmppClient.IsBound += () =>
                        {
                            Console.WriteLine("XMPP client is bound.");
                            //var rosterRequest = m_xmppClient.GetRosterRequest();
                            //rosterRequest.GetRoster();

                            var presenceRequest = m_xmppClient.GetPresenceRequest();
                            //presenceRequest.Subscribe();
                            presenceRequest.Notify();
                            presenceRequest.NotifySupportedFeatures();

                            //var discoveryRequest = m_xmppClient.GetServiceDiscoveryRequest("*****@*****.**");
                            //discoveryRequest.Send();
                            //discoveryRequest.SendServerDiscoveryQuery();
                            //discoveryRequest.SendJingleInfoQuery();

                            var jingleRequest = m_xmppClient.GetJingleRequest("[email protected]/TalkGadgetE90A6B3B");
                            //var jingleRequest = m_xmppClient.GetJingleRequest("*****@*****.**");
                            jingleRequest.Initiate();

                            //m_xmppClient.SendMessage("*****@*****.**", "hi");
                            //XMPPPhoneSession call = m_xmppClient.GetPhoneSession();
                            ////call.PlaceCall("*****@*****.**", new SDP()
                            //call.PlaceCall("*****@*****.**", new SDP()
                            //{
                            //    Address = "127.0.0.1",
                            //    Username = "******",
                            //    SessionId = Crypto.GetRandomString(5),
                            //    AnnouncementVersion = Crypto.GetRandomInt(5),
                            //    Connection = new SDPConnectionInformation("127.0.0.1"),
                            //    Timing = "0 0",
                            //    Media = new List<SDPMediaAnnouncement>()
                            //    {
                            //        new SDPMediaAnnouncement(0)
                            //        {
                            //            MediaFormats = new List<SDPMediaFormat>(){ new SDPMediaFormat((int)SDPMediaFormatsEnum.PCMU) }
                            //        }
                            //    }
                            //});
                        };
                        ThreadPool.QueueUserWorkItem(delegate { m_xmppClient.Connect(); });

                        ManualResetEvent mre = new ManualResetEvent(false);
                        mre.WaitOne();
                    //}
                //}
            }
            catch (Exception excp)
            {
                Console.WriteLine("Exception Main. " + excp.Message);
            }
            finally
            {
                Console.WriteLine("press any key to exit...");
                Console.Read();
            }
        }
예제 #8
0
파일: Program.cs 프로젝트: xycui/sipsorcery
        static void Main(string[] args)
        {
            try
            {
                //if (args == null || args.Count() == 0)
                //{
                //    Console.WriteLine(USAGE_STRING);
                //}
                //else
                //{
                //    bool validArgs = ParseArgs(args);

                //    if (validArgs)
                //    {
                Console.WriteLine("XMPP Test Client:");

                m_xmppClient = new XMPPClient(XMPP_SERVER, XMPP_SERVER_PORT, XMPP_REALM, m_xmppUsername, m_xmppPassword);
                m_xmppClient.Disconnected += XMPPDisconnected;
                m_xmppClient.IsBound      += () =>
                {
                    Console.WriteLine("XMPP client is bound.");
                    //var rosterRequest = m_xmppClient.GetRosterRequest();
                    //rosterRequest.GetRoster();

                    var presenceRequest = m_xmppClient.GetPresenceRequest();
                    //presenceRequest.Subscribe();
                    presenceRequest.Notify();
                    presenceRequest.NotifySupportedFeatures();

                    //var discoveryRequest = m_xmppClient.GetServiceDiscoveryRequest("*****@*****.**");
                    //discoveryRequest.Send();
                    //discoveryRequest.SendServerDiscoveryQuery();
                    //discoveryRequest.SendJingleInfoQuery();

                    var jingleRequest = m_xmppClient.GetJingleRequest("[email protected]/TalkGadgetE90A6B3B");
                    //var jingleRequest = m_xmppClient.GetJingleRequest("*****@*****.**");
                    jingleRequest.Initiate();

                    //m_xmppClient.SendMessage("*****@*****.**", "hi");
                    //XMPPPhoneSession call = m_xmppClient.GetPhoneSession();
                    ////call.PlaceCall("*****@*****.**", new SDP()
                    //call.PlaceCall("*****@*****.**", new SDP()
                    //{
                    //    Address = "127.0.0.1",
                    //    Username = "******",
                    //    SessionId = Crypto.GetRandomString(5),
                    //    AnnouncementVersion = Crypto.GetRandomInt(5),
                    //    Connection = new SDPConnectionInformation("127.0.0.1"),
                    //    Timing = "0 0",
                    //    Media = new List<SDPMediaAnnouncement>()
                    //    {
                    //        new SDPMediaAnnouncement(0)
                    //        {
                    //            MediaFormats = new List<SDPMediaFormat>(){ new SDPMediaFormat((int)SDPMediaFormatsEnum.PCMU) }
                    //        }
                    //    }
                    //});
                };
                ThreadPool.QueueUserWorkItem(delegate { m_xmppClient.Connect(); });

                ManualResetEvent mre = new ManualResetEvent(false);
                mre.WaitOne();
                //}
                //}
            }
            catch (Exception excp)
            {
                Console.WriteLine("Exception Main. " + excp.Message);
            }
            finally
            {
                Console.WriteLine("press any key to exit...");
                Console.Read();
            }
        }
예제 #9
0
 /// <summary>
 /// Establishes the XMPP connection with the Google Voice gateway. Once the connection is bound it can be used
 /// to establish calls over.
 /// </summary>
 private void BindClient()
 {
     logger.Debug("Commencing bind on XMPP client.");
     m_xmppClient.Connect();
 }