aboutsummaryrefslogtreecommitdiffstats
path: root/facebook/facebook-api.h
blob: 7d61c8e7f1412a8d1f054ccfc0dfad44ea9ddb5e (plain)
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/*
 * Copyright 2014 James Geboski <jgeboski@gmail.com>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

/** @file **/

#ifndef _FACEBOOK_API_H
#define _FACEBOOK_API_H

#include <bitlbee.h>

#include "facebook-http.h"
#include "facebook-json.h"
#include "facebook-mqtt.h"

#define FB_API_HOST   "api.facebook.com"
#define FB_API_BHOST  "b-api.facebook.com"
#define FB_API_AGENT  "Facebook App / " PACKAGE " / " PACKAGE_VERSION
#define FB_API_KEY    "256002347743983"
#define FB_API_SECRET "374e60f8b9bb6b8cbb30f78030438895"

#define FB_API_PATH_AUTH "/method/auth.login"


/**
 * Executes one of the #fb_api_funcs.
 *
 * @param a   The #fb_api.
 * @param f   The function to execute.
 * @param ... The function arguments.
 **/
#define FB_API_FUNC(m, f, ...)                         \
    G_STMT_START {                                     \
        if (G_LIKELY((m)->funcs.f != NULL)) {          \
            (m)->funcs.f(m, ##__VA_ARGS__, (m)->data); \
        }                                              \
    } G_STMT_END


/** The #GError codes of #fb_api. **/
typedef enum fb_api_error fb_api_error_t;

/** The structure for interacting with the Facebook API. **/
typedef struct fb_api fb_api_t;

/** The main structure for #fb_api callback functions. **/
typedef struct fb_api_funcs fb_api_funcs_t;


/**
 * The #GError codes of #fb_api.
 **/
enum fb_api_error
{
    FB_API_ERROR_GENERAL /** General **/
};

/**
 * The main structure for #fb_api callback functions.
 **/
struct fb_api_funcs
{
    /**
     * The error function. This is called whenever an error occurs
     * within the #fb_api.
     *
     * @param api  The #fb_api.
     * @param err  The #GError.
     * @param data The user-defined data or NULL.
     **/
    void (*error) (fb_api_t *api, GError *err, gpointer data);

    /**
     * The auth function. This is called whenever authentication has
     * been successfully completed. This is called as a result of
     * #fb_api_auth().
     *
     * @param api  The #fb_api.
     * @param data The user-defined data or NULL.
     **/
    void (*auth) (fb_api_t *api, gpointer data);

    /**
     * The connect function. This is called whenever the #fb_api has
     * been successfully connected. This connects to the MQTT service.
     * This is called as a result of #fb_api_connect().
     *
     * @param api  The #fb_api.
     * @param data The user-defined data or NULL.
     **/
    void (*connect) (fb_api_t *api, gpointer data);
};

/**
 * The structure for interacting with the Facebook API.
 **/
struct fb_api
{
    fb_api_funcs_t funcs; /** The #fb_api_funcs. **/
    gpointer       data;  /** The user-defined data or NULL. **/

    fb_http_t *http;      /** The #fb_http. **/
    fb_mqtt_t *mqtt;      /** The #fb_mqtt. **/
    GError    *err;       /** The #GError or NULL. **/

    gchar *uid;           /** The user identifier. **/
    gchar *token;         /** The session token. **/
    gchar *cid;           /** The client identifier. **/
    gchar *mid;           /** The MQTT identifier. **/
    gchar *cuid;          /** The client unique identifier. **/
    gchar *sid;           /** The sync identifier. **/
};


#define FB_API_ERROR fb_api_error_quark()

GQuark fb_api_error_quark(void);

fb_api_t *fb_api_new(const fb_api_funcs_t *funcs, gpointer data);

void fb_api_rehash(fb_api_t *api);

void fb_api_free(fb_api_t *api);

void fb_api_error(fb_api_t *api, fb_api_error_t err, const gchar *fmt, ...);

void fb_api_auth(fb_api_t *api, const gchar *user, const gchar *pass);

void fb_api_connect(fb_api_t *api);

void fb_api_disconnect(fb_api_t *api);

#endif /* _FACEBOOK_API_H */