Changes in / [3759849:1dd3470]


Ignore:
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • debian/changelog

    r3759849 r1dd3470  
    1 bitlbee (1.2.7-1) unstable; urgency=high
    2 
    3   * New upstream version.
    4   * Fixes MSN Messenger login issues, so uploading at high priority.
    5 
    6  -- Wilmer van der Gaast <wilmer@gaast.net>  Sat, 15 May 2010 16:15:57 +0100
    7 
    81bitlbee (1.2.6a-1) unstable; urgency=low
    92
  • debian/control

    r3759849 r1dd3470  
    1515Description: An IRC to other chat networks gateway
    1616 This program can be used as an IRC server which forwards everything you
    17  say to people on other chat networks: Jabber, ICQ, AIM, MSN, Yahoo! and
    18  Twitter.
     17 say to people on other chat networks: Jabber, ICQ, AIM, MSN and Yahoo.
    1918
    2019Package: bitlbee-dev
     
    2322Description: An IRC to other chat networks gateway
    2423 This program can be used as an IRC server which forwards everything you
    25  say to people on other chat networks: Jabber, ICQ, AIM, MSN, Yahoo! and
    26  Twitter.
     24 say to people on other chat networks: Jabber, ICQ, AIM, MSN and Yahoo.
    2725 .
    2826 This package holds development stuff for compiling plug-ins.
  • debian/rules

    r3759849 r1dd3470  
    9999                find usr -type f -exec md5sum {} \; > DEBIAN/md5sums
    100100
    101 ifdef BITLBEE_FORCE_VERSION
    102101        dpkg-gencontrol -ldebian/changelog -isp -pbitlbee-dev -Pdebian/bitlbee-dev -v1:$(BITLBEE_VERSION)-0
    103 else
    104         dpkg-gencontrol -ldebian/changelog -isp -pbitlbee-dev -Pdebian/bitlbee-dev
    105 endif
    106102
    107103        dpkg --build debian/bitlbee-dev ..
  • doc/bitlbee.8

    r3759849 r1dd3470  
    3939networks and acts as a gateway. Users can connect to the server
    4040with any normal IRC client and see their 'buddy list' in
    41 &bitlbee. It currently supports Oscar (AIM and ICQ),
    42 MSN, Jabber, Yahoo! and Twitter.
     41&bitlbee. BitlBee's protocol support is based on the gaim
     42protocol plugins. BitlBee currently supports Oscar (aim and icq),
     43MSN, Jabber and Yahoo.
    4344
    4445\fBbitlbee\fP should be called by
  • doc/user-guide/commands.xml

    r3759849 r1dd3470  
    794794
    795795        <bitlbee-setting name="ignore_auth_requests" type="boolean" scope="account">
    796                 <default>false</default>
     796                <default>true</default>
    797797
    798798                <description>
  • doc/user-guide/quickstart.xml

    r3759849 r1dd3470  
    33
    44<para>
    5 Welcome to BitlBee, your IRC gateway to ICQ, MSN, AOL, Jabber, Yahoo! and Twitter.
     5Welcome to BitlBee, your IRC gateway to ICQ, MSN, AOL, Jabber and Yahoo Instant Messaging Systems.
    66</para>
    77
     
    4343
    4444<para>
    45 Other available IM protocols are msn, oscar, yahoo and twitter. OSCAR is the protocol used by ICQ and AOL. For more information about the <emphasis>account add</emphasis> command, see <emphasis>help account add</emphasis>.
     45Other available IM protocols are msn, oscar, and yahoo. OSCAR is the protocol used by ICQ and AOL. For more information about the <emphasis>account add</emphasis> command, see <emphasis>help account add</emphasis>.
    4646</para>
    4747
  • irc_commands.c

    r3759849 r1dd3470  
    7373static void irc_cmd_nick( irc_t *irc, char **cmd )
    7474{
    75         if( irc->status & USTATUS_IDENTIFIED && irc->nick )
    76         {
    77                 irc_reply( irc, 438, "%s %s :You can only change your nick if you're not "
    78                            "logged in (i.e. pre-identify)", irc->nick, cmd[1] );
     75        if( irc->nick )
     76        {
     77                irc_reply( irc, 438, ":The hand of the deity is upon thee, thy nick may not change" );
    7978        }
    8079        /* This is not clean, but for now it'll have to be like this... */
    81         else if( ( nick_cmp( cmd[1], irc->mynick ) == 0 ) || ( nick_cmp( cmd[1], NS_NICK ) == 0 ) || ( user_find( irc, cmd[1] ) != NULL ) )
    82         {
    83                 irc_reply( irc, 433, "%s :This nick is already in use", cmd[1] );
     80        else if( ( nick_cmp( cmd[1], irc->mynick ) == 0 ) || ( nick_cmp( cmd[1], NS_NICK ) == 0 ) )
     81        {
     82                irc_reply( irc, 433, ":This nick is already in use" );
    8483        }
    8584        else if( !nick_ok( cmd[1] ) )
    8685        {
    8786                /* [SH] Invalid characters. */
    88                 irc_reply( irc, 432, "%s :This nick contains invalid characters", cmd[1] );
    89         }
    90         else if(irc->nick)
    91         {
    92                 if( user_find( irc, irc->nick ) )
    93                         user_rename(irc, irc->nick, cmd[1]);
    94 
    95                 irc_write( irc, ":%s!%s@%s NICK %s", irc->nick, irc->user, irc->host, cmd[1] );
    96                 g_free(irc->nick);
    97                 irc->nick = g_strdup( cmd[1] );
     87                irc_reply( irc, 432, ":This nick contains invalid characters" );
    9888        }
    9989        else
  • lib/misc.c

    r3759849 r1dd3470  
    154154{
    155155        char *start = in;
    156         char out[strlen(in)+1];
     156        char *out = g_malloc( strlen( in ) + 1 );
    157157        char *s = out, *cs;
    158158        int i, matched;
    159159        int taglen;
    160160       
    161         memset( out, 0, sizeof( out ) );
     161        memset( out, 0, strlen( in ) + 1 );
    162162       
    163163        while( *in )
     
    230230       
    231231        strcpy( start, out );
     232        g_free( out );
    232233}
    233234
  • protocols/jabber/iq.c

    r3759849 r1dd3470  
    127127                    !( s = xt_find_attr( c, "xmlns" ) ) )
    128128                {
     129                        imcb_log( ic, "Warning: Received incomplete IQ-%s packet", type );
    129130                        return XT_HANDLED;
    130131                }
  • protocols/oscar/auth.c

    r3759849 r1dd3470  
    120120        aim_snacid_t snacid;
    121121        aim_tlvlist_t *tl = NULL;
    122         struct im_connection *ic = sess->aux_data;
    123122       
    124123        if (!sess || !conn || !sn)
    125124                return -EINVAL;
    126125
    127         if (isdigit(sn[0]) && set_getbool(&ic->acc->set, "old_icq_auth"))
     126        if ((sn[0] >= '0') && (sn[0] <= '9'))
    128127                return goddamnicq(sess, conn, sn);
    129128
  • protocols/oscar/oscar.c

    r3759849 r1dd3470  
    374374        if (isdigit(acc->user[0])) {
    375375                set_add(&acc->set, "ignore_auth_requests", "false", set_eval_bool, acc);
    376                 set_add(&acc->set, "old_icq_auth", "false", set_eval_bool, acc);
    377376        }
    378377       
     
    10311030                m = g_list_append(m, exch);
    10321031
    1033                 g_snprintf(txt, 1024, "Got an invitation to chatroom %s from %s: %s", name, userinfo->sn, args->msg);
     1032                g_snprintf( txt, 1024, "Got an invitation to chatroom %s from %s: %s", name, userinfo->sn, args->msg );
    10341033
    10351034                inv->ic = ic;
     
    10371036                inv->name = g_strdup(name);
    10381037               
    1039                 imcb_ask(ic, txt, inv, oscar_accept_chat, oscar_reject_chat);
     1038                imcb_ask( ic, txt, inv, oscar_accept_chat, oscar_reject_chat);
    10401039       
    10411040                if (name)
    10421041                        g_free(name);
    1043         } else if (args->reqclass & AIM_CAPS_ICQRTF) {
    1044                 // TODO: constify
    1045                 char text[strlen(args->info.rtfmsg.rtfmsg)+1];
    1046                 strncpy(text, args->info.rtfmsg.rtfmsg, sizeof(text));
    1047                 imcb_buddy_msg(ic, normalize(userinfo->sn), text, 0, 0);
    10481042        }
    10491043
  • protocols/twitter/twitter.c

    r3759849 r1dd3470  
    2727#include "twitter_http.h"
    2828#include "twitter_lib.h"
    29 #include "url.h"
    3029
    3130/**
     
    7170        "http://api.twitter.com/oauth/request_token",
    7271        "http://api.twitter.com/oauth/access_token",
    73         "https://api.twitter.com/oauth/authorize",
     72        "http://api.twitter.com/oauth/authorize",
    7473        .consumer_key = "xsDNKJuNZYkZyMcu914uEA",
    7574        .consumer_secret = "FCxqcr0pXKzsF9ajmP57S3VQ8V6Drk4o2QYtqMcOszo",
     
    161160        set_t *s;
    162161       
    163         s = set_add( &acc->set, "base_url", TWITTER_API_URL, NULL, acc );
    164         s->flags |= ACC_SET_OFFLINE_ONLY;
    165        
    166162        s = set_add( &acc->set, "message_length", "140", set_eval_int, acc );
    167163       
     
    179175{
    180176        struct im_connection *ic = imcb_new( acc );
    181         struct twitter_data *td;
     177        struct twitter_data *td = g_new0( struct twitter_data, 1 );
    182178        char name[strlen(acc->user)+9];
    183         url_t url;
    184 
    185         if( !url_set( &url, set_getstr( &ic->acc->set, "base_url" ) ) ||
    186             ( url.proto != PROTO_HTTP && url.proto != PROTO_HTTPS ) )
    187         {
    188                 imcb_error( ic, "Incorrect API base URL: %s", set_getstr( &ic->acc->set, "base_url" ) );
    189                 imc_logout( ic, FALSE );
    190                 return;
    191         }
    192        
     179
    193180        twitter_connections = g_slist_append( twitter_connections, ic );
    194         td = g_new0( struct twitter_data, 1 );
    195181        ic->proto_data = td;
    196        
    197         td->url_ssl = url.proto == PROTO_HTTPS;
    198         td->url_port = url.port;
    199         td->url_host = g_strdup( url.host );
    200         if( strcmp( url.file, "/" ) != 0 )
    201                 td->url_path = g_strdup( url.file );
    202         else
    203                 td->url_path = g_strdup( "" );
     182        ic->flags |= OPT_DOES_HTML;
    204183       
    205184        td->user = acc->user;
    206         if( strstr( acc->pass, "oauth_token=" ) )
     185        if( !set_getbool( &acc->set, "oauth" ) )
     186                td->pass = g_strdup( acc->pass );
     187        else if( strstr( acc->pass, "oauth_token=" ) )
    207188                td->oauth_info = oauth_from_string( acc->pass, &twitter_oauth );
     189        td->home_timeline_id = 0;
    208190       
    209191        sprintf( name, "twitter_%s", acc->user );
     
    211193        imcb_buddy_status( ic, name, OPT_LOGGED_IN, NULL, NULL );
    212194       
    213         if( td->oauth_info || !set_getbool( &acc->set, "oauth" ) )
     195        if( td->pass || td->oauth_info )
    214196                twitter_main_loop_start( ic );
    215197        else
     
    286268static void twitter_add_buddy( struct im_connection *ic, char *who, char *group )
    287269{
    288         twitter_friendships_create_destroy(ic, who, 1);
    289270}
    290271
    291272static void twitter_remove_buddy( struct im_connection *ic, char *who, char *group )
    292273{
    293         twitter_friendships_create_destroy(ic, who, 0);
    294274}
    295275
  • protocols/twitter/twitter.h

    r3759849 r1dd3470  
    4242        struct groupchat *home_timeline_gc;
    4343        gint http_fails;
    44        
    45         gboolean url_ssl;
    46         int url_port;
    47         char *url_host;
    48         char *url_path;
    4944};
    5045
  • protocols/twitter/twitter_http.c

    r3759849 r1dd3470  
    4141
    4242
    43 static char *twitter_url_append(char *url, char *key, char* value);
     43char *twitter_url_append(char *url, char *key, char* value);
    4444
    4545/**
     
    4747 * This is actually pretty generic function... Perhaps it should move to the lib/http_client.c
    4848 */
    49 void *twitter_http(struct im_connection *ic, char *url_string, http_input_function func, gpointer data, int is_post, char** arguments, int arguments_len)
     49void *twitter_http(char *url_string, http_input_function func, gpointer data, int is_post, char* user, char* pass, struct oauth_info* oi, char** arguments, int arguments_len)
    5050{
    51         struct twitter_data *td = ic->proto_data;
     51        url_t *url = g_new0( url_t, 1 );
    5252        char *tmp;
    53         GString *request = g_string_new("");
     53        char *request;
    5454        void *ret;
     55        char *userpass = NULL;
     56        char *userpass_base64;
    5557        char *url_arguments;
    5658
    57         url_arguments = g_strdup("");
     59        // Fill the url structure.
     60        if( !url_set( url, url_string ) )
     61        {
     62                g_free( url );
     63                return NULL;
     64        }
     65
     66        if( url->proto != PROTO_HTTP && url->proto != PROTO_HTTPS )
     67        {
     68                g_free( url );
     69                return NULL;
     70        }
     71
     72        // Concatenate user and pass
     73        if (user && pass) {
     74                userpass = g_strdup_printf("%s:%s", user, pass);
     75                userpass_base64 = base64_encode((unsigned char*)userpass, strlen(userpass));
     76        } else {
     77                userpass_base64 = NULL;
     78        }
     79
     80        url_arguments = g_malloc(1);
     81        url_arguments[0] = '\0';
    5882
    5983        // Construct the url arguments.
     
    6993        }
    7094
     95        // Do GET stuff...
     96        if (!is_post)
     97        {
     98                // Find the char-pointer of the end of the string.
     99                tmp = url->file + strlen(url->file);
     100                tmp[0] = '?';
     101                // append the url_arguments to the end of the url->file.
     102                // TODO GM: Check the length?
     103                g_stpcpy (tmp+1, url_arguments);
     104        }
     105
     106
    71107        // Make the request.
    72         g_string_printf(request, "%s %s%s%s%s HTTP/1.0\r\n"
    73                                  "Host: %s\r\n"
    74                                  "User-Agent: BitlBee " BITLBEE_VERSION " " ARCH "/" CPU "\r\n",
    75                                  is_post ? "POST" : "GET",
    76                                  td->url_path, url_string,
    77                                  is_post ? "" : "?", is_post ? "" : url_arguments,
    78                                  td->url_host);
     108        request = g_strdup_printf(  "%s %s HTTP/1.0\r\n"
     109                                    "Host: %s\r\n"
     110                                    "User-Agent: BitlBee " BITLBEE_VERSION " " ARCH "/" CPU "\r\n",
     111                                    is_post ? "POST" : "GET", url->file, url->host );
    79112
    80113        // If a pass and user are given we append them to the request.
    81         if (td->oauth_info)
     114        if (oi)
    82115        {
    83116                char *full_header;
    84                 char *full_url;
    85117               
    86                 full_url = g_strconcat(set_getstr(&ic->acc->set, "base_url" ), url_string, NULL);
    87                 full_header = oauth_http_header(td->oauth_info, is_post ? "POST" : "GET",
    88                                                 full_url, url_arguments);
     118                full_header = oauth_http_header(oi, is_post ? "POST" : "GET",
     119                                                url_string, url_arguments);
    89120               
    90                 g_string_append_printf(request, "Authorization: %s\r\n", full_header);
     121                tmp = g_strdup_printf("%sAuthorization: %s\r\n", request, full_header);
     122                g_free(request);
    91123                g_free(full_header);
    92                 g_free(full_url);
     124                request = tmp;
    93125        }
    94         else
     126        else if (userpass_base64)
    95127        {
    96                 char userpass[strlen(ic->acc->user)+2+strlen(ic->acc->pass)];
    97                 char *userpass_base64;
    98                
    99                 g_snprintf(userpass, sizeof(userpass), "%s:%s", ic->acc->user, ic->acc->pass);
    100                 userpass_base64 = base64_encode((unsigned char*)userpass, strlen(userpass));
    101                 g_string_append_printf(request, "Authorization: Basic %s\r\n", userpass_base64);
    102                 g_free( userpass_base64 );
     128                tmp = g_strdup_printf("%sAuthorization: Basic %s\r\n", request, userpass_base64);
     129                g_free(request);
     130                request = tmp;
    103131        }
    104132
     
    107135        {
    108136                // Append the Content-Type and url-encoded arguments.
    109                 g_string_append_printf(request,
    110                                        "Content-Type: application/x-www-form-urlencoded\r\n"
    111                                        "Content-Length: %zd\r\n\r\n%s",
    112                                        strlen(url_arguments), url_arguments);
     137                tmp = g_strdup_printf("%sContent-Type: application/x-www-form-urlencoded\r\nContent-Length: %zd\r\n\r\n%s",
     138                                                                request, strlen(url_arguments), url_arguments);
     139                g_free(request);
     140                request = tmp;
    113141        } else {
    114142                // Append an extra \r\n to end the request...
    115                 g_string_append(request, "\r\n");
     143                tmp = g_strdup_printf("%s\r\n", request);
     144                g_free(request);
     145                request = tmp;
    116146        }
    117147
    118         ret = http_dorequest(td->url_host, td->url_port, td->url_ssl, request->str, func, data);
     148        ret = http_dorequest( url->host, url->port,     url->proto == PROTO_HTTPS, request, func, data );
    119149
     150        g_free( url );
     151        g_free( userpass );
     152        g_free( userpass_base64 );
    120153        g_free( url_arguments );
    121         g_string_free( request, TRUE );
     154        g_free( request );
    122155        return ret;
    123156}
    124157
    125 static char *twitter_url_append(char *url, char *key, char* value)
     158char *twitter_url_append(char *url, char *key, char* value)
    126159{
    127160        char *key_encoded = g_strndup(key, 3 * strlen(key));
  • protocols/twitter/twitter_http.h

    r3759849 r1dd3470  
    3030struct oauth_info;
    3131
    32 void *twitter_http(struct im_connection *ic, char *url_string, http_input_function func,
    33                    gpointer data, int is_post, char** arguments, int arguments_len);
     32void *twitter_http(char *url_string, http_input_function func, gpointer data, int is_post,
     33                   char* user, char* pass, struct oauth_info *oi, char** arguments, int arguments_len);
    3434
    3535#endif //_TWITTER_HTTP_H
  • protocols/twitter/twitter_lib.c

    r3759849 r1dd3470  
    117117}
    118118
    119 /* Warning: May return a malloc()ed value, which will be free()d on the next
    120    call. Only for short-term use. */
    121 static char *twitter_parse_error(struct http_request *req)
    122 {
    123         static char *ret = NULL;
    124         struct xt_parser *xp = NULL;
    125         struct xt_node *node;
    126        
    127         g_free(ret);
    128         ret = NULL;
    129        
    130         if (req->body_size > 0)
    131         {
    132                 xp = xt_new(NULL, NULL);
    133                 xt_feed(xp, req->reply_body, req->body_size);
    134                
    135                 if ((node = xt_find_node(xp->root, "hash")) &&
    136                     (node = xt_find_node(node->children, "error")) &&
    137                     node->text_len > 0)
    138                 {
    139                         ret = g_strdup_printf("%s (%s)", req->status_string, node->text);
    140                         xt_free(xp);
    141                         return ret;
    142                 }
    143                
    144                 xt_free(xp);
    145         }
    146        
    147         return req->status_string;
    148 }
    149 
    150119static void twitter_http_get_friends_ids(struct http_request *req);
    151120
     
    155124void twitter_get_friends_ids(struct im_connection *ic, int next_cursor)
    156125{
     126        struct twitter_data *td = ic->proto_data;
     127
    157128        // Primitive, but hey! It works...     
    158129        char* args[2];
    159130        args[0] = "cursor";
    160131        args[1] = g_strdup_printf ("%d", next_cursor);
    161         twitter_http(ic, TWITTER_FRIENDS_IDS_URL, twitter_http_get_friends_ids, ic, 0, args, 2);
     132        twitter_http(TWITTER_FRIENDS_IDS_URL, twitter_http_get_friends_ids, ic, 0, td->user, td->pass, td->oauth_info, args, 2);
    162133
    163134        g_free(args[1]);
     
    225196                // It didn't go well, output the error and return.
    226197                if (++td->http_fails >= 5)
    227                         imcb_error(ic, "Could not retrieve friends: %s", twitter_parse_error(req));
     198                        imcb_error(ic, "Could not retrieve friends. HTTP STATUS: %d", req->status_code);
    228199               
    229200                return;
     
    425396        }
    426397
    427         twitter_http(ic, TWITTER_HOME_TIMELINE_URL, twitter_http_get_home_timeline, ic, 0, args, td->home_timeline_id ? 4 : 2);
     398        twitter_http(TWITTER_HOME_TIMELINE_URL, twitter_http_get_home_timeline, ic, 0, td->user, td->pass, td->oauth_info, args, td->home_timeline_id ? 4 : 2);
    428399
    429400        g_free(args[1]);
     
    463434                twitter_add_buddy(ic, status->user->screen_name, status->user->name);
    464435               
    465                 strip_html(status->text);
    466                
    467436                // Say it!
    468437                if (g_strcasecmp(td->user, status->user->screen_name) == 0)
     
    502471                status = l->data;
    503472               
    504                 strip_html( status->text );
    505473                if( mode_one )
    506474                        text = g_strdup_printf( "\002<\002%s\002>\002 %s",
     
    555523                // It didn't go well, output the error and return.
    556524                if (++td->http_fails >= 5)
    557                         imcb_error(ic, "Could not retrieve " TWITTER_HOME_TIMELINE_URL ": %s", twitter_parse_error(req));
     525                        imcb_error(ic, "Could not retrieve " TWITTER_HOME_TIMELINE_URL ". HTTP STATUS: %d", req->status_code);
    558526               
    559527                return;
     
    607575                // It didn't go well, output the error and return.
    608576                if (++td->http_fails >= 5)
    609                         imcb_error(ic, "Could not retrieve " TWITTER_SHOW_FRIENDS_URL ": %s", twitter_parse_error(req));
     577                        imcb_error(ic, "Could not retrieve " TWITTER_SHOW_FRIENDS_URL " HTTP STATUS: %d", req->status_code);
    610578               
    611579                return;
     
    646614void twitter_get_statuses_friends(struct im_connection *ic, int next_cursor)
    647615{
     616        struct twitter_data *td = ic->proto_data;
     617
    648618        char* args[2];
    649619        args[0] = "cursor";
    650620        args[1] = g_strdup_printf ("%d", next_cursor);
    651621
    652         twitter_http(ic, TWITTER_SHOW_FRIENDS_URL, twitter_http_get_statuses_friends, ic, 0, args, 2);
     622        twitter_http(TWITTER_SHOW_FRIENDS_URL, twitter_http_get_statuses_friends, ic, 0, td->user, td->pass, td->oauth_info, args, 2);
    653623
    654624        g_free(args[1]);
     
    656626
    657627/**
    658  * Callback to use after sending a post request to twitter.
    659  */
    660 static void twitter_http_post(struct http_request *req)
     628 * Callback after sending a new update to twitter.
     629 */
     630static void twitter_http_post_status(struct http_request *req)
    661631{
    662632        struct im_connection *ic = req->data;
     
    669639        if (req->status_code != 200) {
    670640                // It didn't go well, output the error and return.
    671                 imcb_error(ic, "HTTP error: %s", twitter_parse_error(req));
     641                imcb_error(ic, "Could not post message... HTTP STATUS: %d", req->status_code);
    672642                return;
    673643        }
     
    679649void twitter_post_status(struct im_connection *ic, char* msg)
    680650{
     651        struct twitter_data *td = ic->proto_data;
     652
    681653        char* args[2];
    682654        args[0] = "status";
    683655        args[1] = msg;
    684         twitter_http(ic, TWITTER_STATUS_UPDATE_URL, twitter_http_post, ic, 1, args, 2);
     656        twitter_http(TWITTER_STATUS_UPDATE_URL, twitter_http_post_status, ic, 1, td->user, td->pass, td->oauth_info, args, 2);
    685657//      g_free(args[1]);
    686658}
     
    692664void twitter_direct_messages_new(struct im_connection *ic, char *who, char *msg)
    693665{
     666        struct twitter_data *td = ic->proto_data;
     667
    694668        char* args[4];
    695669        args[0] = "screen_name";
     
    698672        args[3] = msg;
    699673        // Use the same callback as for twitter_post_status, since it does basically the same.
    700         twitter_http(ic, TWITTER_DIRECT_MESSAGES_NEW_URL, twitter_http_post, ic, 1, args, 4);
     674        twitter_http(TWITTER_DIRECT_MESSAGES_NEW_URL, twitter_http_post_status, ic, 1, td->user, td->pass, td->oauth_info, args, 4);
    701675//      g_free(args[1]);
    702676//      g_free(args[3]);
    703677}
    704 
    705 void twitter_friendships_create_destroy(struct im_connection *ic, char *who, int create)
    706 {
    707         char* args[2];
    708         args[0] = "screen_name";
    709         args[1] = who;
    710         twitter_http(ic, create ? TWITTER_FRIENDSHIPS_CREATE_URL : TWITTER_FRIENDSHIPS_DESTROY_URL, twitter_http_post, ic, 1, args, 2);
    711 }
  • protocols/twitter/twitter_lib.h

    r3759849 r1dd3470  
    3232
    3333/* Status URLs */
    34 #define TWITTER_STATUS_UPDATE_URL "/statuses/update.xml"
    35 #define TWITTER_STATUS_SHOW_URL "/statuses/show/"
    36 #define TWITTER_STATUS_DESTROY_URL "/statuses/destroy/"
     34#define TWITTER_STATUS_UPDATE_URL TWITTER_API_URL "/statuses/update.xml"
     35#define TWITTER_STATUS_SHOW_URL TWITTER_API_URL "/statuses/show/"
     36#define TWITTER_STATUS_DESTROY_URL TWITTER_API_URL "/statuses/destroy/"
    3737
    3838/* Timeline URLs */
    39 #define TWITTER_PUBLIC_TIMELINE_URL "/statuses/public_timeline.xml"
    40 #define TWITTER_FEATURED_USERS_URL "/statuses/featured.xml"
    41 #define TWITTER_FRIENDS_TIMELINE_URL "/statuses/friends_timeline.xml"
    42 #define TWITTER_HOME_TIMELINE_URL "/statuses/home_timeline.xml"
    43 #define TWITTER_MENTIONS_URL "/statuses/mentions.xml"
    44 #define TWITTER_USER_TIMELINE_URL "/statuses/user_timeline.xml"
     39#define TWITTER_PUBLIC_TIMELINE_URL TWITTER_API_URL "/statuses/public_timeline.xml"
     40#define TWITTER_FEATURED_USERS_URL TWITTER_API_URL "/statuses/featured.xml"
     41#define TWITTER_FRIENDS_TIMELINE_URL TWITTER_API_URL "/statuses/friends_timeline.xml"
     42#define TWITTER_HOME_TIMELINE_URL TWITTER_API_URL "/statuses/home_timeline.xml"
     43#define TWITTER_MENTIONS_URL TWITTER_API_URL "/statuses/mentions.xml"
     44#define TWITTER_USER_TIMELINE_URL TWITTER_API_URL "/statuses/user_timeline.xml"
    4545
    4646/* Users URLs */
    47 #define TWITTER_SHOW_USERS_URL "/users/show.xml"
    48 #define TWITTER_SHOW_FRIENDS_URL "/statuses/friends.xml"
    49 #define TWITTER_SHOW_FOLLOWERS_URL "/statuses/followers.xml"
     47#define TWITTER_SHOW_USERS_URL TWITTER_API_URL "/users/show.xml"
     48#define TWITTER_SHOW_FRIENDS_URL TWITTER_API_URL "/statuses/friends.xml"
     49#define TWITTER_SHOW_FOLLOWERS_URL TWITTER_API_URL "/statuses/followers.xml"
    5050
    5151/* Direct messages URLs */
    52 #define TWITTER_DIRECT_MESSAGES_URL "/direct_messages.xml"
    53 #define TWITTER_DIRECT_MESSAGES_NEW_URL "/direct_messages/new.xml"
    54 #define TWITTER_DIRECT_MESSAGES_SENT_URL "/direct_messages/sent.xml"
    55 #define TWITTER_DIRECT_MESSAGES_DESTROY_URL "/direct_messages/destroy/"
     52#define TWITTER_DIRECT_MESSAGES_URL TWITTER_API_URL "/direct_messages.xml"
     53#define TWITTER_DIRECT_MESSAGES_NEW_URL TWITTER_API_URL "/direct_messages/new.xml"
     54#define TWITTER_DIRECT_MESSAGES_SENT_URL TWITTER_API_URL "/direct_messages/sent.xml"
     55#define TWITTER_DIRECT_MESSAGES_DESTROY_URL TWITTER_API_URL "/direct_messages/destroy/"
    5656
    5757/* Friendships URLs */
    58 #define TWITTER_FRIENDSHIPS_CREATE_URL "/friendships/create.xml"
    59 #define TWITTER_FRIENDSHIPS_DESTROY_URL "/friendships/destroy.xml"
    60 #define TWITTER_FRIENDSHIPS_SHOW_URL "/friendships/show.xml"
     58#define TWITTER_FRIENDSHIPS_CREATE_URL TWITTER_API_URL "/friendships/create.xml"
     59#define TWITTER_FRIENDSHIPS_DESTROY_URL TWITTER_API_URL "/friendships/destroy.xml"
     60#define TWITTER_FRIENDSHIPS_SHOW_URL TWITTER_API_URL "/friendships/show.xml"
    6161
    6262/* Social graphs URLs */
    63 #define TWITTER_FRIENDS_IDS_URL "/friends/ids.xml"
    64 #define TWITTER_FOLLOWERS_IDS_URL "/followers/ids.xml"
     63#define TWITTER_FRIENDS_IDS_URL TWITTER_API_URL "/friends/ids.xml"
     64#define TWITTER_FOLLOWERS_IDS_URL TWITTER_API_URL "/followers/ids.xml"
    6565
    6666/* Account URLs */
    67 #define TWITTER_ACCOUNT_RATE_LIMIT_URL "/account/rate_limit_status.xml"
     67#define TWITTER_ACCOUNT_RATE_LIMIT_URL TWITTER_API_URL "/account/rate_limit_status.xml"
    6868
    6969/* Favorites URLs */
    70 #define TWITTER_FAVORITES_GET_URL "/favorites.xml"
    71 #define TWITTER_FAVORITE_CREATE_URL "/favorites/create/"
    72 #define TWITTER_FAVORITE_DESTROY_URL "/favorites/destroy/"
     70#define TWITTER_FAVORITES_GET_URL TWITTER_API_URL "/favorites.xml"
     71#define TWITTER_FAVORITE_CREATE_URL TWITTER_API_URL "/favorites/create/"
     72#define TWITTER_FAVORITE_DESTROY_URL TWITTER_API_URL "/favorites/destroy/"
    7373
    7474/* Block URLs */
    75 #define TWITTER_BLOCKS_CREATE_URL "/blocks/create/"
    76 #define TWITTER_BLOCKS_DESTROY_URL "/blocks/destroy/"
     75#define TWITTER_BLOCKS_CREATE_URL TWITTER_API_URL "/blocks/create/"
     76#define TWITTER_BLOCKS_DESTROY_URL TWITTER_API_URL "/blocks/destroy/"
    7777
    7878void twitter_get_friends_ids(struct im_connection *ic, int next_cursor);
     
    8282void twitter_post_status(struct im_connection *ic, char *msg);
    8383void twitter_direct_messages_new(struct im_connection *ic, char *who, char *message);
    84 void twitter_friendships_create_destroy(struct im_connection *ic, char *who, int create);
    8584
    8685#endif //_TWITTER_LIB_H
Note: See TracChangeset for help on using the changeset viewer.