Exemplo n.º 1
0
 /// <summary>
 /// Enables OMEMO encryption for messages for this
 /// Has to be enabled before connecting.
 /// </summary>
 /// <param name="omemoStore">A persistent store for all the OMEMO related data (e.g. device ids and keys).</param>
 /// <returns>Returns true on success.</returns>
 public bool EnableOmemo(IExtendedOmemoStorage omemoStore)
 {
     if (state != ConnectionState.DISCONNECTED)
     {
         throw new InvalidOperationException(LOGGER_TAG + "Unable to enable OMEMO. state != " + ConnectionState.DISCONNECTED.ToString() + " - " + state.ToString());
     }
     omemoHelper = new OmemoHelper(this, omemoStore);
     return(true);
 }
Exemplo n.º 2
0
        //--------------------------------------------------------Constructor:----------------------------------------------------------------\\
        #region --Constructors--
        /// <summary>
        /// Basic Constructor
        /// </summary>
        /// <history>
        /// 05/05/2018 Created [Fabian Sauter]
        /// </history>
        public XMPPConnection2(XMPPAccount account) : base(account)
        {
            this.holdConnection       = false;
            this.connectionErrorCount = 0;
            this.lastConnectionError  = null;
            this.TCP_CONNECTION       = new TCPConnection2(account);
            this.TCP_CONNECTION.ConnectionStateChanged += TCPConnection_ConnectionStateChanged;
            this.TCP_CONNECTION.NewDataReceived        += TCPConnection_NewDataReceived;

            this.PARSER             = new MessageParser2();
            this.MESSAGE_PROCESSORS = new AbstractMessageProcessor[4];
            this.streamId           = null;
            this.messageIdCache     = new TSTimedList <string>();

            this.connectionTimer    = null;
            this.reconnectRequested = false;
            this.timeout            = TimeSpan.FromMilliseconds(CONNECTION_TIMEOUT);

            this.GENERAL_COMMAND_HELPER = new GeneralCommandHelper(this);
            this.MUC_COMMAND_HELPER     = new MUCCommandHelper(this);
            this.PUB_SUB_COMMAND_HELPER = new PubSubCommandHelper(this);
            this.OMEMO_COMMAND_HELPER   = new OmemoCommandHelper(this);

            // The order in which new messages should get processed (TLS -- SASL -- Stream Management -- Resource binding -- ...).
            // https://xmpp.org/extensions/xep-0170.html
            //-------------------------------------------------------------
            // TLS:
            this.MESSAGE_PROCESSORS[0] = new TLSConnection(TCP_CONNECTION, this);

            // SASL:
            this.MESSAGE_PROCESSORS[1] = new SASLConnection(TCP_CONNECTION, this);

            // XEP-0198 (Stream Management):
            this.MESSAGE_PROCESSORS[2] = new SMConnection(TCP_CONNECTION, this);

            // Resource binding:
            RecourceBindingConnection recourceBindingConnection = new RecourceBindingConnection(TCP_CONNECTION, this);

            recourceBindingConnection.ResourceBound += RecourceBindingConnection_ResourceBound;
            this.MESSAGE_PROCESSORS[3] = recourceBindingConnection;
            //-------------------------------------------------------------

            NetworkHelper.Instance.NetworkChanged += Instance_NetworkChanged;

            this.omemoHelper          = null;
            this.DISCO_FEATURE_HELPER = new DiscoFeatureHelper(this);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Enables OMEMO encryption for messages for this
        /// Has to be enabled before connecting.
        /// </summary>
        /// <param name="omemoStore">A persistent store for all the OMEMO related data (e.g. device ids and keys).</param>
        /// <returns>Returns true on success.</returns>
        public bool EnableOmemo(IOmemoStore omemoStore)
        {
            if (state != ConnectionState.DISCONNECTED)
            {
                throw new InvalidOperationException(LOGGER_TAG + "Unable to enable OMEMO. state != " + ConnectionState.DISCONNECTED.ToString() + " - " + state.ToString());
            }

            // Load OMEMO keys for the current account:
            if (!account.omemoKeysGenerated)
            {
                Logger.Error(LOGGER_TAG + "Failed to enable OMEMO for account: " + account.getBareJid() + " - generate OMEMO keys first!");
                omemoHelper = null;
                return(false);
            }
            else if (!account.loadOmemoKeys(omemoStore))
            {
                omemoHelper = null;
                return(false);
            }
            omemoHelper = new OmemoHelper(this, omemoStore);
            return(true);
        }