示例#1
0
            /// <summary>
            /// Call (MSRP, Audio, Video, T.38, ...) events
            /// </summary>
            /// <param name="e"></param>
            /// <returns></returns>
            public override int OnInviteEvent(InviteEvent e)
            {
                tsip_invite_event_type_t type = e.getType();
                short code = e.getCode();
                String phrase = e.getPhrase();
                InviteSession session = e.getSession();

                switch (type)
                {
                    case tsip_invite_event_type_t.tsip_i_newcall:
                        if (session != null) /* As we are not the owner, then the session MUST be null */
                        {
                            LOG.Error("Invalid incoming session");
                            session.hangup(); // To avoid another callback event
                            return -1;
                        }

                        SipMessage message = e.getSipMessage();
                        if (message == null)
                        {
                            LOG.Error("Invalid message");
                            return -1;
                        }
                        twrap_media_type_t sessionType = e.getMediaType();

                        switch (sessionType)
                        {
                            case twrap_media_type_t.twrap_media_msrp:
                                {
                                    if ((session = e.takeMsrpSessionOwnership()) == null)
                                    {
                                        LOG.Error("Failed to take MSRP session ownership");
                                        return -1;
                                    }

                                    MyMsrpSession msrpSession = MyMsrpSession.TakeIncomingSession(this.sipService.SipStack, session as MsrpSession, message);
                                    if (msrpSession == null)
                                    {
                                        LOG.Error("Failed to create new session");
                                        session.hangup();
                                        session.Dispose();
                                        return 0;
                                    }
                                    msrpSession.State = MyInviteSession.InviteState.INCOMING;

                                    InviteEventArgs eargs = new InviteEventArgs(msrpSession.Id, InviteEventTypes.INCOMING, phrase);
                                    eargs.AddExtra(InviteEventArgs.EXTRA_SESSION, msrpSession);
                                    EventHandlerTrigger.TriggerEvent<InviteEventArgs>(this.sipService.onInviteEvent, this.sipService, eargs);
                                    break;
                                }

                            case twrap_media_type_t.twrap_media_audio:
                            case twrap_media_type_t.twrap_media_audiovideo:
                            case twrap_media_type_t.twrap_media_video:
                                {
                                    if ((session = e.takeCallSessionOwnership()) == null)
                                    {
                                        LOG.Error("Failed to take audio/video session ownership");
                                        return -1;
                                    }
                                    MyAVSession avSession = MyAVSession.TakeIncomingSession(this.sipService.SipStack, session as CallSession, sessionType, message);
                                    avSession.State = MyInviteSession.InviteState.INCOMING;

                                    InviteEventArgs eargs = new InviteEventArgs(avSession.Id, InviteEventTypes.INCOMING, phrase);
                                    eargs.AddExtra(InviteEventArgs.EXTRA_SESSION, avSession);
                                    EventHandlerTrigger.TriggerEvent<InviteEventArgs>(this.sipService.onInviteEvent, this.sipService, eargs);
                                    break;
                                }

                            default:
                                LOG.Error("Invalid media type");
                                return 0;

                        }
                        break;

                    case tsip_invite_event_type_t.tsip_ao_request:
                        if (code == 180 && session != null)
                        {
                            EventHandlerTrigger.TriggerEvent<InviteEventArgs>(this.sipService.onInviteEvent, this.sipService,
                                    new InviteEventArgs(session.getId(), InviteEventTypes.RINGING, phrase));
                        }
                        break;

                    case tsip_invite_event_type_t.tsip_i_request:
                    case tsip_invite_event_type_t.tsip_o_ect_ok:
                    case tsip_invite_event_type_t.tsip_o_ect_nok:
                    case tsip_invite_event_type_t.tsip_i_ect:
                        {
                            break;
                        }
                    case tsip_invite_event_type_t.tsip_m_early_media:
                        {
                            EventHandlerTrigger.TriggerEvent<InviteEventArgs>(this.sipService.onInviteEvent, this.sipService,
                                        new InviteEventArgs(session.getId(), InviteEventTypes.EARLY_MEDIA, phrase));
                            break;
                        }
                    case tsip_invite_event_type_t.tsip_m_local_hold_ok:
                        {
                            EventHandlerTrigger.TriggerEvent<InviteEventArgs>(this.sipService.onInviteEvent, this.sipService,
                                            new InviteEventArgs(session.getId(), InviteEventTypes.LOCAL_HOLD_OK, phrase));
                            break;
                        }
                    case tsip_invite_event_type_t.tsip_m_local_hold_nok:
                        {
                            EventHandlerTrigger.TriggerEvent<InviteEventArgs>(this.sipService.onInviteEvent, this.sipService,
                                                new InviteEventArgs(session.getId(), InviteEventTypes.LOCAL_HOLD_NOK, phrase));
                            break;
                        }
                    case tsip_invite_event_type_t.tsip_m_local_resume_ok:
                        {
                            EventHandlerTrigger.TriggerEvent<InviteEventArgs>(this.sipService.onInviteEvent, this.sipService,
                                                    new InviteEventArgs(session.getId(), InviteEventTypes.LOCAL_RESUME_OK, phrase));
                            break;
                        }
                    case tsip_invite_event_type_t.tsip_m_local_resume_nok:
                        {
                            EventHandlerTrigger.TriggerEvent<InviteEventArgs>(this.sipService.onInviteEvent, this.sipService,
                                                        new InviteEventArgs(session.getId(), InviteEventTypes.LOCAL_RESUME_NOK, phrase));
                            break;
                        }
                    case tsip_invite_event_type_t.tsip_m_remote_hold:
                        {
                            EventHandlerTrigger.TriggerEvent<InviteEventArgs>(this.sipService.onInviteEvent, this.sipService,
                                                            new InviteEventArgs(session.getId(), InviteEventTypes.REMOTE_HOLD, phrase));
                            break;
                        }
                    case tsip_invite_event_type_t.tsip_m_remote_resume:
                        {
                            EventHandlerTrigger.TriggerEvent<InviteEventArgs>(this.sipService.onInviteEvent, this.sipService,
                                                                new InviteEventArgs(session.getId(), InviteEventTypes.REMOTE_RESUME, phrase));
                            break;
                        }
                }

                return 0;
            }
