aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarvin W <git@larma.de>2026-07-27 14:22:54 +0200
committerMarvin W <git@larma.de>2026-08-02 12:44:10 +0200
commit84a47eee3b5cf4a73ad7d14a292f8b23b944a592 (patch)
tree53b33e6a3cf2ee5444eefa92b61bc791646b272e
parente8077ee3e9409aea9cda3d04b6363d49bcaa61b9 (diff)
Always prefer resource from current stream
-rw-r--r--libdino/src/entity/account.vala5
-rw-r--r--libdino/src/service/calls.vala21
-rw-r--r--libdino/src/service/connection_manager.vala2
-rw-r--r--libdino/src/service/file_manager.vala9
-rw-r--r--libdino/src/service/message_correction.vala2
-rw-r--r--libdino/src/service/message_processor.vala2
-rw-r--r--libdino/src/service/registration.vala2
-rw-r--r--libdino/src/service/stream_interactor.vala11
-rw-r--r--xmpp-vala/src/module/xep/0077_in_band_registration.vala6
9 files changed, 39 insertions, 21 deletions
diff --git a/libdino/src/entity/account.vala b/libdino/src/entity/account.vala
index a108af22..f5c99307 100644
--- a/libdino/src/entity/account.vala
+++ b/libdino/src/entity/account.vala
@@ -6,13 +6,14 @@ namespace Dino.Entities {
public class Account : Object {
public int id { get; set; }
- public string localpart { get { return full_jid.localpart; } }
- public string domainpart { get { return full_jid.domainpart; } }
+ public string localpart { get { return bare_jid.localpart; } }
+ public string domainpart { get { return bare_jid.domainpart; } }
public string resourcepart {
get { return full_jid.resourcepart; }
private set { full_jid = full_jid.with_resource(value); }
}
public Jid bare_jid { owned get { return full_jid.bare_jid; } }
+ [Version (deprecated = true)]
public Jid full_jid { get; private set; }
public string? password { get; set; }
public string display_name {
diff --git a/libdino/src/service/calls.vala b/libdino/src/service/calls.vala
index e0e37ffd..ab138612 100644
--- a/libdino/src/service/calls.vala
+++ b/libdino/src/service/calls.vala
@@ -40,7 +40,12 @@ namespace Dino {
call.direction = Call.DIRECTION_OUTGOING;
call.account = conversation.account;
call.counterpart = conversation.counterpart;
- call.ourpart = stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(conversation.counterpart, conversation.account) ?? conversation.account.full_jid;
+ if (conversation.type_.is_muc_semantic()) {
+ call.ourpart = stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(conversation.counterpart, conversation.account);
+ }
+ if (call.ourpart == null) {
+ call.ourpart = stream_interactor.get_account_full_jid(conversation.account);
+ }
call.time = call.local_time = call.end_time = new DateTime.now_utc();
call.encryption = Encryption.UNKNOWN;
call.state = Call.State.RINGING;
@@ -190,7 +195,7 @@ namespace Dino {
// This is a direct call without prior JMI. Ask user.
if (stream_interactor.get_module(MucManager.IDENTITY).might_be_groupchat(session.peer_full_jid.bare_jid, account)) return;
- peer_state = create_received_call(account, session.peer_full_jid, account.full_jid, counterpart_wants_video);
+ peer_state = create_received_call(account, session.peer_full_jid, session.local_full_jid, counterpart_wants_video);
peer_state.set_session(session);
Conversation conversation = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation(peer_state.call.counterpart.bare_jid, account, Conversation.Type.CHAT);
call_incoming(peer_state.call, peer_state.call_state, conversation, counterpart_wants_video, false);
@@ -208,7 +213,7 @@ namespace Dino {
call.counterpart = to;
} else {
call.direction = Call.DIRECTION_INCOMING;
- call.ourpart = account.full_jid;
+ call.ourpart = to;
call.state = Call.State.RINGING;
call.counterpart = from;
}
@@ -280,7 +285,7 @@ namespace Dino {
Call call = new Call();
call.direction = Call.DIRECTION_INCOMING;
- call.ourpart = account.full_jid;
+ call.ourpart = stream_interactor.get_account_full_jid(account);
call.counterpart = inviter_jid;
call.account = account;
call.time = call.local_time = call.end_time = new DateTime.now_utc();
@@ -361,7 +366,7 @@ namespace Dino {
// Carboned message from our account
if (from.equals_bare(account.bare_jid)) {
// Ignore carbon from ourselves
- if (from.equals(account.full_jid)) return;
+ if (from.equals(stream_interactor.get_account_full_jid(account))) return;
call.ourpart = from;
call.state = Call.State.OTHER_DEVICE;
@@ -371,7 +376,7 @@ namespace Dino {
// We proposed the call. This is a message from our peer.
if (call.direction == Call.DIRECTION_OUTGOING &&
- from.equals_bare(peer_state.jid) && to.equals(account.full_jid)) {
+ from.equals_bare(peer_state.jid) && to.equals(stream_interactor.get_account_full_jid(account))) {
// We know the full jid of our peer now
call_states[call].rename_peer(jmi_request_peer[call].jid, from);
jmi_request_peer[call].call_resource.begin(from);
@@ -478,7 +483,7 @@ namespace Dino {
Call call = call_state.call;
// Ignore carbon from ourselves
- if (from_jid.equals(account.full_jid)) return;
+ if (from_jid.equals(stream_interactor.get_account_full_jid(account))) return;
// We accepted the call from another device
call.ourpart = from_jid;
@@ -493,7 +498,7 @@ namespace Dino {
// We proposed the call. This is a message from our peer.
if (call.direction == Call.DIRECTION_OUTGOING &&
- to_jid.equals(account.full_jid)) {
+ to_jid.equals(stream_interactor.get_account_full_jid(account))) {
// We know the full jid of our peer now
call_state.rename_peer(jmi_request_peer[call].jid, from_jid);
jmi_request_peer[call].call_resource.begin(from_jid);
diff --git a/libdino/src/service/connection_manager.vala b/libdino/src/service/connection_manager.vala
index 5e92dec9..2ebddd92 100644
--- a/libdino/src/service/connection_manager.vala
+++ b/libdino/src/service/connection_manager.vala
@@ -225,7 +225,7 @@ public class ConnectionManager : Object {
XmppStream stream = stream_result.stream;
- debug("[%s] New connection: %p", account.full_jid.to_string(), stream);
+ debug("[%s] New connection: %p", account.bare_jid.to_string(), stream);
connections[account].established = new DateTime.now_utc();
stream.attached_modules.connect((stream) => {
diff --git a/libdino/src/service/file_manager.vala b/libdino/src/service/file_manager.vala
index 5e59aee1..964278a5 100644
--- a/libdino/src/service/file_manager.vala
+++ b/libdino/src/service/file_manager.vala
@@ -76,9 +76,10 @@ public class FileManager : StreamInteractionModule, Object {
file_transfer.account = conversation.account;
file_transfer.counterpart = conversation.counterpart;
if (conversation.type_.is_muc_semantic()) {
- file_transfer.ourpart = stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(conversation.counterpart, conversation.account) ?? conversation.account.bare_jid;
- } else {
- file_transfer.ourpart = conversation.account.full_jid;
+ file_transfer.ourpart = stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(conversation.counterpart, conversation.account);
+ }
+ if (file_transfer.ourpart == null) {
+ file_transfer.ourpart = stream_interactor.get_account_full_jid(conversation.account);
}
file_transfer.direction = FileTransfer.DIRECTION_SENT;
file_transfer.time = new DateTime.now_utc();
@@ -362,7 +363,7 @@ public class FileManager : StreamInteractionModule, Object {
file_transfer.ourpart = from;
file_transfer.direction = FileTransfer.DIRECTION_SENT;
} else {
- file_transfer.ourpart = conversation.account.full_jid;
+ file_transfer.ourpart = stream_interactor.get_account_full_jid(conversation.account);
file_transfer.direction = FileTransfer.DIRECTION_RECEIVED;
}
}
diff --git a/libdino/src/service/message_correction.vala b/libdino/src/service/message_correction.vala
index d1f1dc3d..164106e0 100644
--- a/libdino/src/service/message_correction.vala
+++ b/libdino/src/service/message_correction.vala
@@ -64,7 +64,7 @@ public class MessageCorrection : StreamInteractionModule, MessageListener {
Jid? own_jid = null;
if (conversation.type_ == Conversation.Type.CHAT) {
- own_jid = conversation.account.full_jid;
+ own_jid = stream_interactor.get_account_full_jid(conversation.account);
} else if (conversation.type_ == Conversation.Type.GROUPCHAT) {
own_jid = stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(conversation.counterpart, conversation.account);
}
diff --git a/libdino/src/service/message_processor.vala b/libdino/src/service/message_processor.vala
index 7201085e..b9c23240 100644
--- a/libdino/src/service/message_processor.vala
+++ b/libdino/src/service/message_processor.vala
@@ -418,7 +418,7 @@ public class MessageProcessor : StreamInteractionModule, Object {
message.ourpart = stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(conversation.counterpart, conversation.account) ?? conversation.account.bare_jid;
message.real_jid = conversation.account.bare_jid;
} else {
- message.ourpart = conversation.account.full_jid;
+ message.ourpart = stream_interactor.get_account_full_jid(conversation.account);
}
message.marked = Entities.Message.Marked.UNSENT;
message.encryption = conversation.encryption;
diff --git a/libdino/src/service/registration.vala b/libdino/src/service/registration.vala
index 0c17fa2e..c0399330 100644
--- a/libdino/src/service/registration.vala
+++ b/libdino/src/service/registration.vala
@@ -74,7 +74,7 @@ public class Register : StreamInteractionModule, Object{
public async string? change_password(Account account, string new_pw){
XmppStream stream = stream_interactor.get_stream(account);
if (stream == null) return null;
- return (yield stream.get_module(Xep.InBandRegistration.Module.IDENTITY).change_password(stream, account.full_jid, new_pw)).condition;
+ return (yield stream.get_module(Xep.InBandRegistration.Module.IDENTITY).change_password(stream, account.bare_jid, new_pw)).condition;
}
public class ServerAvailabilityReturn {
diff --git a/libdino/src/service/stream_interactor.vala b/libdino/src/service/stream_interactor.vala
index 5d248327..2ac13103 100644
--- a/libdino/src/service/stream_interactor.vala
+++ b/libdino/src/service/stream_interactor.vala
@@ -27,6 +27,17 @@ public class StreamInteractor : Object {
});
}
+ public Jid get_account_full_jid(Account account) {
+ XmppStream stream = get_stream(account);
+ if (stream != null) {
+ Bind.Flag flag = stream.get_flag(Bind.Flag.IDENTITY);
+ if (flag != null) {
+ return flag.my_jid;
+ }
+ }
+ return account.full_jid;
+ }
+
public void connect_account(Account account) {
module_manager.initialize(account);
account_added(account);
diff --git a/xmpp-vala/src/module/xep/0077_in_band_registration.vala b/xmpp-vala/src/module/xep/0077_in_band_registration.vala
index 87b654a8..12ed2f1c 100644
--- a/xmpp-vala/src/module/xep/0077_in_band_registration.vala
+++ b/xmpp-vala/src/module/xep/0077_in_band_registration.vala
@@ -30,15 +30,15 @@ public class Module : XmppStreamNegotiationModule {
return null;
}
- public async ErrorStanza? change_password(XmppStream stream, Jid jid, string new_pw) {
+ public async ErrorStanza? change_password(XmppStream stream, Jid bare_jid, string new_pw) {
StanzaNode pw_change_node = new StanzaNode.build("query", NS_URI).add_self_xmlns();
StanzaNode username_node = new StanzaNode.build("username", NS_URI);
StanzaNode pw_node = new StanzaNode.build("password", NS_URI);
- username_node.put_node(new StanzaNode.text(jid.localpart));
+ username_node.put_node(new StanzaNode.text(bare_jid.localpart));
pw_node.put_node(new StanzaNode.text(new_pw));
pw_change_node.put_node(username_node);
pw_change_node.put_node(pw_node);
- Iq.Stanza set_password_iq = new Iq.Stanza.set(pw_change_node) { to=jid.bare_jid.domain_jid };
+ Iq.Stanza set_password_iq = new Iq.Stanza.set(pw_change_node) { to=bare_jid.domain_jid };
Iq.Stanza chpw_result = yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, set_password_iq);
if (chpw_result.is_error()) {