Fix compilation with older valac versions

This commit is contained in:
fiaxh 2019-07-18 03:12:05 +02:00
parent f0abb8aaf9
commit 1853ee8b4f
3 changed files with 39 additions and 34 deletions

View file

@ -82,7 +82,10 @@ public class JingleFileSender : FileSender, Object {
XmppStream? stream = stream_interactor.get_stream(conversation.account); XmppStream? stream = stream_interactor.get_stream(conversation.account);
if (stream == null) return false; if (stream == null) return false;
foreach (Jid full_jid in stream.get_flag(Presence.Flag.IDENTITY).get_resources(conversation.counterpart)) { Gee.List<Jid>? resources = stream.get_flag(Presence.Flag.IDENTITY).get_resources(conversation.counterpart);
if (resources == null) return false;
foreach (Jid full_jid in resources) {
if (stream.get_module(Xep.JingleFileTransfer.Module.IDENTITY).is_available(stream, full_jid)) { if (stream.get_module(Xep.JingleFileTransfer.Module.IDENTITY).is_available(stream, full_jid)) {
return true; return true;
} }
@ -91,6 +94,8 @@ public class JingleFileSender : FileSender, Object {
} }
public bool can_send(Conversation conversation, FileTransfer file_transfer) { public bool can_send(Conversation conversation, FileTransfer file_transfer) {
if (conversation.encryption != Encryption.NONE) return false;
XmppStream? stream = stream_interactor.get_stream(file_transfer.account); XmppStream? stream = stream_interactor.get_stream(file_transfer.account);
if (stream == null) return false; if (stream == null) return false;

View file

@ -37,7 +37,7 @@ public class Module : XmppStreamModule, Iq.Handler {
stream.get_module(Iq.Module.IDENTITY).send_iq(stream, new Iq.Stanza.error(iq, new ErrorStanza.not_acceptable("unexpected IBB connection"))); stream.get_module(Iq.Module.IDENTITY).send_iq(stream, new Iq.Stanza.error(iq, new ErrorStanza.not_acceptable("unexpected IBB connection")));
return; return;
} }
if (conn.state != WAITING_FOR_CONNECT) { if (conn.state != Connection.State.WAITING_FOR_CONNECT) {
stream.get_module(Iq.Module.IDENTITY).send_iq(stream, new Iq.Stanza.error(iq, new ErrorStanza.bad_request("IBB open for already open connection"))); stream.get_module(Iq.Module.IDENTITY).send_iq(stream, new Iq.Stanza.error(iq, new ErrorStanza.bad_request("IBB open for already open connection")));
return; return;
} }
@ -212,7 +212,7 @@ public class Connection : IOStream {
} }
return read; return read;
} }
if (state == DISCONNECTED) { if (state == Connection.State.DISCONNECTED) {
return 0; return 0;
} }
set_read_callback(read_async.callback, cancellable, io_priority); set_read_callback(read_async.callback, cancellable, io_priority);
@ -221,7 +221,7 @@ public class Connection : IOStream {
} }
public async ssize_t write_async(uint8[]? buffer, int io_priority = GLib.Priority.DEFAULT, Cancellable? cancellable = null) throws IOError { public async ssize_t write_async(uint8[]? buffer, int io_priority = GLib.Priority.DEFAULT, Cancellable? cancellable = null) throws IOError {
while (state == WAITING_FOR_CONNECT || state == CONNECTING) { while (state == State.WAITING_FOR_CONNECT || state == State.CONNECTING) {
if (cancellable != null) { if (cancellable != null) {
cancellable.set_error_if_cancelled(); cancellable.set_error_if_cancelled();
} }
@ -229,7 +229,7 @@ public class Connection : IOStream {
yield; yield;
} }
throw_if_closed(); throw_if_closed();
assert(state == CONNECTED); assert(state == State.CONNECTED);
// TODO(hrxi): merging? // TODO(hrxi): merging?
int seq = local_seq; int seq = local_seq;
local_seq = (local_seq + 1) % SEQ_MODULUS; local_seq = (local_seq + 1) % SEQ_MODULUS;
@ -293,28 +293,28 @@ public class Connection : IOStream {
} }
delegate void OnClose(bool success); delegate void OnClose(bool success);
private bool close_impl(Cancellable? cancellable = null, OnClose? on_close = null) { private bool close_impl(Cancellable? cancellable = null, OnClose? on_close = null) {
if (state == DISCONNECTING || state == DISCONNECTED || state == ERROR) { if (state == State.DISCONNECTING || state == State.DISCONNECTED || state == State.ERROR) {
on_close(true); on_close(true);
return true; return true;
} }
if (state == WAITING_FOR_CONNECT) { if (state == State.WAITING_FOR_CONNECT) {
state = DISCONNECTED; state = State.DISCONNECTED;
stream.get_flag(Flag.IDENTITY).remove_connection(this); stream.get_flag(Flag.IDENTITY).remove_connection(this);
trigger_read_callback(); trigger_read_callback();
on_close(true); on_close(true);
return true; return true;
} }
state = DISCONNECTING; state = State.DISCONNECTING;
StanzaNode close = new StanzaNode.build("close", NS_URI) StanzaNode close = new StanzaNode.build("close", NS_URI)
.add_self_xmlns() .add_self_xmlns()
.put_attribute("sid", sid); .put_attribute("sid", sid);
Iq.Stanza iq = new Iq.Stanza.set(close) { to=receiver_full_jid }; Iq.Stanza iq = new Iq.Stanza.set(close) { to=receiver_full_jid };
stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq, (stream, iq) => { stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq, (stream, iq) => {
assert(state == DISCONNECTING); assert(state == State.DISCONNECTING);
if (iq.is_error()) { if (iq.is_error()) {
set_error("disconnecting failed"); set_error("disconnecting failed");
} else { } else {
state = DISCONNECTED; state = State.DISCONNECTED;
} }
stream.get_flag(Flag.IDENTITY).remove_connection(this); stream.get_flag(Flag.IDENTITY).remove_connection(this);
trigger_read_callback(); trigger_read_callback();
@ -340,12 +340,12 @@ public class Connection : IOStream {
Iq.Stanza iq = new Iq.Stanza.set(open) { to=receiver_full_jid }; Iq.Stanza iq = new Iq.Stanza.set(open) { to=receiver_full_jid };
stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq, (stream, iq) => { stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq, (stream, iq) => {
if (conn.state != CONNECTING) { if (conn.state != State.CONNECTING) {
assert(conn.state != CONNECTED); assert(conn.state != State.CONNECTED);
return; return;
} }
if (!iq.is_error()) { if (!iq.is_error()) {
conn.state = CONNECTED; conn.state = State.CONNECTED;
stream.get_flag(Flag.IDENTITY).add_connection(conn); stream.get_flag(Flag.IDENTITY).add_connection(conn);
conn.trigger_write_callback(); conn.trigger_write_callback();
} else { } else {
@ -359,29 +359,29 @@ public class Connection : IOStream {
} }
void throw_if_error() throws IOError { void throw_if_error() throws IOError {
if (state == ERROR) { if (state == State.ERROR) {
throw new IOError.FAILED(error); throw new IOError.FAILED(error);
} }
} }
void throw_if_closed() throws IOError { void throw_if_closed() throws IOError {
throw_if_error(); throw_if_error();
if (state == DISCONNECTING || state == DISCONNECTED) { if (state == State.DISCONNECTING || state == State.DISCONNECTED) {
throw new IOError.CLOSED("can't read/write on a closed connection"); throw new IOError.CLOSED("can't read/write on a closed connection");
} }
} }
void set_error(string error) { void set_error(string error) {
if (state != WAITING_FOR_CONNECT && state != DISCONNECTING && state != DISCONNECTED && state != ERROR) { if (state != State.WAITING_FOR_CONNECT && state != State.DISCONNECTING && state != State.DISCONNECTED && state != State.ERROR) {
close_async.begin(); close_async.begin();
} }
state = ERROR; state = State.ERROR;
this.error = error; this.error = error;
stream.get_flag(Flag.IDENTITY).remove_connection(this); stream.get_flag(Flag.IDENTITY).remove_connection(this);
} }
public void handle_open(XmppStream stream, StanzaNode open, Iq.Stanza iq) { public void handle_open(XmppStream stream, StanzaNode open, Iq.Stanza iq) {
assert(state == WAITING_FOR_CONNECT); assert(state == State.WAITING_FOR_CONNECT);
int block_size = open.get_attribute_int("block-size"); int block_size = open.get_attribute_int("block-size");
string? stanza = open.get_attribute("stanza"); string? stanza = open.get_attribute("stanza");
if (block_size < 0 || (stanza != null && stanza != "iq" && stanza != "message")) { if (block_size < 0 || (stanza != null && stanza != "iq" && stanza != "message")) {
@ -400,12 +400,12 @@ public class Connection : IOStream {
return; return;
} }
this.block_size = block_size; this.block_size = block_size;
state = CONNECTED; state = State.CONNECTED;
stream.get_module(Iq.Module.IDENTITY).send_iq(stream, new Iq.Stanza.result(iq)); stream.get_module(Iq.Module.IDENTITY).send_iq(stream, new Iq.Stanza.result(iq));
trigger_write_callback(); trigger_write_callback();
} }
public void handle_data(XmppStream stream, StanzaNode data, Iq.Stanza iq) { public void handle_data(XmppStream stream, StanzaNode data, Iq.Stanza iq) {
assert(state == CONNECTED); assert(state == State.CONNECTED);
if (input_closed) { if (input_closed) {
set_error("unexpected data"); set_error("unexpected data");
stream.get_module(Iq.Module.IDENTITY).send_iq(stream, new Iq.Stanza.error(iq, new ErrorStanza.not_allowed("unexpected data"))); stream.get_module(Iq.Module.IDENTITY).send_iq(stream, new Iq.Stanza.error(iq, new ErrorStanza.not_allowed("unexpected data")));
@ -434,12 +434,12 @@ public class Connection : IOStream {
} }
} }
public void handle_close(XmppStream stream, StanzaNode close, Iq.Stanza iq) { public void handle_close(XmppStream stream, StanzaNode close, Iq.Stanza iq) {
assert(state == CONNECTED); assert(state == State.CONNECTED);
stream.get_module(Iq.Module.IDENTITY).send_iq(stream, new Iq.Stanza.result(iq)); stream.get_module(Iq.Module.IDENTITY).send_iq(stream, new Iq.Stanza.result(iq));
stream.get_flag(Flag.IDENTITY).remove_connection(this); stream.get_flag(Flag.IDENTITY).remove_connection(this);
input_closed = true; input_closed = true;
output_closed = true; output_closed = true;
state = DISCONNECTED; state = State.DISCONNECTED;
trigger_read_callback(); trigger_read_callback();
} }

View file

@ -317,7 +317,7 @@ public class Session {
public signal void accepted(XmppStream stream); public signal void accepted(XmppStream stream);
public Session.initiate_sent(string sid, Type type, TransportParameters transport, Jid peer_full_jid, string content_name) { public Session.initiate_sent(string sid, Type type, TransportParameters transport, Jid peer_full_jid, string content_name) {
this.state = INITIATE_SENT; this.state = State.INITIATE_SENT;
this.sid = sid; this.sid = sid;
this.type_ = type; this.type_ = type;
this.peer_full_jid = peer_full_jid; this.peer_full_jid = peer_full_jid;
@ -327,7 +327,7 @@ public class Session {
} }
public Session.initiate_received(string sid, Type type, TransportParameters? transport, Jid peer_full_jid, string content_name) { public Session.initiate_received(string sid, Type type, TransportParameters? transport, Jid peer_full_jid, string content_name) {
this.state = INITIATE_RECEIVED; this.state = State.INITIATE_RECEIVED;
this.sid = sid; this.sid = sid;
this.type_ = type; this.type_ = type;
this.peer_full_jid = peer_full_jid; this.peer_full_jid = peer_full_jid;
@ -339,7 +339,7 @@ public class Session {
public void handle_iq_set(XmppStream stream, string action, StanzaNode jingle, Iq.Stanza iq) throws IqError { public void handle_iq_set(XmppStream stream, string action, StanzaNode jingle, Iq.Stanza iq) throws IqError {
switch (action) { switch (action) {
case "session-accept": case "session-accept":
if (state != INITIATE_SENT) { if (state != State.INITIATE_SENT) {
throw new IqError.OUT_OF_ORDER("got session-accept while not waiting for one"); throw new IqError.OUT_OF_ORDER("got session-accept while not waiting for one");
} }
handle_session_accept(stream, jingle, iq); handle_session_accept(stream, jingle, iq);
@ -392,7 +392,7 @@ public class Session {
conn = transport.create_transport_connection(stream, peer_full_jid, Role.INITIATOR); conn = transport.create_transport_connection(stream, peer_full_jid, Role.INITIATOR);
transport = null; transport = null;
stream.get_module(Iq.Module.IDENTITY).send_iq(stream, new Iq.Stanza.result(iq)); stream.get_module(Iq.Module.IDENTITY).send_iq(stream, new Iq.Stanza.result(iq));
state = ACTIVE; state = State.ACTIVE;
accepted(stream); accepted(stream);
} }
void handle_session_terminate(XmppStream stream, StanzaNode jingle, Iq.Stanza iq) throws IqError { void handle_session_terminate(XmppStream stream, StanzaNode jingle, Iq.Stanza iq) throws IqError {
@ -401,7 +401,7 @@ public class Session {
} }
public void accept(XmppStream stream, StanzaNode description) { public void accept(XmppStream stream, StanzaNode description) {
if (state != INITIATE_RECEIVED) { if (state != State.INITIATE_RECEIVED) {
return; // TODO(hrxi): what to do? return; // TODO(hrxi): what to do?
} }
StanzaNode jingle = new StanzaNode.build("jingle", NS_URI) StanzaNode jingle = new StanzaNode.build("jingle", NS_URI)
@ -420,11 +420,11 @@ public class Session {
conn = transport.create_transport_connection(stream, peer_full_jid, Role.RESPONDER); conn = transport.create_transport_connection(stream, peer_full_jid, Role.RESPONDER);
transport = null; transport = null;
state = ACTIVE; state = State.ACTIVE;
} }
public void reject(XmppStream stream) { public void reject(XmppStream stream) {
if (state != INITIATE_RECEIVED) { if (state != State.INITIATE_RECEIVED) {
return; // TODO(hrxi): what to do? return; // TODO(hrxi): what to do?
} }
StanzaNode reason = new StanzaNode.build("reason", NS_URI) StanzaNode reason = new StanzaNode.build("reason", NS_URI)
@ -442,18 +442,18 @@ public class Session {
} }
public void close_connection(XmppStream stream) { public void close_connection(XmppStream stream) {
if (state != ACTIVE) { if (state != State.ACTIVE) {
return; // TODO(hrxi): what to do? return; // TODO(hrxi): what to do?
} }
conn.close(); conn.close();
} }
public void terminate(XmppStream stream, StanzaNode reason) { public void terminate(XmppStream stream, StanzaNode reason) {
if (state != INITIATE_SENT && state != INITIATE_RECEIVED && state != ACTIVE) { if (state != State.INITIATE_SENT && state != State.INITIATE_RECEIVED && state != State.ACTIVE) {
// TODO(hrxi): what to do? // TODO(hrxi): what to do?
return; return;
} }
if (state == ACTIVE) { if (state == State.ACTIVE) {
conn.close(); conn.close();
} }
@ -465,7 +465,7 @@ public class Session {
Iq.Stanza iq = new Iq.Stanza.set(jingle) { to=peer_full_jid }; Iq.Stanza iq = new Iq.Stanza.set(jingle) { to=peer_full_jid };
stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq); stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq);
state = ENDED; state = State.ENDED;
// Immediately remove the session from the open sessions as per the // Immediately remove the session from the open sessions as per the
// XEP, don't wait for confirmation. // XEP, don't wait for confirmation.
stream.get_flag(Flag.IDENTITY).remove_session(sid); stream.get_flag(Flag.IDENTITY).remove_session(sid);