summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rtclient/ticket.h9
-rw-r--r--ticket.c45
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
diff --git a/ticket.c b/ticket.c
index 990fc9c..658df7f 100644
--- a/ticket.c
+++ b/ticket.c
@@ -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)