Changeset 5

Show
Ignore:
Timestamp:
11/07/06 16:53:52 (2 years ago)
Author:
inz
Message:

Fix bugs in xmlrpc-c usage.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • maemo-blog/trunk/blog-blogger.c

    r2 r5  
    99#include "blog-plugin.h" 
    1010 
     11struct BloggerPluginData { 
     12        xmlrpc_client *client; 
     13        xmlrpc_env env; 
     14}; 
     15 
    1116static gboolean _event_loop(gpointer user_data) 
    1217{ 
    13         (void)user_data; 
    14  
    15         xmlrpc_client_event_loop_finish_asynch_timeout(20); 
     18        struct BloggerPluginData *data = user_data; 
     19 
     20        xmlrpc_client_event_loop_finish_timeout(data->client, 20); 
    1621 
    1722        return TRUE; 
     
    9398        struct xmlrpc_curl_xportparms transportParms; 
    9499        struct xmlrpc_clientparms clientParms; 
     100        struct BloggerPluginData *data; 
    95101 
    96102        retval->connect = blog_blogger_connect; 
     
    102108        retval->uploadImage = blog_blogger_upload_image; 
    103109 
    104         retval->plugin_data = g_new0(xmlrpc_env, 1); 
     110        retval->plugin_data = data = g_new0(struct BloggerPluginData, 1); 
    105111        retval->name = g_strdup("Blogger 1.0"); 
    106112 
     
    115121        transportParms.no_ssl_verifyhost = 1; 
    116122 
    117         xmlrpc_env_init((xmlrpc_env *)retval->plugin_data); 
    118         xmlrpc_client_cleanup(); 
    119         xmlrpc_client_init2((xmlrpc_env *)retval->plugin_data, XMLRPC_CLIENT_NO_FLAGS, (char *)"maemo-blog", (char *)"0.0.1", &clientParms, XMLRPC_CPSIZE(transportparm_size)); 
     123        xmlrpc_env_init(&data->env); 
     124        xmlrpc_client_setup_global_const(&data->env); 
     125        xmlrpc_client_create(&data->env, XMLRPC_CLIENT_NO_FLAGS, (char *)"maemo-blog", (char *)"0.0.1", &clientParms, XMLRPC_CPSIZE(transportparm_size), &data->client); 
    120126 
    121127        return retval; 
     
    172178{ 
    173179        struct BlogBloggerConnectedClosure *clo = g_new0(struct BlogBloggerConnectedClosure, 1); 
     180        struct BloggerPluginData *data = plugin->plugin_data; 
    174181        clo->cb = cb; 
    175182        clo->user_data = user_data; 
     
    179186        clo->self = plugin; 
    180187 
    181         xmlrpc_client_call_asynch((gchar *)uri,  
     188        xmlrpc_client_start_rpcf(&data->env, 
     189                        data->client, 
     190                        (gchar *)uri,  
    182191                        (char *)"blogger.getUsersBlogs", 
    183192                        _blog_blogger_connected, 
     
    188197                        pass); 
    189198 
    190         clo->timeout_id = g_timeout_add(500, _event_loop, NULL); 
     199        clo->timeout_id = g_timeout_add(500, _event_loop, data); 
    191200 
    192201        return TRUE; 
     
    243252        gchar *content; 
    244253        struct BlogBloggerPostedClosure *clo; 
     254        struct BloggerPluginData *data = blog->plugin->plugin_data; 
    245255 
    246256        if (!post || !post->content) { 
     
    259269                        post->content); 
    260270 
    261         xmlrpc_client_call_asynch(blog->url, 
     271        xmlrpc_client_start_rpcf(&data->env, 
     272                        data->client, 
     273                        blog->url, 
    262274                        (char *)"blogger.newPost", 
    263275                        _blog_blogger_posted, 
     
    273285        content = NULL; 
    274286 
    275         clo->timeout_id = g_timeout_add(500, _event_loop, NULL); 
     287        clo->timeout_id = g_timeout_add(500, _event_loop, data); 
    276288 
    277289        return TRUE; 
     
    283295        gchar *content; 
    284296        struct BlogBloggerPostedClosure *clo; 
     297        struct BloggerPluginData *data = blog->plugin->plugin_data; 
    285298 
    286299        if (!post || !post->content || !post->id) { 
     
    299312                        post->content); 
    300313 
    301         xmlrpc_client_call_asynch(blog->url, (char *)"blogger.editPost", 
     314        xmlrpc_client_start_rpcf(&data->env, 
     315                        data->client, 
     316                        blog->url, (char *)"blogger.editPost", 
    302317                        _blog_blogger_posted, 
    303318                        clo, 
     
    311326        g_free(content); 
    312327 
    313         clo->timeout_id = g_timeout_add(500, _event_loop, NULL); 
     328        clo->timeout_id = g_timeout_add(500, _event_loop, data); 
    314329 
    315330        return TRUE; 
     
    391406{ 
    392407        struct BlogBloggerFetchedClosure *clo = g_new0(struct BlogBloggerFetchedClosure, 1); 
     408        struct BloggerPluginData *data = blog->plugin->plugin_data; 
    393409        clo->blog = blog; 
    394410        clo->cb = cb; 
    395411        clo->user_data = user_data; 
    396412 
    397         xmlrpc_client_call_asynch(blog->url, 
     413        xmlrpc_client_start_rpcf(&data->env, 
     414                        data->client, 
     415                        blog->url, 
    398416                        (char *)"blogger.getRecentPosts", 
    399417                        _blog_blogger_got_recent, 
     
    406424                        15); 
    407425         
    408         clo->timeout_id = g_timeout_add(500, _event_loop, NULL); 
     426        clo->timeout_id = g_timeout_add(500, _event_loop, data); 
    409427} 
    410428 
    411429static void blog_blogger_unload(BlogPlugin *plugin) 
    412430{ 
    413         xmlrpc_env_clean((xmlrpc_env *)plugin->plugin_data); 
     431        struct BloggerPluginData *data = plugin->plugin_data; 
     432        xmlrpc_env_clean(&data->env); 
     433        xmlrpc_client_destroy(data->client); 
    414434        g_free(plugin->plugin_data); 
    415435        g_free(plugin->name); 
  • maemo-blog/trunk/blog-metaweblog.c

    r2 r5  
    1010#define die_if_fault_occurred(x) die_if_fault(x, __FUNCTION__, __LINE__) 
    1111 
     12struct MetaweblogPluginData { 
     13        xmlrpc_client *client; 
     14        xmlrpc_env env; 
     15}; 
     16 
    1217static gboolean _event_loop(gpointer user_data) 
    1318{ 
    14         (void)user_data; 
    15  
    16         xmlrpc_client_event_loop_finish_asynch_timeout(20); 
     19        struct MetaweblogPluginData *data = user_data; 
     20 
     21        xmlrpc_client_event_loop_finish_timeout(data->client, 20); 
    1722 
    1823        return TRUE; 
     
    134139        struct xmlrpc_curl_xportparms transportParms; 
    135140        struct xmlrpc_clientparms clientParms; 
    136         xmlrpc_env env
     141        struct MetaweblogPluginData *data
    137142 
    138143        memset(&transportParms, 0, sizeof(transportParms)); 
     
    155160 
    156161        retval->name = g_strdup("MetaWebLog"); 
    157         xmlrpc_env_init(&env); 
    158         xmlrpc_client_init2(&env, XMLRPC_CLIENT_NO_FLAGS, (char *)"maemo-blog", (char *)"0.0.1", &clientParms, XMLRPC_CPSIZE(transportparm_size)); 
    159         xmlrpc_env_clean(&env); 
     162        retval->plugin_data = data = g_new0(struct MetaweblogPluginData, 1); 
     163        xmlrpc_env_init(&data->env); 
     164        xmlrpc_client_setup_global_const(&data->env); 
     165        xmlrpc_client_create(&data->env, XMLRPC_CLIENT_NO_FLAGS, (char *)"maemo-blog", (char *)"0.0.1", &clientParms, XMLRPC_CPSIZE(transportparm_size), &data->client); 
     166        printf("Client: %p\n", data->client); 
     167        die_if_fault_occurred(&data->env); 
    160168        return retval; 
    161169} 
     
    211219{ 
    212220        struct BlogMetaweblogConnectedClosure *clo = g_new0(struct BlogMetaweblogConnectedClosure, 1); 
     221        struct MetaweblogPluginData *data = plugin->plugin_data; 
     222 
    213223        clo->cb = cb; 
    214224        clo->user_data = user_data; 
     
    218228        clo->self = plugin; 
    219229 
    220         xmlrpc_client_call_asynch((gchar *)uri,  
     230        xmlrpc_client_start_rpcf(&data->env, 
     231                        data->client, 
     232                        (gchar *)uri,  
    221233                        (char *)"metaWeblog.getUsersBlogs", 
    222234                        _blog_metaweblog_connected, 
     
    227239                        pass); 
    228240 
    229         clo->timeout_id = g_timeout_add(500, _event_loop, NULL); 
     241        clo->timeout_id = g_timeout_add(500, _event_loop, data); 
    230242 
    231243        return TRUE; 
     
    280292                gboolean publish, BlogPostCb cb, gpointer user_data) 
    281293{ 
    282         xmlrpc_env env; 
    283294        xmlrpc_value *array; 
    284295        GSList *iter; 
    285296        struct BlogMetaweblogPostedClosure *clo; 
     297        struct MetaweblogPluginData *data = blog->plugin->plugin_data; 
    286298 
    287299        if (!post || !post->content) { 
     
    296308        clo->user_data = user_data; 
    297309 
    298         xmlrpc_env_init(&env); 
    299         array = xmlrpc_build_value(&env, "()"); 
    300         die_if_fault_occurred(&env); 
     310        array = xmlrpc_build_value(&data->env, "()"); 
     311        die_if_fault_occurred(&data->env); 
    301312 
    302313        for (iter = post->categories; iter; iter = iter->next) 
    303314        { 
    304315                BlogCategory *cat = (BlogCategory *)iter->data; 
    305                 xmlrpc_value *val = xmlrpc_build_value(&env, "s", 
     316                xmlrpc_value *val = xmlrpc_build_value(&data->env, "s", 
    306317                                cat->name); 
    307                 die_if_fault_occurred(&env); 
    308                 xmlrpc_array_append_item(&env, array, val); 
    309                 die_if_fault_occurred(&env); 
    310         } 
    311  
    312         xmlrpc_client_call_asynch(blog->url, (char *)"metaWeblog.newPost", 
     318                die_if_fault_occurred(&data->env); 
     319                xmlrpc_array_append_item(&data->env, array, val); 
     320                die_if_fault_occurred(&data->env); 
     321        } 
     322 
     323        xmlrpc_client_start_rpcf(&data->env, 
     324                        data->client, 
     325                        blog->url, (char *)"metaWeblog.newPost", 
    313326                        _blog_metaweblog_posted, 
    314327                        clo, 
     
    327340                        publish); 
    328341 
    329         clo->timeout_id = g_timeout_add(500, _event_loop, NULL); 
    330  
    331         xmlrpc_env_clean(&env); 
     342        clo->timeout_id = g_timeout_add(500, _event_loop, data); 
    332343 
    333344        return TRUE; 
     
    341352        GSList *iter; 
    342353        struct BlogMetaweblogPostedClosure *clo; 
     354        struct MetaweblogPluginData *data = blog->plugin->plugin_data; 
    343355 
    344356        if (!post || !post->content || !post->id) { 
     
    367379        } 
    368380         
    369         xmlrpc_client_call_asynch(blog->url, 
     381        xmlrpc_client_start_rpcf(&data->env, 
     382                        data->client, 
     383                        blog->url, 
    370384                        (char *)"metaWeblog.editPost", 
    371385                        _blog_metaweblog_posted, 
     
    386400 
    387401        xmlrpc_env_clean(&env); 
    388         clo->timeout_id = g_timeout_add(500, _event_loop, NULL); 
     402        clo->timeout_id = g_timeout_add(500, _event_loop, data); 
    389403 
    390404        return TRUE; 
     
    431445{ 
    432446        struct BlogMetaweblogFetchedClosure *clo = g_new0(struct BlogMetaweblogFetchedClosure, 1); 
     447        struct MetaweblogPluginData *data = blog->plugin->plugin_data; 
    433448        clo->blog = blog; 
    434449        clo->cb = cb; 
    435450        clo->user_data = user_data; 
    436451 
    437         xmlrpc_client_call_asynch(blog->url, (char *)"metaWeblog.getCategories", 
     452        xmlrpc_client_start_rpcf(&data->env, 
     453                        data->client, 
     454                        blog->url, (char *)"metaWeblog.getCategories", 
    438455                        _blog_metaweblog_got_categories, 
    439456                        clo, 
     
    442459                        blog->user, 
    443460                        blog->pass); 
    444         clo->timeout_id = g_timeout_add(500, _event_loop, NULL); 
     461        clo->timeout_id = g_timeout_add(500, _event_loop, data); 
    445462} 
    446463 
     
    510527{ 
    511528        struct BlogMetaweblogFetchedClosure *clo = g_new0(struct BlogMetaweblogFetchedClosure, 1); 
     529        struct MetaweblogPluginData *data = blog->plugin->plugin_data; 
    512530        clo->blog = blog; 
    513531        clo->cb = cb; 
    514532        clo->user_data = user_data; 
    515533 
    516         xmlrpc_client_call_asynch(blog->url, 
     534        xmlrpc_client_start_rpcf(&data->env, 
     535                        data->client, 
     536                        blog->url, 
    517537                        (char *)"metaWeblog.getRecentPosts", 
    518538                        _blog_metaweblog_got_recent, 
     
    524544                        15); 
    525545 
    526         clo->timeout_id = g_timeout_add(500, _event_loop, NULL); 
     546        clo->timeout_id = g_timeout_add(500, _event_loop, data); 
    527547} 
    528548 
    529549static void blog_metaweblog_unload(BlogPlugin *plugin) 
    530550{ 
     551        struct MetaweblogPluginData *data = plugin->plugin_data; 
     552        xmlrpc_env_clean(&data->env); 
     553        xmlrpc_client_destroy(data->client); 
     554        g_free(data); 
    531555        g_free(plugin->name); 
    532556        g_free(plugin); 
     
    563587{ 
    564588        struct BlogMetaweblogUploadedClosure *clo = g_new0(struct BlogMetaweblogUploadedClosure, 1); 
     589        struct MetaweblogPluginData *data = blog->plugin->plugin_data; 
    565590 
    566591        clo->cb = cb; 
     
    568593        clo->image_name = g_strdup(image_name); 
    569594        clo->blog = blog; 
    570         xmlrpc_client_call_asynch(blog->url, 
     595        xmlrpc_client_start_rpcf(&data->env, 
     596                        data->client, 
     597                        blog->url, 
    571598                        (char *)"metaWeblog.newMediaObject", 
    572599                        _blog_metaweblog_uploaded, 
     
    585612                        ); 
    586613 
    587         clo->timeout_id = g_timeout_add(500, _event_loop, NULL); 
     614        clo->timeout_id = g_timeout_add(500, _event_loop, data); 
    588615 
    589616        return TRUE;