private void OnCardDAVContactCreated(IntPtr list, IntPtr lf)
 {
     var eTag = "";
     IntPtr tmpPtr = LinphoneAPI.linphone_friend_get_ref_key(lf);
     if (tmpPtr != IntPtr.Zero)
     {
         eTag = Marshal.PtrToStringAnsi(tmpPtr);
     }
     LOG.Info(string.Format("### OnCardDAVContactCreated eTag: {0}", eTag));
     if (CardDAVContactCreated != null)
     {
         var args = new CardDavContactEventArgs(CardDavContactEventArgs.CardDavAction.Create)
         {
             FriendListPtr = list,
             NewContactPtr = lf
         };
         CardDAVContactCreated(args);
     }
 }
        private void OnCardDAVContactRemoved(IntPtr list, IntPtr lf)
        {
            var refKey = "";
            IntPtr tmpPtr = LinphoneAPI.linphone_friend_get_ref_key(lf);
            if (tmpPtr != IntPtr.Zero)
            {
                refKey = Marshal.PtrToStringAnsi(tmpPtr);
            }

            tmpPtr = LinphoneAPI.linphone_friend_get_ref_key(lf);
            if (tmpPtr != IntPtr.Zero)
            {
                refKey = Marshal.PtrToStringAnsi(tmpPtr);
            }
            LOG.Info(string.Format( "### OnCardDAVContactRemoved RefKey: {0}", refKey));
            if (CardDAVContactDeleted != null)
            {
                var args = new CardDavContactEventArgs(CardDavContactEventArgs.CardDavAction.Delete)
                {
                    FriendListPtr = list,
                    ChangedContactPtr = lf
                };
                CardDAVContactDeleted(args);
            }
        }
        private void OnCardDAVContactUpdated(IntPtr list, IntPtr newFriend, IntPtr oldFriend)
        {
            var neweTag = "";
            IntPtr tmpPtr = LinphoneAPI.linphone_friend_get_ref_key(newFriend);
            if (tmpPtr != IntPtr.Zero)
            {
                neweTag = Marshal.PtrToStringAnsi(tmpPtr);
            }

   

            var oldeTag = "";
            tmpPtr = LinphoneAPI.linphone_friend_get_ref_key(oldFriend);
            if (tmpPtr != IntPtr.Zero)
            {
                neweTag = Marshal.PtrToStringAnsi(tmpPtr);
            }
            LOG.Info(string.Format("### OnCardDAVContactUpdated New eTag: {0} Old: ETag: {1}", neweTag, oldeTag));

            if (CardDAVContactUpdated != null)
            {
                var args = new CardDavContactEventArgs(CardDavContactEventArgs.CardDavAction.Update)
                {
                    FriendListPtr = list,
                    NewContactPtr = newFriend,
                    ChangedContactPtr = oldFriend
                };
                CardDAVContactUpdated(args);
            }
        }
 private void LinphoneCardDavContactUpdated(CardDavContactEventArgs args)
 {
 }
        private void LinphoneCardDavContactDeleted(CardDavContactEventArgs args)
        {
            if (args.ChangedContactPtr == IntPtr.Zero) return;
            IntPtr addressPtr = LinphoneAPI.linphone_friend_get_address(args.ChangedContactPtr);
            if (addressPtr == IntPtr.Zero) return;
            string dn = string.Empty;
            IntPtr tmpPtr = LinphoneAPI.linphone_address_get_display_name(addressPtr);
            if (tmpPtr != IntPtr.Zero)
            {
                dn = Marshal.PtrToStringAnsi(tmpPtr);
            }

            if (string.IsNullOrEmpty(dn))
                return;

            string un = "";
            tmpPtr = LinphoneAPI.linphone_address_get_username(addressPtr);
            if (tmpPtr != IntPtr.Zero)
            {
                un = Marshal.PtrToStringAnsi(tmpPtr);
            }

            string host = "";
            tmpPtr = LinphoneAPI.linphone_address_get_domain(addressPtr);
            if (tmpPtr != IntPtr.Zero)
            {
                host = Marshal.PtrToStringAnsi(tmpPtr);
            }

            var cfgSipAddress = string.Format("{0}@{1}", un, host);

            VATRPContact contact = FindContact(new ContactID(cfgSipAddress, IntPtr.Zero));
            if (contact != null)
            {
                RemoveFavoriteOption(contact);
                try
                {
                    if (contact.Avatar.NotBlank() && File.Exists(contact.Avatar))
                    {
                        File.Delete(contact.Avatar);
                    }
                }
                catch (Exception ex)
                {
                    Debug.WriteLine("failed to remove file: " + ex.Message);
                }
                RemoveContact(cfgSipAddress, false);
            }
        }
        private void LinphoneCardDavContactCreated(CardDavContactEventArgs args)
        {
            if (args.NewContactPtr == IntPtr.Zero) return;
            IntPtr addressPtr = LinphoneAPI.linphone_friend_get_address(args.NewContactPtr);
            if (addressPtr == IntPtr.Zero)
                return;
            string dn = "";
            IntPtr tmpPtr = LinphoneAPI.linphone_address_get_display_name(addressPtr);
            if (tmpPtr != IntPtr.Zero)
            {
                dn = Marshal.PtrToStringAnsi(tmpPtr);
            }

            string un = "";
            tmpPtr = LinphoneAPI.linphone_address_get_username(addressPtr);
            if (tmpPtr != IntPtr.Zero)
            {
                un = Marshal.PtrToStringAnsi(tmpPtr);
            }

            string host = "";
            tmpPtr = LinphoneAPI.linphone_address_get_domain(addressPtr);
            if (tmpPtr != IntPtr.Zero)
            {
                host = Marshal.PtrToStringAnsi(tmpPtr);
            }

            int port = LinphoneAPI.linphone_address_get_port(addressPtr);

            if (string.IsNullOrWhiteSpace(un)) return;
            var cfgSipaddress = port == 0 ? string.Format("{0}@{1}", un, host) :
                string.Format("{0}@{1}:{2}", un, host, port);

            var refKey = "";
            IntPtr refKeyPtr = LinphoneAPI.linphone_friend_get_ref_key(args.NewContactPtr);
            if (refKeyPtr != IntPtr.Zero)
                refKey = Marshal.PtrToStringAnsi(refKeyPtr);

            if (String.IsNullOrEmpty(refKey))
            {
                refKey = Guid.NewGuid().ToString();
                LinphoneAPI.linphone_friend_set_ref_key(args.NewContactPtr, refKey);
            }
            VATRPContact contact = new VATRPContact(new ContactID(cfgSipaddress, IntPtr.Zero))
            {
                DisplayName = dn,
                Fullname = dn.NotBlank() ? dn : un,
                Gender = "male",
                SipUsername = un,
                RegistrationName = cfgSipaddress,
                IsLinphoneContact = true,
                LinphoneRefKey = refKey
            };
            AddContact(contact, string.Empty);
        }