/*
 * qssl.h - Qt SSL plugin
 * Copyright (C) 2001-2003  Justin Karneges
 *
 * This library 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 2.1 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */

#ifndef QSSL_H
#define QSSL_H

#include<qobject.h>
#include<qvaluelist.h>
#include<qptrlist.h>

#ifdef Q_WS_WIN
#define QSSL_EXPORT extern "C" __declspec(dllexport)
#else
#define QSSL_EXPORT extern "C"
#endif

class QString;
class QDateTime;
class QSSLFilter;
class QSSL;
class QSSLCert;

QSSL_EXPORT QSSL *createQSSL();
QSSL_EXPORT int version();

class QSSL
{
public:
	QSSL() {}
	virtual ~QSSL() {}

	virtual QSSLCert *createCert()=0;
	virtual QSSLFilter *createFilter()=0;
};

struct QSSLCertProperty
{
	QString var;
	QString val;
};

class QSSLCert
{
public:
	enum { NoCert, Valid, HostMismatch, Rejected, Untrusted, SignatureFailed, InvalidCA, InvalidPurpose, SelfSigned, Revoked, PathLengthExceeded, Expired, Unknown };
	QSSLCert() {}
	virtual ~QSSLCert() {}

	virtual bool isNull() const=0;
	virtual bool isValid() const=0;
	virtual int validityResult() const=0;

	virtual QString serialNumber() const=0;
	virtual QDateTime notBefore() const=0;
	virtual QDateTime notAfter() const=0;
	virtual QValueList<QSSLCertProperty> subject() const=0;
	virtual QValueList<QSSLCertProperty> issuer() const=0;
	virtual QString subjectString() const=0;
	virtual QString issuerString() const=0;

	virtual QString toString() const=0;
	virtual bool fromString(const QString &)=0;

	virtual QByteArray toPEM() const=0;
};

class QSSLFilter : public QObject
{
	Q_OBJECT

public:
	QSSLFilter() {}

	virtual void reset()=0;
	virtual bool begin(const QString &host, const QPtrList<QSSLCert> &)=0;

	// send data
	virtual void send(const QByteArray &)=0;
	// check/recv data
	virtual bool isRecvData()=0;
	virtual QByteArray recv()=0;

	// pass incoming socket data to this function
	virtual void putIncomingSSLData(const QByteArray &)=0;
	// check/read outgoing socket data with this function
	virtual bool isOutgoingSSLData()=0;
	virtual QByteArray getOutgoingSSLData()=0;

	// cert related
	virtual const QSSLCert & peerCertificate() const=0;

signals:
	void handshaken(bool);
	void readyRead();
	void outgoingSSLDataReady();
};

#endif


syntax highlighted by Code2HTML, v. 0.9.1