diff options
| author | me_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac> | 2013-08-30 13:34:02 +0000 |
|---|---|---|
| committer | me_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac> | 2013-08-30 13:34:02 +0000 |
| commit | 0ef7c1d7471ce20fe54729c27858db864aedee91 (patch) | |
| tree | 3a71b713febdbea19fc7358af68d9f6cfa3c3158 | |
| parent | bfd5528f28264772a245dc29f41d4bb5d29fb1eb (diff) | |
| download | pica-pica-0ef7c1d7471ce20fe54729c27858db864aedee91.tar.gz pica-pica-0ef7c1d7471ce20fe54729c27858db864aedee91.zip | |
updated pica-client to make it handle new id format. quint32 type for id is replaced with QByteArray in most places. Implemented verification callbacks in client and node that allow self-signed certificates
git-svn-id: svn://localhost/project_picapica/trunk@266 fb96df88-216d-11de-830c-f3023f12d8ac
27 files changed, 259 insertions, 188 deletions
diff --git a/PICA_client.c b/PICA_client.c index 61bc8ef..40d708e 100755 --- a/PICA_client.c +++ b/PICA_client.c @@ -124,8 +124,41 @@ if (!x) return PICA_id_from_X509(x, id); } -static int verify_callback(int preverify_ok, X509_STORE_CTX *x509_ctx) +static int verify_callback(int preverify_ok, X509_STORE_CTX *ctx) { //return 1 for self-signed certificates +char buf[256]; +X509 *err_cert; +int err, depth; +SSL *ssl; + +err_cert = X509_STORE_CTX_get_current_cert(ctx); +err = X509_STORE_CTX_get_error(ctx); +depth = X509_STORE_CTX_get_error_depth(ctx); + + +X509_NAME_oneline(X509_get_subject_name(err_cert), buf, 256); + +if (err == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT && depth == 0) + preverify_ok = 1; + +if (!preverify_ok) { + printf("verify error:num=%d:%s:depth=%d:%s\n", err, + X509_verify_cert_error_string(err), 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); + } + + + return preverify_ok; } @@ -246,8 +279,8 @@ ret=SSL_accept(chnl->ssl); if (ret!=1) { - //printf("ret=%i of SSL_connect or accept\n",ret);//debug - //printf("SSL_get_error says:%i\n",SSL_get_error(chnl->ssl,ret));//debug + //printf("ret=%i of SSL_connect or accept\n",ret);//debug + //printf("SSL_get_error says:%i\n",SSL_get_error(chnl->ssl,ret));//debug err_ret=PICA_ERRSSL; goto error_ret_; } diff --git a/PICA_node.c b/PICA_node.c index 09a3197..e123fce 100755 --- a/PICA_node.c +++ b/PICA_node.c @@ -153,7 +153,28 @@ struct PICA_msginfo _msginfo_newconn[]={ {PICA_PROTO_NODECONNREQ,PICA_MSG_FIXED_SIZE,PICA_PROTO_NODECONNREQ_SIZE,procmsg_NODECONNREQ} }; +static int verify_callback(int preverify_ok, X509_STORE_CTX *ctx) +{ //return 1 for self-signed certificates +char buf[256]; +X509 *err_cert; +int err, depth; +err_cert = X509_STORE_CTX_get_current_cert(ctx); +err = X509_STORE_CTX_get_error(ctx); +depth = X509_STORE_CTX_get_error_depth(ctx); + +X509_NAME_oneline(X509_get_subject_name(err_cert), buf, 256); + +if (err == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT && depth == 0) + preverify_ok = 1; + +if (!preverify_ok) +{ +PICA_info("certificate verification error:num=%d:%s:depth=%d:%s\n", err, X509_verify_cert_error_string(err), depth, buf); +} + + return preverify_ok; +} unsigned int procmsg_INITREQ(unsigned char* buf,unsigned int size,void* ptr) { @@ -352,18 +373,25 @@ struct client *i,*o;//i - указатель на вызывающего клиÐ unsigned char *callee_id; struct PICA_proto_msg *mp; -PICA_debug1("received CONNREQOUTG"); - i=(struct client *)ptr; +PICA_debug1("received CONNREQOUTG from %s", PICA_id_to_base64(i->id, NULL)); + callee_id = buf+2; if ((o = client_tree_search(callee_id))) { - #warning "duplicated connections" // сделать проверку на наличие уже имеющегося соединения между клиентами - // и если оно есть, то разрывать его, либо... ???? надо подумать + if (cclink_list_search(i->id, callee_id)) + { + PICA_info("duplicate request for existing channel is ignored"); + return 1; + } - #warning "self" // а еще - если клиент вызывает сам себя? + if (memcmp(i->id, callee_id, PICA_ID_SIZE) == 0) + { + PICA_info("request to create channel to self is ignored"); + return 1; + } //отправить o _CONNREQINC if ((mp = client_wbuf_push(o,PICA_PROTO_CONNREQINC,PICA_PROTO_CONNREQINC_SIZE))) @@ -1325,7 +1353,7 @@ ret = SSL_CTX_load_verify_locations(ctx, nodecfg.CA_cert_file, 0); if (!ret) PICA_fatal("call to SSL_CTX_load_verify_locations failed(). Check if %s exists and is accesible", nodecfg.CA_cert_file); -SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL); +SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, verify_callback); return 1; } diff --git a/pica-client/accounts.cpp b/pica-client/accounts.cpp index eb7b035..4b70b47 100644 --- a/pica-client/accounts.cpp +++ b/pica-client/accounts.cpp @@ -34,7 +34,7 @@ void Accounts::Add(AccountRecord &acc) lasterr=query.lastError(); } -void Accounts::Delete(quint32 id) +void Accounts::Delete(QByteArray id) { QSqlQuery query; @@ -61,7 +61,7 @@ QList<Accounts::AccountRecord> Accounts::GetAccounts() while(query.next()) { - r.id = query.value(0).toUInt(); + r.id = query.value(0).toByteArray(); r.name = query.value(1).toString(); r.cert_file = query.value(2).toString(); r.pkey_file = query.value(3).toString(); @@ -73,7 +73,7 @@ QList<Accounts::AccountRecord> Accounts::GetAccounts() return L; } -QString Accounts::GetName(quint32 id) +QString Accounts::GetName(QByteArray id) { QSqlQuery query; diff --git a/pica-client/accounts.h b/pica-client/accounts.h index f51eace..9389906 100644 --- a/pica-client/accounts.h +++ b/pica-client/accounts.h @@ -11,7 +11,7 @@ class Accounts public: struct AccountRecord { - quint32 id; + QByteArray id; QString name; QString cert_file; QString pkey_file; @@ -20,9 +20,9 @@ public: Accounts(QString storage); void Add(AccountRecord& acc); - void Delete(quint32 id); + void Delete(QByteArray id); QList<AccountRecord> GetAccounts(); - QString GetName(quint32 id); + QString GetName(QByteArray id); bool isOK(); QString GetLastError(); diff --git a/pica-client/accountswindow.cpp b/pica-client/accountswindow.cpp index 4ad1c75..d83bf31 100644 --- a/pica-client/accountswindow.cpp +++ b/pica-client/accountswindow.cpp @@ -9,6 +9,7 @@ #include "openssltool.h" #include <QMessageBox> #include <QApplication> +#include <cstring> AccountsWindow::AccountsWindow(QWidget *parent) : QMainWindow(parent), @@ -66,7 +67,7 @@ void AccountsWindow::LoadAccounts() else { for (int i=0;i<L.count();i++) - cb_accounts->addItem(QString("(%1) %2").arg(L[i].id).arg(L[i].name),L[i].id); + cb_accounts->addItem(QString("(%1) %2").arg(L[i].id.toBase64().constData()).arg(L[i].name),L[i].id); bt_login->setEnabled(true); } @@ -75,13 +76,12 @@ void AccountsWindow::LoadAccounts() void AccountsWindow::login_click() { - account_id = (cb_accounts->itemData(cb_accounts->currentIndex())).toUInt(); - + memcpy(account_id,(cb_accounts->itemData(cb_accounts->currentIndex())).toByteArray().constData(), PICA_ID_SIZE); int L_index; for (int i=0;i<L.count();i++) { - if (L[i].id==account_id) + if (L[i].id== QByteArray((const char*)account_id, PICA_ID_SIZE)) { L_index = i; break; @@ -108,12 +108,12 @@ void AccountsWindow::login_click() void AccountsWindow::CreateAccount(QString CertFilename, QString PkeyFilename, bool copyfiles) { - quint32 id; + QByteArray id(PICA_ID_SIZE, 0); int ret; - ret = PICA_get_id_from_cert(CertFilename.toUtf8().constData(),&id); + ret = PICA_get_id_from_cert_file(CertFilename.toUtf8().constData(), (unsigned char*)id.data()); - if (0 == id || 0 == ret) + if (0 == ret) { QMessageBox mbx; mbx.setText("Invalid certificate"); @@ -124,16 +124,16 @@ void AccountsWindow::CreateAccount(QString CertFilename, QString PkeyFilename, b QString name = OpenSSLTool::NameFromCertFile(CertFilename); Accounts::AccountRecord rec; - QString certfilename,pkeyfilename; + QString certfilename, pkeyfilename; if (copyfiles) { QDir dir(config_dir); - dir.mkdir(QString::number(id)); - dir.cd(QString::number(id)); + dir.mkdir(name + id.toHex().constData()); + dir.cd(name + id.toHex().constData()); - certfilename=dir.absolutePath()+"/"+QString::number(id)+"_cert.pem"; - pkeyfilename=dir.absolutePath()+"/"+QString::number(id)+"_pkey.pem"; + certfilename=dir.absolutePath()+"/" + id.toHex().constData() + "_cert.pem"; + pkeyfilename=dir.absolutePath()+"/" + id.toHex().constData() + "_pkey.pem"; QFile::copy(CertFilename,certfilename); QFile::copy(PkeyFilename,pkeyfilename); @@ -148,7 +148,7 @@ void AccountsWindow::CreateAccount(QString CertFilename, QString PkeyFilename, b rec.name=name; rec.cert_file=certfilename; rec.pkey_file=pkeyfilename; - rec.CA_file= config_defaultCA; + rec.CA_file= certfilename;//config_defaultCA; accounts.Add(rec); @@ -188,10 +188,10 @@ void AccountsWindow::add_click() void AccountsWindow::delete_click() { - quint32 id = (cb_accounts->itemData(cb_accounts->currentIndex())).toUInt(); + QByteArray id = (cb_accounts->itemData(cb_accounts->currentIndex())).toByteArray(); if (QMessageBox::No== - QMessageBox::question(this,tr("Deleting account"),tr("Are you sure you want to delete account %1 ?").arg(id),QMessageBox::Yes,QMessageBox::No)) + QMessageBox::question(this,tr("Deleting account"),tr("Are you sure you want to delete account %1 ?").arg(id.toBase64().constData()),QMessageBox::Yes,QMessageBox::No)) return; //TODO ask user if he wants to wipe certificate and private key too diff --git a/pica-client/askpassword.cpp b/pica-client/askpassword.cpp index 0629502..05c0c83 100644 --- a/pica-client/askpassword.cpp +++ b/pica-client/askpassword.cpp @@ -4,7 +4,7 @@ #include <QInputDialog> QMutex AskPassword::passwd_mutex; -QMap<quint32,QString> AskPassword::idpasswd; +QMap<QByteArray,QString> AskPassword::idpasswd; AskPassword::AskPassword(QObject *parent) : QObject(parent) @@ -15,7 +15,7 @@ AskPassword::AskPassword(QObject *parent) : int AskPassword::ask_password_cb(char *buf, int size, int rwflag, void *userdata) { QString pswd; - quint32 id = *((quint32*)userdata); + QByteArray id = QByteArray((const char*) userdata, PICA_ID_SIZE); passwd_mutex.lock(); @@ -44,9 +44,9 @@ void AskPassword::password_dialog() { bool ok; QString title = QObject::tr("Enter private key passphrase"); - QString text = QObject::tr(QString("Passphrase for (%1)").arg(account_id).toUtf8().constData()); + QString text = QObject::tr(QString("Passphrase for (%1)").arg(QByteArray((const char*)account_id, PICA_ID_SIZE).toBase64().constData()).toUtf8().constData()); QString psw = QInputDialog::getText((QWidget*)mainwindow,title,text,QLineEdit::Password,QString(),&ok); if (ok) - idpasswd[account_id] = psw; + idpasswd[QByteArray((const char*)account_id, PICA_ID_SIZE)] = psw; } diff --git a/pica-client/askpassword.h b/pica-client/askpassword.h index c841693..6abc009 100644 --- a/pica-client/askpassword.h +++ b/pica-client/askpassword.h @@ -14,7 +14,7 @@ public: private: void emit_sig(); - static QMap<quint32,QString> idpasswd; + static QMap<QByteArray,QString> idpasswd; static QMutex passwd_mutex; signals: diff --git a/pica-client/chatwindow.cpp b/pica-client/chatwindow.cpp index 0366c86..1a7c141 100644 --- a/pica-client/chatwindow.cpp +++ b/pica-client/chatwindow.cpp @@ -10,8 +10,8 @@ #include <QDateTime> #include <QMessageBox> -ChatWindow::ChatWindow(quint32 peer_id) : - QWidget(0), peer_id_(peer_id), hist(config_dbname, account_id) +ChatWindow::ChatWindow(QByteArray peer_id) : + QWidget(0), peer_id_(peer_id), hist(config_dbname, QByteArray((const char*)account_id, PICA_ID_SIZE)) { QVBoxLayout *layout; @@ -33,7 +33,7 @@ ChatWindow::ChatWindow(quint32 peer_id) : setLayout(layout); - setWindowTitle(QString::number(peer_id)); + setWindowTitle(peer_id.toBase64()); setWindowIcon(picapica_ico_sit); QWidget::setAttribute(Qt::WA_DeleteOnClose); @@ -60,24 +60,24 @@ ChatWindow::ChatWindow(quint32 peer_id) : layout->insertSpacing(0, menu->size().height()); { - Contacts ct(config_dbname, account_id); + Contacts ct(config_dbname, QByteArray((const char*)account_id, PICA_ID_SIZE)); peer_name_ = ct.GetContactName(peer_id_); if (peer_name_.isEmpty()) - peer_name_ = QString::number(peer_id_); + peer_name_ = peer_id_.toBase64(); } { Accounts ac(config_dbname); - my_name_ = ac.GetName(account_id); + my_name_ = ac.GetName(QByteArray((const char*)account_id, PICA_ID_SIZE)); if (my_name_.isEmpty()) - my_name_ = QString::number(account_id); + my_name_ = QByteArray((const char*)account_id, PICA_ID_SIZE).toBase64(); } } -void ChatWindow::put_message(QString msg, quint32 id, bool is_me) +void ChatWindow::put_message(QString msg, QByteArray id, bool is_me) { QString color, name; QTextCharFormat fmt; @@ -95,7 +95,7 @@ void ChatWindow::put_message(QString msg, quint32 id, bool is_me) if (id == peer_id_) name = peer_name_; else - name = QString::number(id); + name = id.toBase64(); } pos = draw_message(msg, name, QDateTime::currentDateTime().toString(), color, false); @@ -159,7 +159,7 @@ void ChatWindow::print_history(QList<History::HistoryRecord> H) if (r.peer_id == peer_id_) name = peer_name_; else - name = QString::number(r.peer_id); + name = r.peer_id.toBase64(); } dt.setTime_t(r.timestamp); @@ -210,7 +210,7 @@ void ChatWindow::msg_informational(QString text) void ChatWindow::send_message() { - put_message(sendtextw->toPlainText(), account_id, true); + put_message(sendtextw->toPlainText(), QByteArray((const char*)account_id, PICA_ID_SIZE), true); hist.Add(peer_id_, sendtextw->toPlainText(), true); if (!hist.isOK()) diff --git a/pica-client/chatwindow.h b/pica-client/chatwindow.h index 4036e43..0be8ea0 100644 --- a/pica-client/chatwindow.h +++ b/pica-client/chatwindow.h @@ -25,9 +25,9 @@ class ChatWindow : public QWidget { Q_OBJECT public: - explicit ChatWindow(quint32 peer_id); + explicit ChatWindow(QByteArray peer_id); - quint32 getPeerId() { return peer_id_;}; + QByteArray getPeerId() { return peer_id_;}; signals: void msg_input(QString msg, ChatWindow *sender_window); @@ -42,7 +42,7 @@ public slots: private: QTextEdit *chatw; TextSend *sendtextw; - quint32 peer_id_; + QByteArray peer_id_; QList<int> undelivered_msgs; History hist; QMenuBar *menu; @@ -52,7 +52,7 @@ private: QString peer_name_; QString my_name_; - void put_message(QString msg, quint32 id, bool is_me); + void put_message(QString msg, QByteArray id, bool is_me); int draw_message(QString msg, QString nickname, QString datetime, QString color, bool is_delivered); void print_history(QList<History::HistoryRecord> H); diff --git a/pica-client/contactlistwidget.cpp b/pica-client/contactlistwidget.cpp index 130357f..c3096d8 100644 --- a/pica-client/contactlistwidget.cpp +++ b/pica-client/contactlistwidget.cpp @@ -27,7 +27,7 @@ ContactListWidget::ContactListWidget(QWidget *parent) : connect(this, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(start_chat())); - setContactsStorage(new Contacts(config_dbname, account_id)); + setContactsStorage(new Contacts(config_dbname, QByteArray((const char*)account_id, PICA_ID_SIZE))); } ContactListWidget::~ContactListWidget() @@ -63,9 +63,9 @@ void ContactListWidget::setContactsStorage(Contacts *ct) for (int i=0;i<contact_records.size();i++) { - addItem(QString("(%1) ").arg(contact_records[i].id)+contact_records[i].name); + addItem(QString("(%1) ").arg(contact_records[i].id.toBase64()+contact_records[i].name)); wgitem_to_recs[this->item(i)]=&contact_records[i]; - this->item(i)->setStatusTip(QString().setNum(contact_records[i].id)); + this->item(i)->setStatusTip(contact_records[i].id.toBase64()); } } @@ -76,9 +76,9 @@ void ContactListWidget::add_contact() if (ok && !input.isEmpty()) { - quint32 user_id=input.toUInt(&ok); + QByteArray user_id = QByteArray::fromBase64(input.toAscii()).left(PICA_ID_SIZE); - if (!ok) + if (user_id.size() != PICA_ID_SIZE) { QMessageBox mbx; mbx.setIcon(QMessageBox::Warning); @@ -92,7 +92,7 @@ void ContactListWidget::add_contact() { QMessageBox mbx; mbx.setIcon(QMessageBox::Warning); - mbx.setText(tr("User \"(%1) %2\" already exists").arg(user_id).arg(contact_records[i].name)); + mbx.setText(tr("User \"(%1) %2\" already exists").arg(user_id.toBase64().constData()).arg(contact_records[i].name)); mbx.exec(); return; } @@ -113,7 +113,7 @@ void ContactListWidget::add_contact() return; } - addItem(QString("(%1) ").arg(user_id)); + addItem(QString("(%1) ").arg(user_id.toBase64().constData())); contact_records.append(r); wgitem_to_recs[this->item(this->count()-1)]=&contact_records.last(); @@ -132,7 +132,7 @@ mbx.setDefaultButton(QMessageBox::No); if (QMessageBox::Yes==mbx.exec()) { - quint32 rm_id; + QByteArray rm_id; QListWidgetItem *rm_ptr; storage->Delete(rm_id = wgitem_to_recs[currentItem()]->id); diff --git a/pica-client/contacts.cpp b/pica-client/contacts.cpp index 9e87298..fb482d2 100644 --- a/pica-client/contacts.cpp +++ b/pica-client/contacts.cpp @@ -3,7 +3,7 @@ //#include <QMessageBox> -Contacts::Contacts(QString storage, quint32 user_account_id) +Contacts::Contacts(QString storage, QByteArray user_account_id) : account_id_(user_account_id) { dbconn=QSqlDatabase::addDatabase("QSQLITE"); @@ -35,7 +35,7 @@ QString Contacts::GetLastError() return lasterr.text(); } -void Contacts::Add(quint32 id) +void Contacts::Add(QByteArray id) { QSqlQuery query; @@ -47,7 +47,7 @@ void Contacts::Add(quint32 id) lasterr=query.lastError(); } -void Contacts::Delete(quint32 id) +void Contacts::Delete(QByteArray id) { QSqlQuery query; @@ -76,7 +76,7 @@ QList<Contacts::ContactRecord> Contacts::GetContacts() while(query.next()) { - r.id=query.value(0).toUInt(); + r.id=query.value(0).toByteArray(); r.name=query.value(1).toString(); //CSTRL.append(" ("+query.value(0).toString()+") "+query.value(1).toString()); L<<r; @@ -85,7 +85,7 @@ QList<Contacts::ContactRecord> Contacts::GetContacts() return L; } -QString Contacts::GetContactCert(quint32 id) +QString Contacts::GetContactCert(QByteArray id) { QSqlQuery query; @@ -104,7 +104,7 @@ QString Contacts::GetContactCert(quint32 id) return query.value(0).toString(); } -QString Contacts::GetContactName(quint32 id) +QString Contacts::GetContactName(QByteArray id) { QSqlQuery query; @@ -123,7 +123,7 @@ QString Contacts::GetContactName(quint32 id) return query.value(0).toString(); } -void Contacts::SetContactCert(quint32 id, QString &cert_pem) +void Contacts::SetContactCert(QByteArray id, QString &cert_pem) { QSqlQuery query; @@ -137,7 +137,7 @@ void Contacts::SetContactCert(quint32 id, QString &cert_pem) } -void Contacts::SetContactName(quint32 id, QString name) +void Contacts::SetContactName(QByteArray id, QString name) { QSqlQuery query; diff --git a/pica-client/contacts.h b/pica-client/contacts.h index 47f6cd8..f3f7663 100644 --- a/pica-client/contacts.h +++ b/pica-client/contacts.h @@ -11,25 +11,25 @@ class Contacts public: struct ContactRecord { - quint32 id; + QByteArray id; QString name; }; - Contacts(QString storage, quint32 user_account_id); + Contacts(QString storage, QByteArray user_account_id); - void Add(quint32 id); - void Delete(quint32 id); + void Add(QByteArray id); + void Delete(QByteArray id); QList<ContactRecord> GetContacts(); - QString GetContactCert(quint32 id); - QString GetContactName(quint32 id); - void SetContactCert(quint32 id, QString &cert_pem); - void SetContactName(quint32 id, QString name); + QString GetContactCert(QByteArray id); + QString GetContactName(QByteArray id); + void SetContactCert(QByteArray id, QString &cert_pem); + void SetContactName(QByteArray id, QString name); QString GetLastError(); bool isOK(); private: QSqlDatabase dbconn; QSqlError lasterr; - quint32 account_id_; + QByteArray account_id_; }; #endif // CONTACTS_H diff --git a/pica-client/dialogs/addaccountdialog.cpp b/pica-client/dialogs/addaccountdialog.cpp index 97e8851..8d31ca4 100644 --- a/pica-client/dialogs/addaccountdialog.cpp +++ b/pica-client/dialogs/addaccountdialog.cpp @@ -68,9 +68,9 @@ void AddAccountDialog::OK() return; } - quint32 id; + QByteArray id(PICA_ID_SIZE, 0); - if (!PICA_get_id_from_cert(cert_filename->text().toUtf8().constData(),&id)) + if (!PICA_get_id_from_cert_file(cert_filename->text().toUtf8().constData(), (unsigned char*)id.data())) { QMessageBox mbx; mbx.setText(tr("Invalid certificate file")); diff --git a/pica-client/dialogs/forgedcertdialog.cpp b/pica-client/dialogs/forgedcertdialog.cpp index 5ca7f23..ccf144f 100644 --- a/pica-client/dialogs/forgedcertdialog.cpp +++ b/pica-client/dialogs/forgedcertdialog.cpp @@ -3,7 +3,7 @@ #include <QGridLayout> #include <QLabel> -ForgedCertDialog::ForgedCertDialog(quint32 peer_id, QString received_cert, QString stored_cert, QWidget *parent) : +ForgedCertDialog::ForgedCertDialog(QByteArray peer_id, QString received_cert, QString stored_cert, QWidget *parent) : QDialog(parent), received_cert_(received_cert), stored_cert_(stored_cert) @@ -14,7 +14,7 @@ ForgedCertDialog::ForgedCertDialog(quint32 peer_id, QString received_cert, QStri "Previously stored and currently present certificates for user %1 do not match.\n\ This means that probably someone is trying to eavesdrop your communication\n\ using man-in-the-middle attack or impersonate the user.\n\ -Connection aborted.").arg(peer_id)); +Connection aborted.").arg(peer_id.toBase64().constData())); btOK = new QPushButton(tr("OK")); btShow_stored_cert = new QPushButton(tr("View Stored Certificate...")); diff --git a/pica-client/dialogs/forgedcertdialog.h b/pica-client/dialogs/forgedcertdialog.h index bc259d4..5386f14 100644 --- a/pica-client/dialogs/forgedcertdialog.h +++ b/pica-client/dialogs/forgedcertdialog.h @@ -9,7 +9,7 @@ class ForgedCertDialog : public QDialog { Q_OBJECT public: - explicit ForgedCertDialog(quint32 peer_id, QString received_cert, QString stored_cert, QWidget *parent = 0); + explicit ForgedCertDialog(QByteArray peer_id, QString received_cert, QString stored_cert, QWidget *parent = 0); private: QString received_cert_; diff --git a/pica-client/globals.h b/pica-client/globals.h index 5202548..82eec86 100644 --- a/pica-client/globals.h +++ b/pica-client/globals.h @@ -10,13 +10,15 @@ #endif +#include "../PICA_id.h" + //variables are defined in main.cpp extern class QString config_dir; extern class QString config_dbname; extern class QString config_defaultCA; extern class SkyNet *skynet; extern class MainWindow *mainwindow; -extern unsigned int account_id; +extern unsigned char account_id[PICA_ID_SIZE]; extern class AskPassword *askpassword; extern class MsgUIRouter *msguirouter; extern class QIcon picapica_ico_sit; diff --git a/pica-client/history.cpp b/pica-client/history.cpp index 31a4e22..b3883dd 100644 --- a/pica-client/history.cpp +++ b/pica-client/history.cpp @@ -1,7 +1,7 @@ #include "history.h" #include <QDebug> -History::History(QString storage, quint32 my_id) +History::History(QString storage, QByteArray my_id) : me_(my_id) { dbconn=QSqlDatabase::addDatabase("QSQLITE"); @@ -20,7 +20,7 @@ History::History(QString storage, quint32 my_id) //check result, if foreign keys support is on } -void History::Add(quint32 peer_id, QString message, bool is_me) +void History::Add(QByteArray peer_id, QString message, bool is_me) { QSqlQuery query; @@ -50,7 +50,7 @@ void History::Add(quint32 peer_id, QString message, bool is_me) lasterr=query.lastError(); } -void History::SetDelivered(quint32 peer_id) +void History::SetDelivered(QByteArray peer_id) { QSqlQuery query; @@ -66,7 +66,7 @@ void History::SetDelivered(quint32 peer_id) lasterr=query.lastError(); } -QList<History::HistoryRecord> History::GetMessages(quint32 peer_id, quint32 start_timestamp, quint32 end_timestamp) +QList<History::HistoryRecord> History::GetMessages(QByteArray peer_id, quint32 start_timestamp, quint32 end_timestamp) { QList<HistoryRecord> L; HistoryRecord r; @@ -90,7 +90,7 @@ QList<History::HistoryRecord> History::GetMessages(quint32 peer_id, quint32 star while(query.next()) { - r.peer_id = query.value(0).toUInt(); + r.peer_id = query.value(0).toByteArray(); r.is_me = query.value(1).toBool(); r.is_delivered = query.value(2).toBool(); r.timestamp = query.value(3).toUInt(); @@ -102,9 +102,9 @@ QList<History::HistoryRecord> History::GetMessages(quint32 peer_id, quint32 star return L; } -QMap<quint32, QList<QString> > History::GetUndeliveredMessages() +QMap<QByteArray, QList<QString> > History::GetUndeliveredMessages() { - QMap<quint32, QList<QString> > M; + QMap<QByteArray, QList<QString> > M; QSqlQuery query; query.setForwardOnly(true); @@ -122,7 +122,7 @@ QMap<quint32, QList<QString> > History::GetUndeliveredMessages() while(query.next()) { - M[query.value(0).toUInt()] << query.value(1).toString(); + M[query.value(0).toByteArray()] << query.value(1).toString(); } return M; diff --git a/pica-client/history.h b/pica-client/history.h index ebf6dbd..6fc1e08 100644 --- a/pica-client/history.h +++ b/pica-client/history.h @@ -12,18 +12,18 @@ class History public: struct HistoryRecord { - quint32 peer_id; + QByteArray peer_id; bool is_me; bool is_delivered; quint32 timestamp; QString message; }; - History(QString storage, quint32 my_id); - void Add(quint32 peer_id, QString message, bool is_me);//is_me - true - message from me to peer, false - from peer to me - void SetDelivered(quint32 peer_id); //mark first undelivered message from me to peer as delivered - QList<HistoryRecord> GetMessages(quint32 peer_id, quint32 start_timestamp, quint32 end_timestamp); - QMap<quint32, QList<QString> > GetUndeliveredMessages(); + History(QString storage, QByteArray my_id); + void Add(QByteArray peer_id, QString message, bool is_me);//is_me - true - message from me to peer, false - from peer to me + void SetDelivered(QByteArray peer_id); //mark first undelivered message from me to peer as delivered + QList<HistoryRecord> GetMessages(QByteArray peer_id, quint32 start_timestamp, quint32 end_timestamp); + QMap<QByteArray, QList<QString> > GetUndeliveredMessages(); bool isOK(); QString GetLastError(); @@ -31,7 +31,7 @@ private: QSqlDatabase dbconn; QSqlError lasterr; - quint32 me_; + QByteArray me_; }; #endif // HISTORY_H diff --git a/pica-client/main.cpp b/pica-client/main.cpp index b4a71e8..9dd93fe 100644 --- a/pica-client/main.cpp +++ b/pica-client/main.cpp @@ -17,7 +17,7 @@ QString config_dir; QString config_dbname; SkyNet *skynet; MainWindow *mainwindow; -unsigned int account_id; +unsigned char account_id[PICA_ID_SIZE]; class AskPassword *askpassword; class MsgUIRouter *msguirouter; @@ -59,7 +59,7 @@ static bool create_database() query.exec("create table accounts \ (\ - id int primary key, \ + id blob primary key, \ name varchar(64), \ cert_file varchar(255) not null, \ pkey_file varchar(255) not null, \ @@ -71,10 +71,10 @@ static bool create_database() query.exec("create table contacts \ (\ - id int,\ + id blob,\ name varchar(64), \ cert_pem text(2048), \ - account_id int not null, \ + account_id blob not null, \ primary key(id, account_id),\ foreign key(account_id) references accounts(id) on delete cascade\ );"); @@ -101,8 +101,8 @@ static bool create_database() query.exec("create table history \ (\ id integer primary key autoincrement, \ - contact_id int not null, \ - account_id int not null, \ + contact_id blob not null, \ + account_id blob not null, \ timestamp int not null, \ is_me int not null, \ is_delivered int not null, \ @@ -124,7 +124,7 @@ static bool create_database() if (query.lastError().isValid()) goto showerror; - query.exec("insert into schema_version values (1, strftime('%s','now'));"); //current schema version. update when needed + query.exec("insert into schema_version values (2, strftime('%s','now'));"); //current schema version. update when needed if (query.lastError().isValid()) showerror: diff --git a/pica-client/mainwindow.cpp b/pica-client/mainwindow.cpp index 40b2544..a0bfc44 100644 --- a/pica-client/mainwindow.cpp +++ b/pica-client/mainwindow.cpp @@ -85,7 +85,7 @@ void MainWindow::SetStatus(bool connected) if (connected) { status->setCurrentIndex(0); - setWindowTitle(tr("Pica Pica Messenger - ") + QString::number(account_id)); + setWindowTitle(tr("Pica Pica Messenger - ") + QByteArray((const char*)account_id, PICA_ID_SIZE).toBase64()); } else { diff --git a/pica-client/msguirouter.cpp b/pica-client/msguirouter.cpp index 9750d4d..d4a62c4 100644 --- a/pica-client/msguirouter.cpp +++ b/pica-client/msguirouter.cpp @@ -17,15 +17,15 @@ MsgUIRouter::MsgUIRouter(QObject *parent) : QObject(parent) { - connect(skynet, SIGNAL(MessageReceived(quint32,QString)), this, SLOT(msg_from_peer(quint32,QString))); - connect(skynet, SIGNAL(UnableToDeliver(quint32,QString)), this, SLOT(delivery_failed(quint32,QString))); - connect(skynet, SIGNAL(Delivered(quint32)), this, SLOT(delivered(quint32))); - connect(skynet, SIGNAL(CertificateForged(quint32,QString,QString)), this, SLOT(scary_cert_message(quint32,QString,QString))); + connect(skynet, SIGNAL(MessageReceived(QByteArray,QString)), this, SLOT(msg_from_peer(QByteArray,QString))); + connect(skynet, SIGNAL(UnableToDeliver(QByteArray,QString)), this, SLOT(delivery_failed(QByteArray,QString))); + connect(skynet, SIGNAL(Delivered(QByteArray)), this, SLOT(delivered(QByteArray))); + connect(skynet, SIGNAL(CertificateForged(QByteArray,QString,QString)), this, SLOT(scary_cert_message(QByteArray,QString,QString))); connect(skynet, SIGNAL(ErrMsgFromNode(QString)), this, SLOT(notification(QString))); } -void MsgUIRouter::create_chatwindow(quint32 peer_id) +void MsgUIRouter::create_chatwindow(QByteArray peer_id) { ChatWindow *cw; @@ -39,7 +39,7 @@ void MsgUIRouter::create_chatwindow(quint32 peer_id) cw->show(); } -void MsgUIRouter::msg_from_peer(quint32 from, QString msg) +void MsgUIRouter::msg_from_peer(QByteArray from, QString msg) { if ( ! chatwindows.contains(from)) @@ -56,7 +56,7 @@ void MsgUIRouter::msg_to_peer(QString msg, ChatWindow *sender_window) skynet->SendMessage(sender_window->getPeerId(), msg); } -void MsgUIRouter::start_chat(quint32 peer_id) +void MsgUIRouter::start_chat(QByteArray peer_id) { if ( ! chatwindows.contains(peer_id)) { @@ -73,7 +73,7 @@ void MsgUIRouter::chatwindow_closed(ChatWindow *sender_window) chatwindows.remove(sender_window->getPeerId()); } -void MsgUIRouter::delivery_failed(quint32 to, QString msg) +void MsgUIRouter::delivery_failed(QByteArray to, QString msg) { // if (chatwindows.contains(to)) // { @@ -81,7 +81,7 @@ void MsgUIRouter::delivery_failed(quint32 to, QString msg) // } } -void MsgUIRouter::delivered(quint32 to) +void MsgUIRouter::delivered(QByteArray to) { if (chatwindows.contains(to)) { @@ -89,13 +89,13 @@ void MsgUIRouter::delivered(quint32 to) } else { - History h(config_dbname, account_id); + History h(config_dbname, QByteArray((const char*)account_id, PICA_ID_SIZE)); h.SetDelivered(to); } } -void MsgUIRouter::scary_cert_message(quint32 peer_id, QString received_cert, QString stored_cert) +void MsgUIRouter::scary_cert_message(QByteArray peer_id, QString received_cert, QString stored_cert) { ForgedCertDialog fcd(peer_id, received_cert, stored_cert); fcd.exec(); diff --git a/pica-client/msguirouter.h b/pica-client/msguirouter.h index 2ae0007..eafa54b 100644 --- a/pica-client/msguirouter.h +++ b/pica-client/msguirouter.h @@ -18,20 +18,20 @@ signals: public slots: void msg_to_peer(QString msg, ChatWindow *sender_window); - void msg_from_peer(quint32 from, QString msg); + void msg_from_peer(QByteArray from, QString msg); void chatwindow_closed(ChatWindow *sender_window); - void start_chat(quint32 peer_id); + void start_chat(QByteArray peer_id); - void delivery_failed(quint32 to, QString msg); - void delivered(quint32 to); + void delivery_failed(QByteArray to, QString msg); + void delivered(QByteArray to); - void scary_cert_message(quint32 peer_id, QString received_cert, QString stored_cert); + void scary_cert_message(QByteArray peer_id, QString received_cert, QString stored_cert); void notification(QString text); private: - QMap<quint32,ChatWindow*> chatwindows; + QMap<QByteArray,ChatWindow*> chatwindows; - void create_chatwindow(quint32 peer_id); + void create_chatwindow(QByteArray peer_id); }; diff --git a/pica-client/openssltool.cpp b/pica-client/openssltool.cpp index 2c19223..705437e 100644 --- a/pica-client/openssltool.cpp +++ b/pica-client/openssltool.cpp @@ -20,12 +20,16 @@ QString OpenSSLTool::NameFromCertFile(QString cert_file) return QString(); QByteArray result = openssl.readAll(); - QRegExp rx("CN = [0-9]+\\#([^\\s\\#]+)"); - + QRegExp rxOld("CN = [0-9]+\\#([^\\s\\#]+)"); + QRegExp rx("CN = ([^\\s\\#]+)"); QString name=QString::fromUtf8( result.constData()); - if (name.contains(rx)) + if (name.contains(rxOld)) + { + name=rxOld.cap(1); + } + else if (name.contains(rx)) { name=rx.cap(1); } @@ -48,12 +52,16 @@ QString OpenSSLTool::NameFromCertString(QString cert_pem) return QString(); QByteArray result = openssl.readAll(); - QRegExp rx("CN = [0-9]+\\#([^\\s\\#]+)"); - + QRegExp rxOld("CN = [0-9]+\\#([^\\s\\#]+)"); + QRegExp rx("CN = ([^\\s\\#]+)"); QString name=QString::fromUtf8( result.constData()); - if (name.contains(rx)) + if (name.contains(rxOld)) + { + name=rxOld.cap(1); + } + else if (name.contains(rx)) { name=rx.cap(1); } diff --git a/pica-client/skynet.cpp b/pica-client/skynet.cpp index c86c22c..111b79a 100644 --- a/pica-client/skynet.cpp +++ b/pica-client/skynet.cpp @@ -30,7 +30,7 @@ PICA_client_init(&cbs); nodelink = NULL; -connect(this, SIGNAL(PeerCertificateReceived(quint32,QString,bool*)), this, SLOT(verify_peer_cert(quint32,QString,bool*)),Qt::DirectConnection); +connect(this, SIGNAL(PeerCertificateReceived(QByteArray,QString,bool*)), this, SLOT(verify_peer_cert(QByteArray,QString,bool*)),Qt::DirectConnection); } @@ -60,12 +60,12 @@ void SkyNet::nodethread_connected(QString addr, quint16 port, NodeThread *thread emit BecameSelfAware(); //restore old peer connections, if any - QList<quint32> c2c_peer_ids; + QList<QByteArray> c2c_peer_ids; //load undelivered messages from history if (msgqueues.isEmpty()) { - History h(config_dbname, account_id); + History h(config_dbname, QByteArray((const char*)account_id, PICA_ID_SIZE)); msgqueues = h.GetUndeliveredMessages(); } @@ -78,7 +78,7 @@ void SkyNet::nodethread_connected(QString addr, quint16 port, NodeThread *thread write_mutex.lock(); struct PICA_chaninfo *chan = NULL; - ret = PICA_create_channel(nodelink, c2c_peer_ids[i], &chan); + ret = PICA_create_channel(nodelink, (const unsigned char*)c2c_peer_ids[i].constData(), &chan); qDebug()<<"restoring channel to "<<c2c_peer_ids[i]<<" ret ="<<ret<<"\n"; write_mutex.unlock(); @@ -95,12 +95,12 @@ void SkyNet::node_status_changed(QString addr, quint16 port, bool alive) nodes.UpdateStatus(nr, alive); } -void SkyNet::verify_peer_cert(quint32 peer_id, QString cert_pem, bool *verified) +void SkyNet::verify_peer_cert(QByteArray peer_id, QString cert_pem, bool *verified) { // ViewCertDialog vcd; // vcd.SetCert(cert_pem); // vcd.exec(); - Contacts cnt(config_dbname, account_id); + Contacts cnt(config_dbname, QByteArray((const char*)account_id, PICA_ID_SIZE)); QString stored_cert; if ((stored_cert = cnt.GetContactCert(peer_id)).isEmpty()) @@ -148,7 +148,7 @@ void SkyNet::timerEvent(QTimerEvent *e) { if (self_aware) { - QList<quint32> c2c_peer_ids = msgqueues.keys(); + QList<QByteArray> c2c_peer_ids = msgqueues.keys(); write_mutex.lock(); @@ -160,7 +160,7 @@ if (self_aware) struct PICA_chaninfo *chan = NULL; - ret = PICA_create_channel(nodelink, c2c_peer_ids[i], &chan); + ret = PICA_create_channel(nodelink, (const unsigned char*)c2c_peer_ids[i].constData(), &chan); qDebug()<<"restoring channel to "<<c2c_peer_ids[i]<<" ret ="<<ret<<" in timer event\n"; @@ -213,7 +213,7 @@ bool SkyNet::isSelfAware() return self_aware; } -void SkyNet::SendMessage(quint32 to, QString msg) +void SkyNet::SendMessage(QByteArray to, QString msg) { int ret = PICA_OK; struct PICA_chaninfo *iptr; @@ -242,7 +242,7 @@ if ( (iptr = find_active_chan(to)) ) { struct PICA_chaninfo *chan = NULL; - ret = PICA_create_channel(nodelink, to, &chan); + ret = PICA_create_channel(nodelink, (const unsigned char*)to.constData(), &chan); QList<QString> l; l.append(msg); @@ -257,7 +257,7 @@ write_mutex.unlock();//>> } -void SkyNet::flush_msgqueue(quint32 to) +void SkyNet::flush_msgqueue(QByteArray to) { struct PICA_chaninfo *chan; int ret; @@ -288,7 +288,7 @@ void SkyNet::flush_msgqueue(quint32 to) } } -struct PICA_chaninfo * SkyNet::find_active_chan(quint32 peer_id) +struct PICA_chaninfo * SkyNet::find_active_chan(QByteArray peer_id) { if (!nodelink) return NULL; @@ -297,7 +297,7 @@ struct PICA_chaninfo *iptr = nodelink->chan_list_head; while(iptr) { - if (iptr->state == PICA_CHANSTATE_ACTIVE && iptr->peer_id == peer_id) + if (iptr->state == PICA_CHANSTATE_ACTIVE && QByteArray((const char*)iptr->peer_id, PICA_ID_SIZE) == peer_id) break; iptr = iptr->next; @@ -306,9 +306,9 @@ while(iptr) return iptr; } -QList<quint32> SkyNet::filter_existing_chans(QList<quint32> peer_ids) +QList<QByteArray> SkyNet::filter_existing_chans(QList<QByteArray> peer_ids) { - QList<quint32> ret = peer_ids; + QList<QByteArray> ret = peer_ids; if (!nodelink) return ret; @@ -317,8 +317,8 @@ QList<quint32> SkyNet::filter_existing_chans(QList<quint32> peer_ids) while(iptr) { - if (peer_ids.contains(iptr->peer_id)) - ret.removeOne(iptr->peer_id); + if (peer_ids.contains(QByteArray((const char*)iptr->peer_id, PICA_ID_SIZE))) + ret.removeOne((const char*)iptr->peer_id); iptr = iptr->next; } @@ -326,22 +326,22 @@ QList<quint32> SkyNet::filter_existing_chans(QList<quint32> peer_ids) return ret; } -void SkyNet::emit_Delivered(quint32 to) +void SkyNet::emit_Delivered(QByteArray to) { emit Delivered(to); } -void SkyNet::emit_MessageReceived(quint32 from, QString msg) +void SkyNet::emit_MessageReceived(QByteArray from, QString msg) { emit MessageReceived(from, msg); } -void SkyNet::emit_UnableToDeliver(quint32 to, QString msg) +void SkyNet::emit_UnableToDeliver(QByteArray to, QString msg) { emit UnableToDeliver(to, msg); } -void SkyNet::emit_PeerCertificateReceived(quint32 peer_id, QString cert_pem, bool *verified) +void SkyNet::emit_PeerCertificateReceived(QByteArray peer_id, QString cert_pem, bool *verified) { emit PeerCertificateReceived(peer_id, cert_pem, verified); } @@ -351,36 +351,36 @@ void SkyNet::emit_PeerCertificateReceived(quint32 peer_id, QString cert_pem, boo //all callbacks are executed in separate thread, created in Nodethread instance, REMEMBER THAT !!! // write_mutex is locked -void SkyNet::newmsg_cb(unsigned int peer_id, char *msgbuf, unsigned int nb, int type) +void SkyNet::newmsg_cb(const unsigned char *peer_id, char *msgbuf, unsigned int nb, int type) { QString msg = QString::fromUtf8(msgbuf, nb); -skynet->emit_MessageReceived(peer_id, msg); +skynet->emit_MessageReceived(QByteArray((const char*)peer_id, PICA_ID_SIZE), msg); } -void SkyNet::msgok_cb(unsigned int peer_id) +void SkyNet::msgok_cb(const unsigned char *peer_id) { -skynet->emit_Delivered(peer_id); +skynet->emit_Delivered(QByteArray((const char*)peer_id, PICA_ID_SIZE)); } -void SkyNet::channel_established_cb(unsigned int peer_id) +void SkyNet::channel_established_cb(const unsigned char *peer_id) { -skynet->flush_msgqueue(peer_id); +skynet->flush_msgqueue(QByteArray((const char*)peer_id, PICA_ID_SIZE)); } -void SkyNet::channel_failed(unsigned int peer_id) +void SkyNet::channel_failed(const unsigned char *peer_id) { - qDebug()<<"channel failed ("<<peer_id<<")\n"; + qDebug()<<"channel failed ("<<QByteArray((const char*)peer_id, PICA_ID_SIZE).toBase64()<<")\n"; } -int SkyNet::accept_cb(unsigned int caller_id) +int SkyNet::accept_cb(const unsigned char *caller_id) { return 1; //implement black list } -void SkyNet::notfound_cb(unsigned int callee_id) +void SkyNet::notfound_cb(const unsigned char *callee_id) { - qDebug()<<"not found ("<<callee_id<<")\n"; + qDebug()<<"not found ("<<QByteArray((const char*)callee_id, PICA_ID_SIZE).toBase64()<<")\n"; /* if (skynet->msgqueues.contains(callee_id)) @@ -395,9 +395,9 @@ void SkyNet::notfound_cb(unsigned int callee_id) */ } -void SkyNet::channel_closed_cb(unsigned int peer_id, int reason) +void SkyNet::channel_closed_cb(const unsigned char *peer_id, int reason) { - qDebug()<<"channel closed ("<<peer_id<<")\n"; + qDebug()<<"channel closed ("<<QByteArray((const char*)peer_id, PICA_ID_SIZE).toBase64()<<")\n"; } @@ -407,11 +407,11 @@ void SkyNet::nodelist_cb(int type, void *addr_bin, const char *addr_str, unsigne skynet->nodes.Add(nr); } -int SkyNet::peer_cert_verify_cb(unsigned int peer_id, const char *cert_pem, unsigned int nb) +int SkyNet::peer_cert_verify_cb(const unsigned char *peer_id, const char *cert_pem, unsigned int nb) { bool verified = true; - skynet->emit_PeerCertificateReceived(peer_id, QString::fromAscii(cert_pem, nb), &verified); + skynet->emit_PeerCertificateReceived(QByteArray((const char*)peer_id, PICA_ID_SIZE), QString::fromAscii(cert_pem, nb), &verified); if (!verified) return 0; diff --git a/pica-client/skynet.h b/pica-client/skynet.h index 4612e35..b9029a1 100644 --- a/pica-client/skynet.h +++ b/pica-client/skynet.h @@ -19,17 +19,17 @@ public: QString& Status(); void Exit(); - void SendMessage(quint32 to, QString msg); + void SendMessage(QByteArray to, QString msg); Accounts::AccountRecord CurrentAccount() {return skynet_account;}; signals: - void MessageReceived(quint32 from, QString msg); - void UnableToDeliver(quint32 to, QString msg); - void Delivered(quint32 to); + void MessageReceived(QByteArray from, QString msg); + void UnableToDeliver(QByteArray to, QString msg); + void Delivered(QByteArray to); void BecameSelfAware(); void LostSelfAwareness(); - void PeerCertificateReceived(quint32 peer_id, QString cert_pem, bool *verified); - void CertificateForged(quint32 peer_id, QString received_cert, QString stored_cert); + void PeerCertificateReceived(QByteArray peer_id, QString cert_pem, bool *verified); + void CertificateForged(QByteArray peer_id, QString received_cert, QString stored_cert); void ErrMsgFromNode(QString msg); private: @@ -40,44 +40,44 @@ private: struct PICA_conninfo *nodelink; Accounts::AccountRecord skynet_account; QMutex write_mutex; - QMap<quint32, QList<QString> > msgqueues; + QMap<QByteArray, QList<QString> > msgqueues; int timer_id; void timerEvent(QTimerEvent * e); - void flush_msgqueue(quint32 to); - struct PICA_chaninfo *find_active_chan(quint32 peer_id); - QList<quint32> filter_existing_chans(QList<quint32> peer_ids); + void flush_msgqueue(QByteArray to); + struct PICA_chaninfo *find_active_chan(QByteArray peer_id); + QList<QByteArray> filter_existing_chans(QList<QByteArray> peer_ids); - void emit_MessageReceived(quint32 from, QString msg); - void emit_UnableToDeliver(quint32 to, QString msg); - void emit_Delivered(quint32 to); - void emit_PeerCertificateReceived(quint32 peer_id, QString cert_pem, bool *verified); + void emit_MessageReceived(QByteArray from, QString msg); + void emit_UnableToDeliver(QByteArray to, QString msg); + void emit_Delivered(QByteArray to); + void emit_PeerCertificateReceived(QByteArray peer_id, QString cert_pem, bool *verified); //получение сообщения. - static void newmsg_cb(unsigned int peer_id,char* msgbuf,unsigned int nb,int type); + static void newmsg_cb(const unsigned char *peer_id,char* msgbuf,unsigned int nb,int type); //получение подтверждения о доставке сообщения - static void msgok_cb(unsigned int peer_id); + static void msgok_cb(const unsigned char *peer_id); //создание канала с собеседником - static void channel_established_cb(unsigned int peer_id); + static void channel_established_cb(const unsigned char *peer_id); //создать канал не удалось - static void channel_failed(unsigned int peer_id); + static void channel_failed(const unsigned char *peer_id); //входящий запрос на создание канала от пользователя с номером caller_id - static int accept_cb(unsigned int caller_id); + static int accept_cb(const unsigned char *caller_id); //запрошенный пользователь не найден, в оффлайне или отказался от общения - static void notfound_cb(unsigned int callee_id); + static void notfound_cb(const unsigned char *callee_id); - static void channel_closed_cb(unsigned int peer_id, int reason); + static void channel_closed_cb(const unsigned char *peer_id, int reason); static void nodelist_cb(int type, void *addr_bin, const char *addr_str, unsigned int port); - static int peer_cert_verify_cb(unsigned int peer_id, const char *cert_pem, unsigned int nb); + static int peer_cert_verify_cb(const unsigned char *peer_id, const char *cert_pem, unsigned int nb); private slots: void nodethread_finished(); void nodethread_connected(QString addr, quint16 port, NodeThread *thread); void node_status_changed(QString addr,quint16 port,bool alive); - void verify_peer_cert(quint32 peer_id, QString cert_pem, bool *verified); + void verify_peer_cert(QByteArray peer_id, QString cert_pem, bool *verified); }; diff --git a/tests/test_client b/tests/test_client Binary files differindex 1af0445..e900e8d 100755 --- a/tests/test_client +++ b/tests/test_client diff --git a/tests/test_client.c b/tests/test_client.c index dad82ae..f8ef157 100755 --- a/tests/test_client.c +++ b/tests/test_client.c @@ -125,7 +125,7 @@ PICA_client_init(&cbs); printf("making connection...\n"); //PICA_new_connection(const char *nodeaddr, unsigned int port, const char *CA_file, const char *cert_file, const char *pkey_file, const char* password, struct PICA_conninfo **ci) -ret=PICA_new_connection(argv[1], atoi(argv[2]), "trusted_CA.pem", argv[3],argv[3],NULL,&c); +ret=PICA_new_connection(argv[1], atoi(argv[2]), /*"trusted_CA.pem"*/ argv[3], argv[3],argv[3],NULL,&c); ERR_print_errors_fp(stdout); |
