blob: d3c9f9db616b77d4fe91fc14655695885878d7df [file] [log] [blame]
/*
Copyright (C) 2006-2013 Werner Dittmann
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser 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