Tweaked tabs and order. Added NewsFeed.

Added Template functions for ssl+xpgp code.



git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@853 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
drbob 2008-11-29 20:17:58 +00:00
parent 01a2ca1468
commit 77cb7314bc
3 changed files with 160 additions and 16 deletions

View File

@ -310,3 +310,91 @@ bool GPGAuthMgr::SignData(const void *data, const uint32_t len, std::string &sig
}
#if 0
bool setupSSL(SSL_CTX *ctx)
{
/* signer is done by pgp, so we have to manually authenticate the certificate.
*/
SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, verify_pgp_callback);
SSL_CTX_set_verify_depth(1);
/* generate a certificate */
}
static int verify_pgp_callback(int preverify_ok, X509_STORE_CTX *ctx)
{
char buf[256];
X509 *err_cert;
int err, depth;
SSL *ssl;
mydata_t *mydata;
err_cert = X509_STORE_CTX_get_current_cert(ctx);
err = X509_STORE_CTX_get_error(ctx);
depth = X509_STORE_CTX_get_error_depth(ctx);
/*
* Retrieve the pointer to the SSL of the connection currently treated
* and the application specific data stored into the SSL object.
*/
ssl = X509_STORE_CTX_get_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx());
mydata = SSL_get_ex_data(ssl, mydata_index);
X509_NAME_oneline(X509_get_subject_name(err_cert), buf, 256);
/*
* Catch a too long certificate chain. The depth limit set using
* SSL_CTX_set_verify_depth() is by purpose set to "limit+1" so
* that whenever the "depth>verify_depth" condition is met, we
* have violated the limit and want to log this error condition.
* We must do it here, because the CHAIN_TOO_LONG error would not
* be found explicitly; only errors introduced by cutting off the
* additional certificates would be logged.
*/
if (depth > mydata->verify_depth) {
preverify_ok = 0;
err = X509_V_ERR_CERT_CHAIN_TOO_LONG;
X509_STORE_CTX_set_error(ctx, err);
}
if (!preverify_ok) {
printf("verify error:num=%d:%s:depth=%d:%s\n", err,
X509_verify_cert_error_string(err), depth, buf);
}
else if (mydata->verbose_mode)
{
printf("depth=%d:%s\n", depth, buf);
}
/*
* At this point, err contains the last verification error. We can use
* it for something special
*/
if (!preverify_ok && (err == X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT))
{
X509_NAME_oneline(X509_get_issuer_name(ctx->current_cert), buf, 256);
printf("issuer= %s\n", buf);
}
if (mydata->always_continue)
return 1;
else
return preverify_ok;
}
#endif

View File

@ -157,6 +157,24 @@ class GPGAuthMgr: public p3AuthMgr
bool SignData(std::string input, std::string &sign);
bool SignData(const void *data, const uint32_t len, std::string &sign);
/*********************************************************************************/
/************************* PGP Specific functions ********************************/
/*********************************************************************************/
/*
* These support the authentication process.
*
*/
/*
*
*/
bool checkSignature(std::string id, std::string hash, std::string signature);
/*********************************************************************************/
/************************* OTHER FUNCTIONS ***************************************/
/*********************************************************************************/
@ -182,6 +200,15 @@ class GPGAuthMgr: public p3AuthMgr
gpgme_ctx_t CTX;
};
/*****
*
* Support Functions for OpenSSL verification.
*
*/
int verify_pgp_callback(int preverify_ok, X509_STORE_CTX *ctx);
#endif

View File

