1 #include "system.h"
2 #include "lj.h"
3 #include "hash.h"
4 #include "util.h"
5 #include "net.h"
6
7 #include <stdlib.h>
8 #include <string.h>
9
10 static char *create_getevents_request(const lj_user * user, const lj_eventinfo * logininfo);
11
12 /*****************************************************************************
13 * This function generates the body of the HTTP request, we make the headers in
14 * lj_event. This is mostly done so that we can just use strlen() to calculate
15 * the Content Length.
16 */
17
18 int
lj_getevents(const lj_server * const serverinfo,lj_user * user,lj_eventinfo * eventinfo)19 lj_getevents(const lj_server * const serverinfo, lj_user *user, lj_eventinfo *eventinfo)
20 {
21 char *event_text;
22 int i, ret = 0;
23 hashtable *lj_hash = NULL;
24 char *value = NULL;
25
26 lj_setauth(serverinfo, user);
27 /* First we send our request */
28 create_hash(&lj_hash);
29 event_text = create_getevents_request(user, eventinfo);
30 lj_send_request(serverinfo, user, event_text, lj_hash);
31 free(event_text);
32
33 /* were we a success? */
34 eventinfo->success = 1;
35 get(lj_hash, &value, "success");
36 if (!value || strcmp(value, "OK"))
37 {
38 /* we failed */
39 eventinfo->success = 0;
40 ret = 1;
41 }
42 free(value);
43
44 /* next we look for an errmsg */
45 get(lj_hash, &eventinfo->errmsg, "errmsg");
46
47 /* now we snag number of events */
48 geti(lj_hash, &eventinfo->count, "events_count");
49
50 eventinfo->events =
51 lj_malloc((eventinfo->count) * sizeof(lj_eventninfo));
52 for (i = 0; i < eventinfo->count; i++)
53 {
54 lj_eventninfo *info = &eventinfo->events[i];
55
56 getpi(lj_hash, &info->itemid, "events_%d_itemid", i + 1);
57 getp(lj_hash, &info->time, "events_%d_eventtime", i + 1);
58 getp(lj_hash, &info->event, "events_%d_event", i + 1);
59 getp(lj_hash, &info->security, "events_%d_security", i + 1);
60 getpi(lj_hash, &info->allowmask,"events_%d_allowmask", i + 1);
61 getp(lj_hash, &info->subject, "events_%d_subject", i + 1);
62 getp(lj_hash, &info->poster, "events_%d_poster", i + 1);
63 lj_urldecode(info->event);
64 }
65
66 lj_debug(1, "success: [%s]\n", eventinfo->success ? "OK" : "FAIL");
67 if (eventinfo->errmsg)
68 lj_debug(1, "errmsg: [%s]\n", eventinfo->errmsg);
69
70 /* Then we close the connection and return our success / failure code */
71 delete_hash(lj_hash);
72 return ret;
73 }
74
75 char *
create_getevents_request(const lj_user * const user,const lj_eventinfo * const eventinfo)76 create_getevents_request(const lj_user * const user, const lj_eventinfo * const eventinfo)
77 {
78 char *ret;
79 char *username, *password;
80
81 lj_urlencode(user->username, &username);
82 lj_urlencode(user->password, &password);
83
84 asprintf(&ret,
85 "mode=getevents&%s"
86 "&truncate=100&prefersubject=1"
87 "&selecttype=lastn&howmany=%d"
88 "&noprops=1"
89 "&lineendings=unix"
90 "&usejournal=%s",
91 user->auth,
92 eventinfo->eventflags,
93 eventinfo->usejournal ? eventinfo->usejournal : "");
94
95 free(username);
96 free(password);
97 return ret;
98 }
99