Hi all,

I'm trying to create a processing tunnel for web-browser (based on demo's browser), which should translate XML data into HTML representation.

I have overriden QNetworkAccessManager::createRequest to create new replies.
Also I have subclassed QNetworkReply and implemented its virtual methods: bytesAvailable, readData, close and abort. But no one of them are called, even signals like readyRead() and finished() are emited. What is wrong?

Qt Code:
  1. ProcessedReply::ProcessedReply(QNetworkAccessManager::Operation op, const QNetworkRequest &req, const QByteArray &data, QObject *parent)
  2. : QNetworkReply(parent), m_data(data), m_pos(0)
  3. {
  4. setOperation(op);
  5. setRequest(req);
  6. emit readyRead();
  7. emit downloadProgress(0, m_data.size());
  8. emit downloadProgress(m_data.size(), m_data.size());
  9. emit finished();
  10. }
  11.  
  12. qint64 ProcessedReply::bytesAvailable() const
  13. {
  14. return m_data.size();
  15. }
  16.  
  17. void ProcessedReply::close()
  18. {
  19.  
  20. QIODevice::close();
  21. m_pos = 0;
  22. }
  23.  
  24. qint64 ProcessedReply::readData(char *data, qint64 maxlen)
  25. {
  26. qint64 result = 0;
  27. QByteArray portion = m_data.mid(m_pos,maxlen);
  28. result = portion.size();
  29. strcpy(data, portion.data());
  30. emit readyRead();
  31. return result;
  32. }
  33.  
  34. void ProcessedReply::abort()
  35. {
  36. m_pos = 0;
  37. }
  38.  
  39. QNetworkReply *NetworkAccessManager::createRequest(Operation op,const QNetworkRequest &req,QIODevice *outgoingData)
  40. {
  41. QNetworkReply *reply = QNetworkAccessManager::createRequest(op,req,outgoingData);
  42. QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString();
  43. QUrl url = reply->url();
  44. QString scheme = url.scheme();
  45. QString fileName = url.toLocalFile();
  46. bool localLpml = url.scheme()=="file" && fileName.endsWith(".lpml");
  47. if (contentType.contains("lpml") || localLpml) {
  48. QByteArray data = LPMLProcessor::instance()->handleXMLData(reply);
  49. QNetworkReply *newReply = new ProcessedReply(op, req, data, this);
  50. return newReply;
  51. }
  52. return reply;
  53. }
To copy to clipboard, switch view to plain text mode