* #35924: added zrtp module build instructions
diff --git a/jni/libzrtp/src/libzrtpcpp/ZrtpUserCallback.h b/jni/libzrtp/src/libzrtpcpp/ZrtpUserCallback.h
new file mode 100644
index 0000000..3e4871c
--- /dev/null
+++ b/jni/libzrtp/src/libzrtpcpp/ZrtpUserCallback.h
@@ -0,0 +1,234 @@
+/*

+  Copyright (C) 2006-2008 Werner Dittmann

+

+  This program is free software: you can redistribute it and/or modify

+  it under the terms of the GNU General Public License as published by

+  the Free Software Foundation, either version 3 of the License, or

+  (at your option) any later version.

+

+  This program is distributed in the hope that it will be useful,

+  but WITHOUT ANY WARRANTY; without even the implied warranty of

+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

+  GNU General Public License for more details.

+

+  You should have received a copy of the GNU General Public License

+  along with this program.  If not, see <http://www.gnu.org/licenses/>.

+*/

+

+#ifndef _ZRTPUSERCALLBACK_H_

+#define _ZRTPUSERCALLBACK_H_

+

+/**

+ * @file ZrtpUserCallback.h

+ * @brief The ZRTP UserCallback class

+ *

+ * @ingroup GNU_ZRTP

+ * @{

+ */

+

+#include <stdint.h>

+#include <string>

+

+#include <libzrtpcpp/ZrtpCodes.h>

+

+/**

+ * Application callback methods.

+ *

+ * The ccRTP specific part of GNU ZRTP uses these callback methods

+ * to report ZRTP events to the application. This class implements a

+ * default behaviour for each callback method, usually just a return.

+ *

+ * An application may extend this class and overload methods

+ * to implement its own behaviour. The application must register its

+ * callback class using ZrtpQueue#setUserCallback().

+ *

+ * <b>CAVEAT</b><br/>

+ * All methods of the user callback class and classes that

+ * extend this class run in the context of the RTP thread. Thus it is

+ * of paramount importance to keep the execution time of the methods

+ * as short as possible.

+ *

+ * @author Werner Dittmann <Werner.Dittmann@t-online.de>

+ */

+