@ -27,12 +27,17 @@
#include <QIcon>
#include <QPixmap>
#include "ChannelFeed.h"
#include "ForumsDialog.h"
#include "NetworkView.h"
#include "LinksDialog.h"
#include "GamesDialog.h"
#include "PhotoDialog.h"
#include "channels/channelsDialog.h"
#include "ForumsDialog.h"
#include "NewsFeed.h"
#include "PeersFeed.h"
#include "TransferFeed.h"
#include "MsgFeed.h"
#include "ChannelFeed.h"
#include <rshare.h>
#include "MainWindow.h"
@ -93,6 +98,7 @@
#define IMAGE_MINIMIZE ":/images/window_nofullscreen.png"
#define IMAGE_MAXIMIZE ":/images/window_fullscreen.png"
#define IMG_HELP ":/images/help.png"
#define IMAGE_NEWSFEED ":/images/konqsidebar_news24.png"
/* Keys for UI Preferences */
#define UI_PREF_PROMPT_ON_QUIT "UIOptions/ConfirmOnQuit"
@ -160,26 +166,40 @@ MainWindow::MainWindow(QWidget* parent, Qt::WFlags flags)
QActionGroup *grp = new QActionGroup(this);
ui.stackPages->add(networkDialog = new NetworkDialog(ui.stackPages),
createPageAction(QIcon(IMAGE_NETWORK), tr("Network"), grp));
NewsFeed *newsFeed = NULL;
ui.stackPages->add(newsFeed = new NewsFeed(ui.stackPages),
createPageAction(QIcon(IMAGE_NEWSFEED), tr("News Feed"), grp));
ui.stackPages->add(peersDialog = new PeersDialog(ui.stackPages),
createPageAction(QIcon(IMAGE_PEERS), tr("Friends"), grp));
//PeersFeed *peersFeed = NULL;
//ui.stackPages->add(peersFeed = new PeersFeed(ui.stackPages),
// createPageAction(QIcon(IMAGE_PEERS), tr("Peers"), grp));
ui.stackPages->add(searchDialog = new SearchDialog(ui.stackPages),
createPageAction(QIcon(IMAGE_SEARCH), tr("Search"), grp));
ui.stackPages->add(transfersDialog = new TransfersDialog(ui.stackPages),
createPageAction(QIcon(IMAGE_TRANSFERS), tr("Transfers"), grp));
createPageAction(QIcon(IMAGE_TRANSFERS), tr("Transfers"), grp));
//TransferFeed *transferFeed = NULL;
//ui.stackPages->add(transferFeed = new TransferFeed(ui.stackPages),
// createPageAction(QIcon(IMAGE_LINKS), tr("Transfers"), grp));
ui.stackPages->add(sharedfilesDialog = new SharedFilesDialog(ui.stackPages),
createPageAction(QIcon(IMAGE_FILES), tr("Files"), grp));
//ui.stackPages->add(chatDialog = new ChatDialog(ui.stackPages),
// createPageAction(QIcon(IMAGE_CHAT), tr("Chat"), grp));
//MsgFeed *msgFeed = NULL;
//ui.stackPages->add(msgFeed = new MsgFeed(ui.stackPages),
// createPageAction(QIcon(IMAGE_MESSAGES), tr("Messages"), grp));
ui.stackPages->add(messagesDialog = new MessagesDialog(ui.stackPages),
createPageAction(QIcon(IMAGE_MESSAGES), tr("Messages"), grp));
createPageAction(QIcon(IMAGE_MESSAGES), tr("Messages"), grp));
LinksDialog *linksDialog = NULL;
@ -197,6 +217,7 @@ MainWindow::MainWindow(QWidget* parent, Qt::WFlags flags)
ui.stackPages->add(forumsDialog = new ForumsDialog(ui.stackPages),
createPageAction(QIcon(IMAGE_FORUMS), tr("Forums"), grp));
#else
channelsDialog = NULL;
ui.stackPages->add(linksDialog = new LinksDialog(ui.stackPages),
@ -211,6 +232,10 @@ MainWindow::MainWindow(QWidget* parent, Qt::WFlags flags)
#endif
ui.stackPages->add(networkDialog = new NetworkDialog(ui.stackPages),
createPageAction(QIcon(IMAGE_NETWORK), tr("Network"), grp));
//ui.stackPages->add(new HelpDialog(ui.stackPages),
// createPageAction(QIcon(IMAGE_ABOUT), tr("About/Help"), grp));
@ -540,8 +565,8 @@ void MainWindow::createActions()
_appAct = new QAction(QIcon(IMAGE_UNFINISHED), tr("Applications"), this);
connect(_appAct, SIGNAL(triggered()),this, SLOT(showApplWindow()));
_smplayerAct = new QAction(QIcon(IMAGE_SMPLAYER), tr("SMPlayer"), this);
connect(_smplayerAct, SIGNAL(triggered()),this, SLOT(showsmplayer()));
//_smplayerAct = new QAction(QIcon(IMAGE_SMPLAYER), tr("SMPlayer"), this);
//connect(_smplayerAct, SIGNAL(triggered()),this, SLOT(showsmplayer()));
_helpAct = new QAction(QIcon(IMG_HELP), tr("Help"), this);
connect(_helpAct, SIGNAL(triggered()), this, SLOT(showHelpDialog()));
@ -668,14 +693,17 @@ void MainWindow::startqcheckers()
/** Shows smplayer */
void MainWindow::showsmplayer()
{
static SMPlayer * smplayer = 0;
return;
if (mSMPlayer == 0)
{
mSMPlayer = new SMPlayer(QString::null, this);
mSMPlayer->gui()->hide();
}
else
{
mSMPlayer->gui()->show();
}
mSMPlayer->gui()->show();
}
void MainWindow::playFiles(QStringList files)
@ -686,7 +714,8 @@ void MainWindow::playFiles(QStringList files)
std::cerr << "MainWindow::playFiles() showsmplayer() done" << std::endl;
mSMPlayer->gui()->openFiles(files);
if (mSMPlayer)
mSMPlayer->gui()->openFiles(files);
std::cerr << "MainWindow::playFiles() done" << std::endl;
}