private void MenuItemCall_Click(object sender, RoutedEventArgs e)
{
MenuItem menuItem = e.OriginalSource as MenuItem;
if (menuItem == null) return;
if (menuItem == this.MenuItemCall_MakeAudioCall)
{
if (this.AVSession == null)
{
this.AVSession = MyAVSession.CreateOutgoingSession(this.sipService.SipStack, MediaType.Audio);
this.AVSession.MakeCall(this.remotePartyUri);
}
else
{
LOG.Error("Already in Call");
}
}
else if (menuItem == this.MenuItemCall_MakeVideoCall)
{
if (this.AVSession == null)
{
this.AVSession = MyAVSession.CreateOutgoingSession(this.sipService.SipStack, MediaType.AudioVideo);
this.AVSession.MakeCall(this.remotePartyUri);
}
else
{
LOG.Error("Already in Call");
}
}
else if (menuItem == this.MenuItemCall_AddRemoveVideo)
{
if (this.AVSession != null && this.AVSession.IsConnected)
{
if ((this.AVSession.MediaType & MediaType.Video) == MediaType.Video)
{
this.AVSession.Update(MediaType.Audio);
}
else
{
this.AVSession.Update(MediaType.AudioVideo);
}
}
}
else if (menuItem == this.MenuItemCall_MakeTransfer)
{
if (this.AVSession != null && this.AVSession.IsConnected)
{
lock (this.AVSession)
{
CallTransferWindow window = new CallTransferWindow();
window.ShowDialog();
if (!String.IsNullOrEmpty(window.TransferUri))
{
this.transferUri = window.TransferUri;
if (this.IsHeld)
{
this.AVSession.TransferCall(this.transferUri);
}
else
{
// FIXME: for now doubango will not send Hold prior to transfer
this.isTransfering = true;
this.AVSession.HoldCall();
}
}
}
}
else
{
LOG.Error("Invalid State");
}
}
else if (menuItem == this.MenuItemCall_HoldResume)
{
if (this.AVSession != null && this.AVSession.IsConnected)
{
lock (this.AVSession)
{
if (this.IsHeld)
{
this.AVSession.ResumeCall();
}
else
{
this.AVSession.HoldCall();
}
}
}
else
{
LOG.Error("Invalid State");
}
}
else if (menuItem == this.MenuItemCall_Quality)
{
if (this.AVSession != null && this.AVSession.IsConnected)
{
lock (this.AVSession)
{
if ((this.AVSession.MediaType & MediaType.Video) == MediaType.Video)
{
if (this.qosWindow == null)
{
this.qosWindow = new QoSWindow();
this.qosWindow.Info = this.AVSession.GetVideoQualityInfo();
this.qosWindow.Closed += this.qosWindow_Closed;
}
this.qosWindow.Show();
}
}
}
else
{
LOG.Error("Invalid State");
}
}
else if (menuItem == this.MenuItemCall_HangUp)
{
if (this.AVSession != null)
{
lock (this.AVSession)
{
this.AVSession.HangUpCall();
}
}
else
{
LOG.Error("Invalid State");
}
}
}