+class __EXPORT ZrtpUserCallback {

+

+    public:

+

+        /// Create the stadard user callback class.

+        ZrtpUserCallback() {}

+

+        virtual ~ZrtpUserCallback() {};

+

+        /**

+         * Inform user interface that security is active now.

+         *

+         * ZRTP calls this method if the sender and the receiver are

+         * in secure mode now.

+         *

+         * @param cipher

+         *    Name and mode of cipher used to encrypt the SRTP stream

+         */

+        virtual void secureOn(std::string cipher) {

+            return;

+        }

+        /**

+         * Inform user interface that security is not active any more.

+         *

+         * ZRTP calls this method if either the sender or the receiver

+         * left secure mode.

+         *

+         */

+        virtual void secureOff() {

+            return;

+        }

+

+        /**

+         * Show the Short Authentication String (SAS) on user interface.

+         *

+         * ZRTP calls this method to display the SAS and inform about the SAS

+         * verification status. The user interface shall enable a SAS verfication

+         * button (or similar UI element). The user shall click on this UI

+         * element after he/she confirmed the SAS code with the partner.

+         *

+         * @param sas

+         *     The string containing the SAS.

+         * @param verified

+         *    If <code>verified</code> is true then SAS was verified by both

+         *    parties during a previous call, otherwise it is set to false.

+         */

+        virtual void showSAS(std::string sas, bool verified) {

+            return;

+        }

+

+        /**

+         * Inform the user that ZRTP received "go clear" message from its peer.

+         *

+         * On receipt of a go clear message the user is requested to confirm

+         * a switch to unsecure (clear) modus. Until the user confirms ZRTP

+         * (and the underlying RTP) does not send any data.

+         */

+        virtual void confirmGoClear() {

+            return;

+        }

+

+        /**

+         * Show some information to user.

+         *

+         * ZRTP calls this method to display some information to the user.

+         * Along with the message ZRTP provides a severity indicator that

+         * defines: Info, Warning, Error, and Alert. Refer to the <code>

+         * MessageSeverity</code> enum in <code>ZrtpCodes.h</code>. The

+         * UI may use this indicator to highlight messages or alike.

+         *

+         * @param sev

+         *     Severity of the message.

+         * @param subCode

+         *     The subcode identifying the reason.

+         */

+        virtual void showMessage(GnuZrtpCodes::MessageSeverity sev, int32_t subCode) {

+            return;

+        }

+

+        /**

+         * ZRTPQueue calls this if the negotiation failed.

+         *

+         * ZRTPQueue calls this method in case ZRTP negotiation failed. The

+         * parameters show the severity as well as some explanatory text.

+         * Refer to the <code>MessageSeverity</code> enum above.

+         *

+         * @param severity

+         *     This defines the message's severity

+         * @param subCode

+         *     The subcode identifying the reason.

+         */

+        virtual void zrtpNegotiationFailed(GnuZrtpCodes::MessageSeverity severity,

+                                           int32_t subCode) {

+            return;

+        }

+

+        /**

+         * ZRTPQueue calls this method if the other side does not support ZRTP.

+         *

+         * If the other side does not answer the ZRTP <em>Hello</em> packets then

+         * ZRTP calls this method.

+         *

+         */

+        virtual void zrtpNotSuppOther() {

+            return;

+        }

+

+        /**

+         * ZRTPQueue calls this method to inform about a PBX enrollment request.

+         *

+         * Please refer to chapter 8.3 ff to get more details about PBX enrollment

+         * and SAS relay.

+         *

+         * @param info

+         *    Give some information to the user about the PBX requesting an

+         *    enrollment.

+         *

+         */

+        virtual void zrtpAskEnrollment(GnuZrtpCodes::InfoEnrollment info) {

+            return;

+        }

+

+        /**

+         * ZRTPQueue calls this method to inform about PBX enrollment result.

+         *

+         * Informs the use about the acceptance or denial of an PBX enrollment

+         * request

+         *

+         * @param info

+         *    Give some information to the user about the result of an

+         *    enrollment.

+         *

+         */

+        virtual void zrtpInformEnrollment(GnuZrtpCodes::InfoEnrollment info) {

+            return;

+        }

+

+        /**

+         * ZRTPQueue calls this method to request a SAS signature.

+         *

+         * After ZRTP core was able to compute the Short Authentication String

+         * (SAS) it calls this method. The client may now use an approriate

+         * method to sign the SAS. The client may use

+         * setSignatureData() of ZrtpQueue to store the signature

+         * data an enable signature transmission to the other peer. Refer

+         * to chapter 8.2 of ZRTP specification.

+         *

+         * @param sasHash

+         *    Pointer to the 32 byte SAS hash to be signed.

+         * @see ZrtpQueue#setSignatureData

+         *

+         */

+        virtual void signSAS(uint8_t* sasHash) {

+            return;

+        }

+

+        /**

+         * ZRTPQueue calls this method to request a SAS signature check.

+         *

+         * After ZRTP received a SAS signature in one of the Confirm packets it

+         * call this method. The client may use <code>getSignatureLength()</code>

+         * and <code>getSignatureData()</code>of ZrtpQueue to get the signature

+         * data and perform the signature check. Refer to chapter 8.2 of ZRTP

+         * specification.

+         *

+         * If the signature check fails the client may return false to ZRTP. In

+         * this case ZRTP signals an error to the other peer and terminates

+         * the ZRTP handshake.

+         *

+         * @param sasHash

+         *    Pointer to the 32 byte SAS hash that was signed by the other peer.

+         * @return

+         *    true if the signature was ok, false otherwise.

+         *

+         */

+        virtual bool checkSASSignature(uint8_t* sasHash) {

+            return true;

+        }

+};

+

+#endif