Пример #1
0
        /// <summary>
        /// Accepts the received invitation.
        /// </summary>
        public void Accept()
        {
            if (status != P2PSessionStatus.WaitingForLocal)
            {
                Trace.WriteLineIf(Settings.TraceSwitch.TraceWarning,
                                  String.Format("Accept called, but we're not waiting for the local client (State {0})", status), GetType().Name);
            }
            else
            {
                Trace.WriteLineIf(Settings.TraceSwitch.TraceInfo, String.Format("{0} accepted", SessionId), GetType().Name);

                SLPStatusMessage slpMessage = new SLPStatusMessage(RemoteContactEPIDString, 200, "OK");
                slpMessage.Target                  = RemoteContactEPIDString;
                slpMessage.Source                  = LocalContactEPIDString;
                slpMessage.Branch                  = invitation.Branch;
                slpMessage.CallId                  = invitation.CallId;
                slpMessage.CSeq                    = 1;
                slpMessage.ContentType             = "application/x-msnmsgr-sessionreqbody";
                slpMessage.BodyValues["SessionID"] = SessionId.ToString(System.Globalization.CultureInfo.InvariantCulture);

                Send(WrapSLPMessage(slpMessage), delegate(P2PMessage ack)
                {
                    OnActive(EventArgs.Empty);

                    if (p2pApplication != null)
                    {
                        p2pApplication.Start();
                    }
                    else
                    {
                        Trace.WriteLineIf(Settings.TraceSwitch.TraceWarning,
                                          "Unable to start p2p application (null)", GetType().Name);
                    }
                });
            }
        }