示例#1
0
void Dispatcher::sendTTHTreeRequest(QHostAddress host, QByteArray tthRoot, quint32 startOffset, quint32 numberOfBuckets)
{
    QByteArray *datagram = new QByteArray;
    datagram->reserve(34);
    datagram->append(UnicastPacket);
    datagram->append(TTHTreeRequestPacket);
    datagram->append(tthRoot);
    datagram->append(toQByteArray(startOffset));
    datagram->append(toQByteArray(numberOfBuckets));
    sendUnicastRawDatagram(host, datagram);
}
示例#2
0
QByteArray Dispatcher::assembleSearchPacket(QHostAddress &searchingHost, quint64 &searchID, QByteArray &searchData, bool appendBucket)
{
    QByteArray datagram;
    datagram.reserve(300);
    datagram.append(toQByteArray(searchingHost.toIPv4Address()));
    datagram.append(toQByteArray(searchID));
    datagram.append(fixedCIDLength(CID));  // moet seker wees lengte is reg, anders bevark hy die indekse wat kom
    datagram.append(toQByteArray((quint16)searchData.length()));
    datagram.append(searchData);
    if (appendBucket)
        datagram.append(networkTopology->getOwnBucket());
    return datagram;
}
示例#3
0
文件: signal.cpp 项目: l29ah/plugins
  void Signal::generatePreKeys() {
    const uint32_t preKeyCount = 100;
    uint32_t actualCount = m_storage.preKeyCount();

    if (actualCount < preKeyCount) {
      uint32_t count = preKeyCount - actualCount;
      uint32_t startId = m_storage.maxPreKeyId() + 1;
      if (startId + count >= PRE_KEY_MEDIUM_MAX_VALUE) {
        startId = 1;
      }

      signal_protocol_key_helper_pre_key_list_node *pre_keys_head = nullptr;
      if (signal_protocol_key_helper_generate_pre_keys(&pre_keys_head, startId, count, m_signalContext) == SG_SUCCESS) {
        QVector<QPair<uint32_t, QByteArray>> keys;

        signal_protocol_key_helper_pre_key_list_node *cur_node = pre_keys_head;
        signal_buffer *key_buf = nullptr;
        while (cur_node) {
          session_pre_key *pre_key = signal_protocol_key_helper_key_list_element(cur_node);
          if (session_pre_key_serialize(&key_buf, pre_key) == SG_SUCCESS) {
            keys.append(qMakePair(session_pre_key_get_id(pre_key), toQByteArray(key_buf)));
            signal_buffer_bzero_free(key_buf);
          }
          cur_node = signal_protocol_key_helper_key_list_next(cur_node);
        }
        signal_protocol_key_helper_key_list_free(pre_keys_head);

        m_storage.storePreKeys(keys);
      }
    }
  }
示例#4
0
/**
 * @brief TokenItem::toQByteArray Stores the current instance of TokenItem in a QByteArray.
 * @remarks Used in drag&drop events to pass a TokenItem through the MimeData.
 * @return QByteArray containing sufficient information about the TokenItem to reconstruct it.
 */
