Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Italian
  4. [Solved] QHttpMultiPart genera SIGSEGV

[Solved] QHttpMultiPart genera SIGSEGV

Scheduled Pinned Locked Moved Italian
3 Posts 2 Posters 2.1k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • F Offline
    F Offline
    fmax1975
    wrote on last edited by
    #1

    Salve a tutti,
    ho un problema nell'inviare una richiesta http con dati multipart.
    Ho usato l'esempio nella documentazione di QHttpMultiPart come punto di partenza, ma continuo a ricevere un segnale SIGSEGV ogni volta che viene avviata la richiesta web.
    Uso Qt 5.2.0 con Mingw 4.8 su Win Vista 32 bit.

    Qualcuno sa come posso risolvere il problema o indicarmi dove sto sbagliando ?
    Grazie

    Max

    Questo il codice:

    SendHistory.h
    @class SendHistory : public QObject
    {
    Q_OBJECT
    public:
    explicit SendHistory(THistoryRequest p_item, QString p_bzippedFileName, QObject *parent = 0);

    QString getContent() { return data; }
    

    protected:
    THistoryRequest item;
    QString bzippedFileName;
    QNetworkAccessManager http;
    QNetworkReply *reply;
    QHttpMultiPart *multiPart;
    QHttpPart isin, tf, future, filePart;
    QFile *file;
    QString data;
    bool httpRequestAborted;

    private slots:
    void httpFinished();

    signals:
    void done(SendHistory* sender, THistoryRequest item);

    public slots:

    };@

    SendHsitory.cpp
    @SendHistory::SendHistory(THistoryRequest p_item, QString p_bzippedFileName, QObject *parent) :
    QObject(parent)
    {
    if(!QFile::exists(p_bzippedFileName))
    return;
    item = p_item;
    bzippedFileName = p_bzippedFileName;
    data = "";
    httpRequestAborted = false;

    multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
    isin.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"isin\""));
    isin.setBody(item.isin.toLatin1());
    tf.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"tf\""));
    tf.setBody(item.tf.toLatin1());
    future.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"isFuture\""));
    future.setBody(item.future ? "1" : "0");
    QFileInfo fi(bzippedFileName);
    filePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/x-bzip2"));
    filePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"file\"; filename=\"" + fi.fileName() + "\""));
    file = new QFile(bzippedFileName);
    file->open(QIODevice::ReadOnly);
    filePart.setBodyDevice(file);
    file->setParent(multiPart);
    
    multiPart->append(isin);
    multiPart->append(tf);
    multiPart->append(future);
    multiPart->append(filePart);
    
    QString url = Config->scriptURL + "?task=UploadHistoricalData";
    QUrl address(url);
    QNetworkRequest request(address);
    reply = http.post(request, multiPart);
    multiPart->setParent(reply); // delete the multiPart with the reply
    
    QObject::connect(reply, SIGNAL(finished()), this, SLOT(httpFinished()));
    

    }

    void SendHistory::httpFinished()
    {
    if(reply==NULL)
    return;
    if(httpRequestAborted)
    data = "";
    else
    {
    QByteArray b = reply->readAll();
    reply->close();
    data = QString(b.constData());
    }
    reply->deleteLater(); // cancella anche multiPart e poi file
    if(QFile::exists(bzippedFileName))
    QFile::remove(bzippedFileName);
    emit done(this, item);
    }
    @

    1 Reply Last reply
    0
    • M Offline
      M Offline
      mcosta
      wrote on last edited by
      #2

      Ciao,

      potresti postare il risultato del trace sul core?
      Magari potresti iniziare a inserire delle stampe di debug per capire in quale punto viene generato il SIGSEV.

      Ciao

      Once your problem is solved don't forget to:

      • Mark the thread as SOLVED using the Topic Tool menu
      • Vote up the answer(s) that helped you to solve the issue

      You can embed images using (http://imgur.com/) or (http://postimage.org/)

      1 Reply Last reply
      0
      • F Offline
        F Offline
        fmax1975
        wrote on last edited by
        #3

        Ciao,
        ho risolto il problema.
        Semplicemente veniva rilasciata la memoria prima che la richiesta http fosse completata.
        Grazie dell'aiuto.

        Ciao

        1 Reply Last reply
        0

        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved