qlic

Zoho Cliq but not really

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
58 
59 
60 
61 
62 
63 
64 
65 
66 
67 
68 
69 
70 
71 
72 
73 
74 
75 
76 
77 
78 
79 
80 
81 
82 
83 
84 
85 
86 
87 
88 
89 
90 
#include <qlic_common.h>
#include <curl/curl.h>
#include <stdlib.h>
#include <string.h>
#include <qlic_response_handler.h>

void qlic_error(const char* error_message) {
	fprintf(stderr, "%s\n", error_message);
}



static struct curl_slist* __qlic_set_request_headers(QlicContext* context, QlicString* access_token) {
	CURL* curl = (CURL*)context->context;
	if(access_token == NULL) {
		return NULL;
	}
	struct curl_slist* list = NULL;
#define __QLIC_AUTHORIZATION_HEADER "Authorization: Zoho-oauthtoken "
	// TODO free up authorization_header if curl doesn't handle
	size_t authorization_header_len = sizeof(__QLIC_AUTHORIZATION_HEADER) + access_token->len;
	char* authorization_header = (char*)malloc(authorization_header_len);
	strncpy(authorization_header, __QLIC_AUTHORIZATION_HEADER, sizeof(__QLIC_AUTHORIZATION_HEADER));
	strncat(authorization_header, access_token->string, access_token->len);
	list = curl_slist_append(list, authorization_header);
	list = curl_slist_append(list, "Content-Type: application/json");
	list = curl_slist_append(list, "contentType: application/json");
	return list;
}

QlicString* init_qlic_string() {
	QlicString* qlic_string = (QlicString*)malloc(sizeof(QlicString));
	qlic_string->string = NULL;
	qlic_string->len = -1;
	return qlic_string;
}

QlicContext* qlic_context_access_init(QlicString* access_token) {
	QlicContext* qlic_context = qlic_init();
	if (qlic_context) {
		CURL* curl = (CURL*)qlic_context->context;
		struct curl_slist* list = __qlic_set_request_headers(qlic_context, access_token);
		curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
		return qlic_context;
	} else {
		return NULL;
	}
}

void destroy_qlic_string(QlicString* qlic_string) {
	if(qlic_string->string != NULL) {
		free(qlic_string->string);
	}
	free(qlic_string);
}

QlicContext* qlic_init() {
	CURL *curl = curl_easy_init();
	if (curl) {
		QlicContext* qlic_context = (QlicContext*)calloc(1, sizeof(QlicContext));
		qlic_context->context = curl;
		return qlic_context;
	} else {
		return NULL;
	}
}

void qlic_request(QlicContext* context, qlic_response_callback callback, bool is_post_request) {
	if(context) {
		CURL* curl = (CURL*)context->context;
		CURLcode res;
		curl_easy_setopt(curl, CURLOPT_URL, context->request_url->string);
		/* curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0); */
		if (is_post_request) {
			curl_easy_setopt(curl, CURLOPT_POST, 1);
			curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"text\": \"Hi\"}");
		}
		/* curl_easy_setopt(curl, CURLOPT_READFUNCTION, qlic_handle_read_chat); */
		/* curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); */
		curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback);
		curl_easy_setopt(curl, CURLOPT_WRITEDATA, curl);
		res = curl_easy_perform(curl);
		if(res != CURLE_OK) {
			fprintf(stderr, "curl_easy_perform() failed: %s\n",
								  curl_easy_strerror(res));
		}
		curl_easy_cleanup(curl);
	}
}