From 6b44e844a34561491c6a2e32cb4888a85b1416b9 Mon Sep 17 00:00:00 2001 From: Timothy Pearson <kb9vqf@pearsoncomputing.net> Date: Wed, 2 Apr 2014 18:35:23 -0500 Subject: Fix backtrace submission --- drkonqi/backtrace.cpp | 4 ++-- drkonqi/debuggers/gdbrc | 2 +- drkonqi/toplevel.cpp | 46 ++++++++++++++++++++++++++-------------------- drkonqi/toplevel.h | 4 ++-- 4 files changed, 31 insertions(+), 25 deletions(-) (limited to 'drkonqi') diff --git a/drkonqi/backtrace.cpp b/drkonqi/backtrace.cpp index 95bc0e054..b05c4b418 100644 --- a/drkonqi/backtrace.cpp +++ b/drkonqi/backtrace.cpp @@ -306,7 +306,7 @@ void BackTrace::processBacktrace() if (crashedExec.startsWith("/")) { libr_file *handle = NULL; libr_access_t access = LIBR_READ; - + if((handle = libr_open(const_cast<char*>(crashedExec.ascii()), access)) == NULL) { kdWarning() << "failed to open file" << crashedExec << endl; } @@ -337,7 +337,7 @@ void BackTrace::processBacktrace() if (libraryName.startsWith("/")) { libr_file *handle = NULL; libr_access_t access = LIBR_READ; - + if((handle = libr_open(const_cast<char*>(libraryName.ascii()), access)) == NULL) { kdWarning() << "failed to open file" << libraryName << endl; } diff --git a/drkonqi/debuggers/gdbrc b/drkonqi/debuggers/gdbrc index 28e804ed3..b42c4f274 100644 --- a/drkonqi/debuggers/gdbrc +++ b/drkonqi/debuggers/gdbrc @@ -166,4 +166,4 @@ NeededInValidBacktraceRegExp=\\n#5 TDECrashRegExp=\\n#0[ ]*0x[0123456789abcdefABCDEF]+.*<signal handler called>[ ]*\\n TDECrashRegExpSingle=\\n0x[0123456789abcdefABCDEF][^\\n]*\\n ThreadRegExp=\\nThread [0123456789] -InfoSharedLibraryHeader= ==== (gdb) info sharedlibrary ==== \ No newline at end of file +InfoSharedLibraryHeader===== (gdb) info sharedlibrary ==== \ No newline at end of file diff --git a/drkonqi/toplevel.cpp b/drkonqi/toplevel.cpp index 7849571ed..a35388dd5 100644 --- a/drkonqi/toplevel.cpp +++ b/drkonqi/toplevel.cpp @@ -196,14 +196,14 @@ void Toplevel :: slotUser3() { enableButton(User3, false); TQApplication::setOverrideCursor ( tqwaitCursor ); - + // generate the backtrace BackTrace *backtrace = new BackTrace(m_krashconf, TQT_TQOBJECT(this)); connect(backtrace, TQT_SIGNAL(someError()), TQT_SLOT(slotSendReportBacktraceSomeError())); connect(backtrace, TQT_SIGNAL(done(const TQString &)), TQT_SLOT(slotSendReportBacktraceDone(const TQString &))); - + backtrace->start(); - + return; } @@ -237,9 +237,9 @@ void Toplevel :: slotBacktraceSomeError() void Toplevel::slotSendReportBacktraceSomeError() { TQApplication::restoreOverrideCursor(); - + KMessageBox::sorry(0, i18n("It was not possible to generate a backtrace."), i18n("Backtrace Not Possible")); - + delete m_bugdescription; m_bugdescription = 0; @@ -260,14 +260,14 @@ void Toplevel::slotSendReportBacktraceDone(const TQString &str) "wrong.</p>\n"), i18n("Include Description"),i18n("Add Description"),i18n("Just Report the Crash")); } - + if (i == KMessageBox::Cancel) { TQApplication::restoreOverrideCursor(); enableButton(User3, true); return; } - + m_bugdescription = new BugDescription(0, true, m_krashconf->aboutData()); if (i == KMessageBox::Yes) { @@ -340,7 +340,7 @@ void Toplevel::slotSendReportBacktraceDone(const TQString &str) TQCString proofOfWork(TQUuid::createUuid().toString().ascii()); memcpy(m_backtraceSubmissionData.data() + proofOfWorkPos, proofOfWork.data(), proofOfWork.size()); sha.reset(); - sha.process(m_backtraceSubmissionData.data(), m_backtraceSubmissionData.size()); + sha.process(m_backtraceSubmissionData.data(), m_backtraceSubmissionData.size()-1); memcpy(hash.data(), sha.hash(), hash.size()); } @@ -376,7 +376,7 @@ void Toplevel::slotSendReportBacktraceDone(const TQString &str) m_bugdescription = 0; } -int Toplevel::postCrashDataToServer(TQByteArray data) { +int Toplevel::postCrashDataToServer(TQCString data) { m_serverResponse = ""; TQCString formDataBoundary = "-----------------------------------DrKonqiCrashReporterBoundary"; @@ -386,16 +386,18 @@ int Toplevel::postCrashDataToServer(TQByteArray data) { postData += "\r\n"; postData += "Content-Disposition: form-data; name=\"crashreport\"; filename=\"crashreport.txt\"\r\n"; postData += "Content-Type: application/octet-stream\r\n"; + postData += (TQString("Content-Length: %1\r\n").arg(data.count())).ascii(); postData += "Content-Transfer-Encoding: binary\r\n\r\n"; postData += data; + postData += "\r\n"; postData += "--"; postData += formDataBoundary; - postData += "--"; + postData += "--\r\n"; KURL url("https://crashreport.trinitydesktop.org/"); // TDEIO::TransferJob* job = TDEIO::http_post(url, postData, false); TDEIO::TransferJob* job = TDEIO::http_post(url, postData, true); - job->addMetaData("content-type", TQString("Content-Type: multipart/form-data, boundary=%1").arg(formDataBoundary)); + job->addMetaData("content-type", TQString("Content-Type: multipart/form-data; boundary=%1").arg(formDataBoundary)); job->addMetaData("referrer", "http://drkonqi-client.crashreport.trinitydesktop.org"); connect(job, TQT_SIGNAL(data(TDEIO::Job *, const TQByteArray &)), TQT_SLOT(postCrashDataToServerData(TDEIO::Job *, const TQByteArray &))); connect(job, TQT_SIGNAL(result(TDEIO::Job *)), TQT_SLOT(postCrashDataToServerResult(TDEIO::Job *))); @@ -445,14 +447,16 @@ void Toplevel::postCrashDataToServerResult(TDEIO::Job *job) (0, i18n("<p>Your crash report failed to upload!</p><p>Please check your network settings and try again.</p><p>The server responded:<br>%1</p>").arg(responseString), i18n("Upload failure"),i18n("Save Report"),i18n("Retry Upload")); - + if (i == KMessageBox::No) { postCrashDataToServer(m_backtraceSubmissionData); } - - if (i == KMessageBox::Yes) { + else if (i == KMessageBox::Yes) { saveOfflineCrashReport(m_backtraceSubmissionData); } + else { + enableButton(User3, true); + } } } else { @@ -464,14 +468,16 @@ void Toplevel::postCrashDataToServerResult(TDEIO::Job *job) if (i == KMessageBox::No) { postCrashDataToServer(m_backtraceSubmissionData); } - - if (i == KMessageBox::Yes) { + else if (i == KMessageBox::Yes) { saveOfflineCrashReport(m_backtraceSubmissionData); } + else { + enableButton(User3, true); + } } } -int Toplevel::saveOfflineCrashReport(TQByteArray data) +int Toplevel::saveOfflineCrashReport(TQCString data) { TQString defname = m_krashconf->execName() + TQString::fromLatin1( ".tdecrash" ); if( defname.contains( '/' )) @@ -483,7 +489,7 @@ int Toplevel::saveOfflineCrashReport(TQByteArray data) } else { TQFile f(filename); - + if (f.exists()) { if (KMessageBox::Cancel == KMessageBox::warningContinueCancel( 0, @@ -493,9 +499,9 @@ int Toplevel::saveOfflineCrashReport(TQByteArray data) i18n( "&Overwrite" ) )) return 2; } - + if (f.open(IO_WriteOnly)) { - f.writeBlock(data.data(), data.count()); + f.writeBlock(data.data(), data.count()-1); f.close(); enableButton(User3, true); return 0; diff --git a/drkonqi/toplevel.h b/drkonqi/toplevel.h index 52c94d696..06b23173b 100644 --- a/drkonqi/toplevel.h +++ b/drkonqi/toplevel.h @@ -51,8 +51,8 @@ public: private: // helper methods TQString generateText() const; - int postCrashDataToServer(TQByteArray data); - int saveOfflineCrashReport(TQByteArray data); + int postCrashDataToServer(TQCString data); + int saveOfflineCrashReport(TQCString data); protected slots: void slotUser1(); -- cgit v1.2.1