예제 #1
0
 public IAXClient(IAXAudioType AudioType, int NumCalls)
 {
     IAXUnmanaged.iaxc_initialize((int)AudioType, NumCalls);
     CallbackDelegate = new IAXUnmanaged.iaxc_event_callback_t(IAXCallback);
     IAXUnmanaged.iaxc_set_event_callback(CallbackDelegate);
     IAXUnmanaged.iaxc_start_processing_thread();
 }
예제 #2
0
 internal unsafe IAXNetStatsEventArgs(IAXUnmanaged.iaxc_event e)
     : base(e)
 {
     CallNo = e.netstats.callNo;
     RoundTripTime = e.netstats.rtt;
     Local = new IAXNetStats(e.netstats.local);
     Remote = new IAXNetStats(e.netstats.remote);
 }
예제 #3
0
 internal IAXNetStats(IAXUnmanaged.iaxc_netstat n)
 {
     Jitter = n.jitter;
     LossPercent = n.losspct;
     LossCount = n.losscnt;
     Packets = n.packets;
     Delay = n.delay;
     Dropped = n.dropped;
     OutOfOrder = n.ooo;
 }
예제 #4
0
        internal unsafe int IAXCallback(IAXUnmanaged.iaxc_event e)
        {
            IAXUnmanaged.iaxc_event ev = e;
            while (true)
            {
                switch (ev.type)
                {
                    case IAXUnmanaged.IAXC_EVENT_LEVELS:
                        if (LevelsEvent != null)
                            LevelsEvent(this, new IAXLevelsEventArgs(ev));
                        break;
                    case IAXUnmanaged.IAXC_EVENT_NETSTAT:
                        if (NetStatsEvent != null)
                            NetStatsEvent(this, new IAXNetStatsEventArgs(ev));
                        break;
                    case IAXUnmanaged.IAXC_EVENT_REGISTRATION:
                        if (RegistrationEvent != null)
                            RegistrationEvent(this, new IAXRegistrationEventArgs(ev));
                        break;
                    case IAXUnmanaged.IAXC_EVENT_STATE:
                        if (StateEvent != null)
                            StateEvent(this, new IAXStateEventArgs(ev));
                        break;
                    case IAXUnmanaged.IAXC_EVENT_TEXT:
                        if (TextEvent != null)
                            TextEvent(this, new IAXTextEventArgs(ev));
                        break;
                    case IAXUnmanaged.IAXC_EVENT_URL:
                        if (UrlEvent != null)
                            UrlEvent(this, new IAXUrlEventArgs(ev));
                        break;
                    case IAXUnmanaged.IAXC_EVENT_VIDEO:
                        if (VideoEvent != null)
                            VideoEvent(this, new IAXVideoEventArgs(ev));
                        break;
                }

                // see if there is a "next" event
                if (ev.next == null)
                    return 0;
                else
                    ev = *ev.next;
            }
        }
예제 #5
0
 internal IAXLevelsEventArgs(IAXUnmanaged.iaxc_event e)
     : base(e)
 {
     Input = e.levels.input;
     Output = e.levels.output;
 }
예제 #6
0
 internal unsafe IAXVideoEventArgs(IAXUnmanaged.iaxc_event e)
     : base(e)
 {
     CallNo = e.video.callNo;
     Format = e.video.format;
     Width = e.video.width;
     Height = e.video.height;
     Data = null; // TODO: how to interpret data?
 }
예제 #7
0
 internal unsafe IAXUrlEventArgs(IAXUnmanaged.iaxc_event e)
     : base(e)
 {
     CallNo = e.url.callNo;
     Type = (IAXUrlEventType)e.url.type;
     Url = BytesToString(e.url.url);
 }
예제 #8
0
 internal unsafe IAXTextEventArgs(IAXUnmanaged.iaxc_event e)
     : base(e)
 {
     Type = (IAXTTextEventType)e.text.type;
     CallNo = e.text.callNo;
     Message = BytesToString(e.text.message);
 }
예제 #9
0
 public int Unregister(int ID)
 {
     return(IAXUnmanaged.iaxc_unregister(ID));
 }
예제 #10
0
 internal unsafe IAXRegistrationEventArgs(IAXUnmanaged.iaxc_event e)
     : base(e)
 {
     ID = e.reg.id;
     Reply = (IAXRegistrationReply)e.reg.reply;
     MessageCount = e.reg.msgcount;
 }
예제 #11
0
 public void Answer()
 {
     IAXUnmanaged.iaxc_answer_call(0);
 }
예제 #12
0
 public void SetFormats(IAXFormat preferred, IAXFormat allowed)
 {
     IAXUnmanaged.iaxc_set_formats((int)preferred, (int)allowed);
 }
예제 #13
0
 public void Hangup()
 {
     IAXUnmanaged.iaxc_dump_call();
 }
예제 #14
0
 public void Transfer(string number)
 {
     IAXUnmanaged.iaxc_blind_transfer_call(IAXUnmanaged.iaxc_selected_call(), number);
 }
예제 #15
0
 public void Call(string IAX)
 {
     IAXUnmanaged.iaxc_call(IAX);
 }
예제 #16
0
 internal IAXEventArgs(IAXUnmanaged.iaxc_event ev)
 {
 }
예제 #17
0
 protected override void Dispose(bool disposing)
 {
     base.Dispose(disposing);
     IAXUnmanaged.iaxc_stop_processing_thread();
     IAXUnmanaged.iaxc_shutdown();
 }
예제 #18
0
 internal unsafe IAXStateEventArgs(IAXUnmanaged.iaxc_event e)
     : base(e)
 {
     CallNo = e.call.callNo;
     State = (IAXCallState)e.call.state;
     Format = (IAXFormat)e.call.format;
     Remote = BytesToString(e.call.remote);
     RemoteName = BytesToString(e.call.remote_name);
     Local = BytesToString(e.call.local);
     LocalContext = BytesToString(e.call.local_context);
 }
예제 #19
0
 public int Register(string User, string Password, string Server)
 {
     return(IAXUnmanaged.iaxc_register(User, Password, Server));
 }