diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2009-07-31 15:02:53 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2009-07-31 15:02:53 +0200 |
commit | 36d30c955b6e8cc8ab576ce5fcb8d1dd8e7c043b (patch) | |
tree | ac03dbbfc509a97572c842602b76d33ecf957b62 /lib/Plugins/KerneloopsReporter.cpp | |
parent | 919f52da59965f2493ca94ffb5bd11c7ef6835f9 (diff) | |
download | abrt-36d30c955b6e8cc8ab576ce5fcb8d1dd8e7c043b.tar.gz abrt-36d30c955b6e8cc8ab576ce5fcb8d1dd8e7c043b.tar.xz abrt-36d30c955b6e8cc8ab576ce5fcb8d1dd8e7c043b.zip |
KerneloopsReporter: plug a leak in writefunction
Also some preparatory cleanups for future dumpoops patch are included
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'lib/Plugins/KerneloopsReporter.cpp')
-rw-r--r-- | lib/Plugins/KerneloopsReporter.cpp | 50 |
1 files changed, 36 insertions, 14 deletions
diff --git a/lib/Plugins/KerneloopsReporter.cpp b/lib/Plugins/KerneloopsReporter.cpp index 2b5e2be..3011980 100644 --- a/lib/Plugins/KerneloopsReporter.cpp +++ b/lib/Plugins/KerneloopsReporter.cpp @@ -35,17 +35,16 @@ #define FILENAME_KERNELOOPS "kerneloops" -CKerneloopsReporter::CKerneloopsReporter() : - m_sSubmitURL("http://submit.kerneloops.org/submitoops.php") -{} +/* helpers */ -size_t writefunction(void *ptr, size_t size, size_t nmemb, void *stream) +static size_t writefunction(void *ptr, size_t size, size_t nmemb, void *stream) { char *c, *c1, *c2; - c = (char*)xzalloc(size*nmemb + 1); - memcpy(c, ptr, size*nmemb); - printf("received %s \n", c); + size *= nmemb; +/* log("received: '%*.*s'\n", (int)size, (int)size, (char*)ptr); + c = (char*)xzalloc(size + 1); + memcpy(c, ptr, size); c1 = strstr(c, "201 "); if (c1) { c1 += 4; @@ -53,24 +52,27 @@ size_t writefunction(void *ptr, size_t size, size_t nmemb, void *stream) if (c2) *c2 = 0; } + free(c); +*/ - return size * nmemb; + return size; } -void CKerneloopsReporter::Report(const map_crash_report_t& pCrashReport, const std::string& pArgs) +/* Send oops data to kerneloops.org-style site, using HTTP POST */ +/* Returns 0 on success */ +static int http_post_to_kerneloops_site(const char *url, const char *oopsdata) { - comm_layer_inner_status("Creating and submitting a report..."); - + CURLcode ret; CURL *handle; struct curl_httppost *post = NULL; struct curl_httppost *last = NULL; handle = curl_easy_init(); - curl_easy_setopt(handle, CURLOPT_URL, m_sSubmitURL.c_str()); + curl_easy_setopt(handle, CURLOPT_URL, url); curl_formadd(&post, &last, CURLFORM_COPYNAME, "oopsdata", - CURLFORM_COPYCONTENTS, pCrashReport.find(FILENAME_KERNELOOPS)->second[CD_CONTENT].c_str(), + CURLFORM_COPYCONTENTS, oopsdata, CURLFORM_END); curl_formadd(&post, &last, CURLFORM_COPYNAME, "pass_on_allowed", @@ -80,10 +82,30 @@ void CKerneloopsReporter::Report(const map_crash_report_t& pCrashReport, const s curl_easy_setopt(handle, CURLOPT_HTTPPOST, post); curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, writefunction); - curl_easy_perform(handle); + ret = curl_easy_perform(handle); curl_formfree(post); curl_easy_cleanup(handle); + + return ret != 0; +} + + +/* class CKerneloopsReporter */ + +CKerneloopsReporter::CKerneloopsReporter() : + m_sSubmitURL("http://submit.kerneloops.org/submitoops.php") +{} + +void CKerneloopsReporter::Report(const map_crash_report_t& pCrashReport, const std::string& pArgs) +{ + comm_layer_inner_status("Creating and submitting a report..."); + + /* TODO: react on errorcode (!0 -> error) */ + http_post_to_kerneloops_site( + m_sSubmitURL.c_str(), + pCrashReport.find(FILENAME_KERNELOOPS)->second[CD_CONTENT].c_str() + ); } void CKerneloopsReporter::LoadSettings(const std::string& pPath) |