示例#2
0
        public override int OnInviteEvent(InviteEvent e)
        {
            tsip_invite_event_type_t type = e.getType();
            InviteSession session = e.getSession();
            SipMessage message = e.getSipMessage();

            switch(type){
                case tsip_invite_event_type_t.tsip_i_newcall:
                    SdpMessage sdp = message.getSdpMessage();

                    if (session != null){
                        Console.WriteLine("ERRRRRRRRRRRORRRR");
                        return 0;
                    }
                    else{
                        switch(e.getMediaType()){
                            case twrap_media_type_t.twrap_media_audio:
                            case twrap_media_type_t.twrap_media_video:
                            case twrap_media_type_t.twrap_media_audiovideo:
                                session = e.takeCallSessionOwnership();
                                break;
                            case twrap_media_type_t.twrap_media_msrp:
                                if ((session = e.takeMsrpSessionOwnership()) != null){
                                    (session as MsrpSession).setCallback(Program.msrpCallback);
                                }
                                break;
                        }
                        if(session != null){
                            ActionConfig actionConfig = new ActionConfig();
                            session.accept(actionConfig);
                            actionConfig.Dispose();
                        }
                    }

                    /*else if ((session = e.takeSessionOwnership()) != null)
                    {
                        SdpMessage sdp = message.getSdpMessage();
                        if (sdp != null)
                        {
                            String fileSelector = sdp.getSdpHeaderAValue("message", "file-selector");
                            Console.WriteLine("file-selector={0}", fileSelector);
                        }

                        ActionConfig actionConfig = new ActionConfig();
                        //actionConfig.setMediaInt(twrap_media_type_t.twrap_media_audiovideo, "bandwidth-level", (int)tmedia_bandwidth_level_t.tmedia_bl_low);
                        actionConfig.setMediaString(twrap_media_type_t.twrap_media_file, "file-path", "C:\\tmp\\myfile");
                        session.accept(actionConfig);
                        actionConfig.Dispose();
                    }*/
                    break;
                case tsip_invite_event_type_t.tsip_i_request:
                    break;
                case tsip_invite_event_type_t.tsip_ao_request:
                    break;
                case tsip_invite_event_type_t.tsip_o_ect_ok:
                    break;
                case tsip_invite_event_type_t.tsip_o_ect_nok:
                    break;
                case tsip_invite_event_type_t.tsip_i_ect:
                    break;
                case tsip_invite_event_type_t.tsip_m_local_hold_ok:
                    Console.WriteLine("Local Hold OK");
                    break;
                case tsip_invite_event_type_t.tsip_m_local_hold_nok:
                    Console.WriteLine("Local Hold NOK");
                    break;
                case tsip_invite_event_type_t.tsip_m_local_resume_ok:
                    Console.WriteLine("Local Resume OK");
                    break;
                case tsip_invite_event_type_t.tsip_m_local_resume_nok:
                    Console.WriteLine("Local Resume NOK");
                    break;
                case tsip_invite_event_type_t.tsip_m_remote_hold:
                    Console.WriteLine("Remote Hold");
                    break;
                case tsip_invite_event_type_t.tsip_m_remote_resume:
                    Console.WriteLine("Remote Resume");
                    break;
            }
              
            

            



            return 0;
        }