(In reply to comment #53) > (In reply to comment #46) > > Empathy: http://cgit.collabora.com/git/user/xclaesse/empathy.git/log/?h=otr > > Ok for the first commit. > > Second commit: > > + tuple = empathy_gdbus_channel_interface_otr1_get_remote_fingerprint ( > + priv->otr_proxy); > I have no idea how these new generated API work, but GVariant API are > usually 'return: (transfer full)' that's not the case here? No it returns the cached variant. There is a _dup_ method as well in the generated API. > + level = empathy_gdbus_channel_interface_otr1_get_trust_level ( > + priv->otr_proxy); > I guess this returns a cached value (not a blocking call) right? What > happens if the proxy is not ready yet? Aren't we going to treat it as a > wrong level and update it right after? Properties are fetched and cached when creating the proxy, there is a _new_for_bus_sync() call. I added an extra patch to make it async now. > + g_variant_get (tuple, "(&s@ay)", &fp, NULL); > What's the 'ay' arg being ignored? Please add at least one comment. The fingerprint I send over dbus is in 2 forms: the 's' is formatted to display to the user and the 'ay' is the raw data of the fingerprint which cannot be displayed since it's not utf8. > What happens if the user doesn't trust the fingerprint. The communication is > still crypted? By default it's not encrypted at all. When one side does "/otr start" it will be encrypted but a MITM could have set its own public key instead. So both sides must verify the fingerprint by other way (like calling, or asking IRL, etc) then if they checked the the fingerprint wasn't changed by a MITM they can do "/otr trust" and it will remember that