diff options
-rw-r--r-- | rtclient/ticket.h | 9 | ||||
-rw-r--r-- | ticket.c | 45 |
2 files changed, 49 insertions, 5 deletions
diff --git a/rtclient/ticket.h b/rtclient/ticket.h index 104f811..9aaf656 100644 --- a/rtclient/ticket.h +++ b/rtclient/ticket.h @@ -6,6 +6,12 @@ struct rtclient_ticket { char *subject; }; +enum rtclient_ticket_result_format { + RTCLIENT_TICKET_RESULT_FORMAT_S = 0 + , RTCLIENT_TICKET_RESULT_FORMAT_I + , RTCLIENT_TICKET_RESULT_FORMAT_L +}; + enum rtclient_ticket_history_type { RTCLIENT_TICKET_HISTORY_TYPE_UNKNOWN = 0 , RTCLIENT_TICKET_HISTORY_TYPE_CREATE @@ -71,7 +77,8 @@ extern "C" { , const char *due , const char *text); void rtclient_ticket_history(struct rtclient_ticket_history_list **listptr - , unsigned int id); + , unsigned int id + , enum rtclient_ticket_result_format result_format); void rtclient_ticket_history_free (struct rtclient_ticket_history *history); void rtclient_ticket_history_list_free @@ -40,7 +40,29 @@ void rtclient_ticket_new(const char *queue }, 28); } -static size_t history_handler(void *contents, size_t size, size_t nmemb +static size_t history_i_handler(void *contents, size_t size, size_t nmemb + , void *writedata) +{ + size_t realsize = size * nmemb; + char response[realsize + 1]; + memcpy(response, contents, realsize); + response[realsize] = '\0'; + + return realsize; +} + +static size_t history_s_handler(void *contents, size_t size, size_t nmemb + , void *writedata) +{ + size_t realsize = size * nmemb; + char response[realsize + 1]; + memcpy(response, contents, realsize); + response[realsize] = '\0'; + + return realsize; +} + +static size_t history_l_handler(void *contents, size_t size, size_t nmemb , void *writedata) { size_t realsize = size * nmemb; @@ -272,12 +294,27 @@ static size_t history_handler(void *contents, size_t size, size_t nmemb } void rtclient_ticket_history(rtclient_ticket_history_list **listptr - , unsigned int id) + , unsigned int id + , enum rtclient_ticket_result_format result_format) { *listptr = malloc(sizeof(rtclient_ticket_history_list)); (*listptr)->length = 0; - request(history_handler, (void *)listptr, NULL, "%s%u%s" - , "REST/1.0/ticket/", id, "/history?format=l"); + size_t (*handler)(void *, size_t, size_t, void *) = history_s_handler; + char format = 's'; + switch (result_format) { + case RTCLIENT_TICKET_RESULT_FORMAT_I: + handler = history_i_handler; + format = 'i'; + break; + case RTCLIENT_TICKET_RESULT_FORMAT_L: + handler = history_l_handler; + format = 'l'; + break; + default: + break; + } + request(handler, (void *)listptr, NULL, "%s%u%s%c", "REST/1.0/ticket/", id + , "/history?format=", format); } void rtclient_ticket_history_free(struct rtclient_ticket_history *history) |