Soroush Rabiei
Soroush Rabiei

Reputation: 10868

Working with multiple network sessions simultaneously

How can I send requests over two network interfaces using QtWebkit? The test code seems to use the same interface. The question is:

  1. Does webkit care about QNetworkSession?:
  2. If not, How can I force webkit to use a specific network interface?

Sample code:

// main.cpp
QList<QNetworkSession*> sessions;
    QList<QNetworkConfiguration> configs = configManager.allConfigurations(QNetworkConfiguration::Active);
    foreach (const QNetworkConfiguration& config, configs) {
        sessions << new QNetworkSession(config);
        qDebug() << "Preparing network session on " << config.name();
    }
    foreach (QNetworkSession* session, sessions) {
        QWebPage* page = new QWebPage();
        PageViewer* viewer = new PageViewer(0);
        QObject::connect(page,SIGNAL(loadFinished(bool)),viewer,SLOT(showResults(bool)));
        viewer->setPage(page);
        page->setNetworkAccessManager(&accessManager);
        session->open();
        qDebug() << "Internal IP reported by the interface is:\t\t"
                 << session->interface().addressEntries().at(0).ip().toString();
        session->waitForOpened();
        page->mainFrame()->load(QUrl("http://wtfismyip.com/text"));
        session->close();
    } 

// page-viewer.cpp

void PageViewer::showResults(bool results)
{
    qDebug() << "External IP reported by `http://wtfismyip.com/text' is:\t" <<
    this->page->mainFrame()->toPlainText().trimmed();
}

Upvotes: 0

Views: 433

Answers (1)

jturcotte
jturcotte

Reputation: 1273

QNetworkSession defines if an interface is available, but it has no effect on the routing of packets.

QtWebKit passes all its network connection through QNetworkAccessManager::get, and ultimately through QTcp/SslSocket, but I don't think that it uses QAbstractSocket::bind which could be used to define which interface should be used.

So sadly I'd say that this can't be controlled through the API, this is something that might be easier to tweak at the OS routing level unless you're willing to modify QNetworkAccessManager's code.

Upvotes: 1

Related Questions