Jiri Moskovcak<jmoskovc(a)redhat.com> writes:
> On 05/29/2012 02:29 PM, Nikola Pajkovsky wrote:
>> Jakub Filak<jfilak(a)redhat.com> writes:
>>
>>> Signed-off-by: Jakub Filak<jfilak(a)redhat.com>
>>> ---
>>> src/lib/abrt_curl.c | 21 ++++++++++++++++++++-
>>> src/lib/abrt_curl.h | 11 +++++++++++
>>> src/lib/json.c | 4 ++--
>>> src/plugins/ureport.c | 4 ++++
>>> 4 files changed, 37 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/src/lib/abrt_curl.c b/src/lib/abrt_curl.c
>>> index 9ec77d1..1ae773d 100644
>>> --- a/src/lib/abrt_curl.c
>>> +++ b/src/lib/abrt_curl.c
>>> @@ -362,6 +362,24 @@ abrt_post(abrt_post_state_t *state,
>>> //FIXME:
>>> error_msg_and_die("out of memory or read error
(curl_formadd error code: %d)", (int)curlform_err);
>>> xcurl_easy_setopt_ptr(handle, CURLOPT_HTTPPOST, post);
>>> + } else if (data_size == ABRT_POST_DATA_STRING_AS_FORM_DATA) {
>>> + CURLFORMcode curlform_err = curl_formadd(&post,&last,
>>> + CURLFORM_PTRNAME, "file", // element name
>>> + // curl bug - missing filename
>>> + //
http://curl.haxx.se/mail/lib-2011-07/0176.html
>>> + //
https://github.com/bagder/curl/commit/45d883d
>>> + // fixed in curl-7.22.0~144
>>> + // tested with curl-7.24.0-3
>>> + // should be working on F17
>>> + CURLFORM_BUFFER, "*buffer*", // provides
filename
>>> + CURLFORM_BUFFERPTR, data,
>>> + CURLFORM_BUFFERLENGTH, (long)strlen(data),
>>> +//FIXME: what if file size doesn't fit in long?
>>> + CURLFORM_CONTENTTYPE, content_type,
>>> + CURLFORM_END);
>>> + if (curlform_err != 0)
>>> + error_msg_and_die("out of memory or read error
(curl_formadd error code: %d)", (int)curlform_err);
>>> + xcurl_easy_setopt_ptr(handle, CURLOPT_HTTPPOST, post);
>>> } else {
>>> // .. from a blob in memory
>>> xcurl_easy_setopt_ptr(handle, CURLOPT_POSTFIELDS, data);
>>> @@ -375,7 +393,8 @@ abrt_post(abrt_post_state_t *state,
>>> struct curl_slist *httpheader_list = NULL;
>>>
>>> // Override "Content-Type:"
>>> - if (data_size != ABRT_POST_DATA_FROMFILE_AS_FORM_DATA)
>>> + if (data_size != ABRT_POST_DATA_FROMFILE_AS_FORM_DATA
>>> +&& data_size != ABRT_POST_DATA_STRING_AS_FORM_DATA)
>>> {
>>> char *content_type_header = xasprintf("Content-Type:
%s", content_type);
>>> // Note: curl_slist_append() copies content_type_header
>>> diff --git a/src/lib/abrt_curl.h b/src/lib/abrt_curl.h
>>> index dfca303..ca3c5b8 100644
>>> --- a/src/lib/abrt_curl.h
>>> +++ b/src/lib/abrt_curl.h
>>> @@ -60,6 +60,7 @@ enum {
>>> ABRT_POST_DATA_STRING = -1,
>>> ABRT_POST_DATA_FROMFILE = -2,
>>> ABRT_POST_DATA_FROMFILE_AS_FORM_DATA = -3,
>>> + ABRT_POST_DATA_STRING_AS_FORM_DATA = -4,
>>> };
>>> int
>>> abrt_post(abrt_post_state_t *state,
>>> @@ -79,6 +80,16 @@ abrt_post_string(abrt_post_state_t *state,
>>> str, ABRT_POST_DATA_STRING);
>>> }
>>> static inline int
>>> +abrt_post_string_as_form_data(abrt_post_state_t *state,
>>> + const char *url,
>>> + const char *content_type,
>>> + const char **additional_headers,
>>> + const char *str)
>>> +{
>>> + return abrt_post(state, url, content_type, additional_headers,
>>> + str, ABRT_POST_DATA_STRING_AS_FORM_DATA);
>>> +}
>>> +static inline int
>>> abrt_post_file(abrt_post_state_t *state,
>>> const char *url,
>>> const char *content_type,
>>> diff --git a/src/lib/json.c b/src/lib/json.c
>>> index 2adf4ee..3bf3844 100644
>>> --- a/src/lib/json.c
>>> +++ b/src/lib/json.c
>>> @@ -237,14 +237,14 @@ abrt_post_state_t *post_ureport(problem_data_t *pd,
const char *ureport_url)
>>> | ABRT_POST_WANT_ERROR_MSG);
>>>
>>> static const char *headers[] = {
>>> - "Accept: text/plain",
>>> + "Accept: application/json",
>>> "Connection: close",
>>> NULL,
>>> };
>>>
>>> char *json_ureport = new_json_ureport(pd);
>>>
>>> - abrt_post_string(post_state, ureport_url, "application/json",
>>> + abrt_post_string_as_form_data(post_state, ureport_url,
"application/json",
>>> headers, json_ureport);
>>>
>>> free(json_ureport);
>>> diff --git a/src/plugins/ureport.c b/src/plugins/ureport.c
>>> index f0a6428..ed01cc7 100644
>>> --- a/src/plugins/ureport.c
>>> +++ b/src/plugins/ureport.c
>>> @@ -63,12 +63,16 @@ int main(int argc, char **argv)
>>> }
>>> }
>>>
>>> + // TODO : parse JSON response
>>> char *line = strtok(post_state->body, "\n");
>>> + VERB2 log("Response:\n----\n%s\n----", line);
>>
>> it's already printed in VERB2, you don't have to do it twice
>>
>>> int ret = 0;
>>> while (line)
>>> {
>>> if (!prefixcmp(line, "ERROR "))
>>> {
>>> + log("%s", line);
>>
>> don't print anything on err
> - why? we don't want to know what happened?
if you run -vvv it will be printed as part of abrt_curl calls. this log
will only duplicate message.
>>
>>> ret = 1;
>>> break;
>>> }
>>
>> rest is ok
>>