int CSocket::getPeerName(string &strPeerAddress, uint16_t &iPeerPort) { if(m_iDomain == AF_UNIX){ return getPeerName(strPeerAddress); } struct sockaddr_in stPeer; bzero(&stPeer, sizeof(struct sockaddr)); socklen_t iLen = sizeof(sockaddr); if(::getpeername(m_iFd, (struct sockaddr *)&stPeer, &iLen) != 0){ TDOEH_SET_ERROR_NUMBER_RETURN(errno); } char szAddr[20]; if(NULL == inet_ntop(m_iDomain, &(stPeer.sin_addr), szAddr, sizeof(szAddr))){ TDOEH_SET_ERROR_NUMBER_RETURN(errno); } strPeerAddress = szAddr; iPeerPort = ntohs(stPeer.sin_port); return E_SUCCESS; }
void TurtleRouterDialog::updateTunnelRequests( const std::vector<std::vector<std::string> >& hashes_info, const std::vector<std::vector<std::string> >& tunnels_info, const std::vector<TurtleRequestDisplayInfo >& search_reqs_info, const std::vector<TurtleRequestDisplayInfo >& tunnel_reqs_info) { // now display this in the QTableWidgets QStringList stl ; // remove all children of top level objects for(int i=0;i<_f2f_TW->topLevelItemCount();++i) { QTreeWidgetItem *taken ; while( (taken = _f2f_TW->topLevelItem(i)->takeChild(0)) != NULL) delete taken ; } for(uint i=0;i<hashes_info.size();++i) findParentHashItem(hashes_info[i][0]) ; bool unknown_hash_found = false ; // check that an entry exist for all hashes for(uint i=0;i<tunnels_info.size();++i) { const std::string& hash(tunnels_info[i][3]) ; QTreeWidgetItem *parent = findParentHashItem(hash) ; if(parent->text(0).left(14) == tr("Unknown hashes")) unknown_hash_found = true ; QString str = tr("Tunnel id") + ": " + QString::fromUtf8(tunnels_info[i][0].c_str()) + "\t [" + QString::fromUtf8(tunnels_info[i][2].c_str()) + "] --> [" + QString::fromUtf8(tunnels_info[i][1].c_str()) + "]\t\t " + tr("last transfer") + ": " + QString::fromStdString(tunnels_info[i][4]) + "\t " + tr("Speed") + ": " + QString::fromStdString(tunnels_info[i][5]) ; stl.clear() ; stl.push_back(str) ; parent->addChild(new QTreeWidgetItem(stl)) ; } for(uint i=0;i<search_reqs_info.size();++i) { QString str = tr("Request id: %1\t from [%2]\t %3 secs ago").arg(search_reqs_info[i].request_id,0,16).arg(getPeerName(search_reqs_info[i].source_peer_id)).arg(search_reqs_info[i].age); stl.clear() ; stl.push_back(str) ; top_level_s_requests->addChild(new QTreeWidgetItem(stl)) ; } top_level_s_requests->setText(0, tr("Search requests") + "(" + QString::number(search_reqs_info.size()) + ")" ) ; for(uint i=0;i<tunnel_reqs_info.size();++i) if(i+MAX_TUNNEL_REQUESTS_DISPLAY >= tunnel_reqs_info.size() || i < MAX_TUNNEL_REQUESTS_DISPLAY) { QString str = tr("Request id: %1\t from [%2]\t %3 secs ago").arg(tunnel_reqs_info[i].request_id,0,16).arg(getPeerName(tunnel_reqs_info[i].source_peer_id)).arg(tunnel_reqs_info[i].age); stl.clear() ; stl.push_back(str) ; top_level_t_requests->addChild(new QTreeWidgetItem(stl)) ; } else if(i == MAX_TUNNEL_REQUESTS_DISPLAY) { stl.clear() ; stl.push_back(QString("...")) ; top_level_t_requests->addChild(new QTreeWidgetItem(stl)) ; } top_level_t_requests->setText(0, tr("Tunnel requests") + "("+QString::number(tunnel_reqs_info.size()) + ")") ; QTreeWidgetItem *unknown_hashs_item = findParentHashItem(RsFileHash().toStdString()) ; unknown_hashs_item->setText(0,tr("Unknown hashes") + " (" + QString::number(unknown_hashs_item->childCount())+QString(")")) ; // Ok, this is a N2 search, but there are very few elements in the list. for(int i=2;i<_f2f_TW->topLevelItemCount();) { bool found = false ; if(_f2f_TW->topLevelItem(i)->text(0).left(14) == tr("Unknown hashes") && unknown_hash_found) found = true ; if(_f2f_TW->topLevelItem(i)->childCount() > 0) // this saves uploading hashes found = true ; for(uint j=0;j<hashes_info.size() && !found;++j) if(_f2f_TW->topLevelItem(i)->text(0).toStdString() == hashes_info[j][0]) found=true ; if(!found) delete _f2f_TW->takeTopLevelItem(i) ; else ++i ; } }
void TLSSocket_GnuTLS::handshake() { shared_ptr <timeoutHandler> toHandler = m_wrapped->getTimeoutHandler(); if (toHandler) { toHandler->resetTimeOut(); } if (getTracer()) { getTracer()->traceSend("Beginning SSL/TLS handshake"); } // Start handshaking process try { while (true) { resetException(); const int ret = gnutls_handshake(*m_session->m_gnutlsSession); throwException(); if (ret < 0) { if (ret == GNUTLS_E_AGAIN) { if (gnutls_record_get_direction(*m_session->m_gnutlsSession) == 0) { m_wrapped->waitForRead(); } else { m_wrapped->waitForWrite(); } } else if (ret == GNUTLS_E_INTERRUPTED) { // Non-fatal error } else { TLSSession_GnuTLS::throwTLSException("gnutls_handshake", ret); } } else { // Successful handshake break; } } } catch (...) { throw; } // Verify server's certificate(s) shared_ptr <security::cert::certificateChain> certs = getPeerCertificates(); if (certs == NULL) { throw exceptions::tls_exception("No peer certificate."); } m_session->getCertificateVerifier()->verify(certs, getPeerName()); m_connected = true; }