QByteArray TokenItem::toQByteArray() {
    QByteArray out;
    QDataStream stream(&out, QIODevice::WriteOnly);

    toQByteArray(&stream);

    return out;
}
示例#5
0
void Dispatcher::sendCIDPingForwardRequest(QHostAddress &forwardingNode, QByteArray &cid)
{
    QByteArray *datagram = new QByteArray;
    datagram->reserve(30);
    datagram->append(UnicastPacket);
    datagram->append(CIDPingForwardRequestPacket);
    datagram->append(toQByteArray(dispatchIP.toIPv4Address()));
    datagram->append(cid);
    sendUnicastRawDatagram(forwardingNode, datagram);
}
示例#6
0
void Dispatcher::sendTTHSearchMulticast(QByteArray &tth)
{
    QByteArray datagram;
    datagram.reserve(30);
    datagram.append(MulticastPacket);
    datagram.append(TTHSearchRequestPacket);
    datagram.append(toQByteArray(dispatchIP.toIPv4Address()));
    datagram.append(tth);
    sendMulticastRawDatagram(datagram);
}
示例#7
0
void Dispatcher::sendTTHSearchForwardRequest(QHostAddress &forwardingNode, QByteArray &tth)
{
    QByteArray *datagram = new QByteArray;
    datagram->reserve(30);
    datagram->append(UnicastPacket);
    datagram->append(TTHSearchForwardRequestPacket);
    datagram->append(toQByteArray(dispatchIP.toIPv4Address()));
    datagram->append(tth);
    sendUnicastRawDatagram(forwardingNode, datagram);
    //qDebug() << "Dispatcher::sendTTHSearchForwardRequest() forwardingNode tth" << forwardingNode << tth.toBase64();
}
示例#8
0
void Dispatcher::sendUnicastAnnounceForwardRequest(QHostAddress toAddr)
{
    QByteArray *datagram = new QByteArray;
    datagram->reserve(54);
    datagram->append(UnicastPacket);
    datagram->append(AnnounceForwardRequestPacket);
    datagram->append(toQByteArray(dispatchIP.toIPv4Address()));
    datagram->append(CID);
    datagram->append(networkTopology->getOwnBucketId());
    sendUnicastRawDatagram(toAddr, datagram);
}
示例#9
0
void Dispatcher::sendTTHSearchResult(QHostAddress toHost, QByteArray tth)
{
    QByteArray *datagram = new QByteArray;
    datagram->reserve(30);
    datagram->append(UnicastPacket);
    datagram->append(TTHSearchResultPacket);
    datagram->append(toQByteArray(dispatchIP.toIPv4Address()));
    datagram->append(tth);
    //TODO: uncomment post 0.1.9
    //datagram->append(CID);
    sendUnicastRawDatagram(toHost, datagram);
}
示例#10
0
QString Server::findIssue(const QString & text, int & issue_id) {
	
	issue_id = -1; // Not found
	
	QUrlQuery params;
	params.addQueryItem("filters[text][operator]", "=");
	params.addQueryItem("filters[text][value]", text);
	
	QString url = "/arx/issues/find/format/rss?issues/project_key/arx&"
	              + toQString(qUrlQueryToPostData(params));
	
	http::Request request(toUTF8(m_serverPrefix + url));
	
	boost::scoped_ptr<http::Response> response(get(request));
	
	if(!response->ok()) {
		return QString();
	}
	
	QXmlStreamReader xml(toQByteArray(response->data()));
	
	// Using XPath would have probably been simpler, but it would
	// add a dependency to QtXmlPatterns...
	// Look for the first "/rss/channel/item/link" entry...
	const QString XML_PATH[] = { "rss", "channel", "item", "link" };
	
	size_t currentItem = 0;
	QString issueLink;
	while(!xml.atEnd() && !xml.hasError()) {
		
		// Read next element
		QXmlStreamReader::TokenType token = xml.readNext();
		
		if(currentItem == size_t(boost::size(XML_PATH))) {
			QString issue = xml.text().toString();
			if(getIssueIdFromUrl(toUTF8(issue), issue_id)) {
				return issue;
			}
			break;
		}
		
		// If token is StartElement, we'll see if we can read it.
		if(token == QXmlStreamReader::StartElement && xml.name() == XML_PATH[currentItem]) {
			currentItem++;
		}
		
	}
	
	return QString();
}
示例#11
0
文件: signal.cpp 项目: l29ah/plugins
  Bundle Signal::collectBundle() {
    generatePreKeys();

    Bundle bundle;

    bundle.signedPreKeyId = m_storage.signedPreKeyid();

    session_signed_pre_key *signed_pre_key = nullptr;
    if (signal_protocol_signed_pre_key_load_key(m_storage.storeContext(), &signed_pre_key, bundle.signedPreKeyId) != SG_SUCCESS) {
      return bundle;
    }

    bundle.signedPreKeySignature = toQByteArray(session_signed_pre_key_get_signature(signed_pre_key),
                                                session_signed_pre_key_get_signature_len(signed_pre_key));

    QByteArray signedPreKeyPublicKey = getPublicKey(session_signed_pre_key_get_key_pair(signed_pre_key));
    if (!signedPreKeyPublicKey.isNull()) {
      bundle.signedPreKeyPublic = signedPreKeyPublicKey;
      bundle.identityKeyPublic = getIdentityPublicKey();

      foreach (auto preKey, m_storage.loadAllPreKeys()) {
        session_pre_key *pre_key = nullptr;
        if (session_pre_key_deserialize(&pre_key,
                                        reinterpret_cast<const uint8_t *>(preKey.second.data()),
                                        static_cast<size_t>(preKey.second.size()),
                                        m_signalContext) == SG_SUCCESS) {
          QByteArray preKeyPublicKey = getPublicKey(session_pre_key_get_key_pair(pre_key));
          if (!preKeyPublicKey.isNull()) {
            bundle.preKeys.append(qMakePair(preKey.first, preKeyPublicKey));
          }
          SIGNAL_UNREF(pre_key);
        }
      }
      if (!bundle.preKeys.isEmpty()) {
        bundle.loaded = true;
      }
    }
示例#12
0
QTextStream* LongStringPrivate::textStream() const
{
    const QByteArray input = toQByteArray();
    return new QTextStream(input);
}
示例#13
0
QDataStream* LongStringPrivate::dataStream() const
{
    const QByteArray input = toQByteArray();
    return new QDataStream(input);
}