Changeset 108

Show
Ignore:
Timestamp:
03/03/06 18:52:18 (3 years ago)
Author:
abauer
Message:

Fixed some memory leaks in the http bindings

Tuned the perfomance of the http binding

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/development-branch/libsyncml/sml_queue.c

    r101 r108  
    2828static gboolean _queue_prepare(GSource *source, gint *timeout_) 
    2929{ 
    30         *timeout_ = 50
     30        *timeout_ = 1
    3131        return FALSE; 
    3232} 
     
    6363        smlAssert(queue->handler); 
    6464         
    65         smlQueueDispatch(queue); 
     65        while (smlQueueCheck(queue)) 
     66                smlQueueDispatch(queue); 
    6667         
    6768        return TRUE; 
  • branches/development-branch/libsyncml/sml_support.c

    r101 r108  
    365365        //Start the thread 
    366366        g_mutex_lock(thread->started_mutex); 
    367         /*GSource *idle = g_idle_source_new(); 
    368         g_source_set_callback(idle, smlThreadStartCallback, thread, NULL); 
    369     g_source_attach(idle, thread->context); 
    370         thread->thread = g_thread_create ((GThreadFunc)g_main_loop_run, thread->loop, TRUE, NULL); 
    371         g_cond_wait(thread->started, thread->started_mutex);*/ 
    372367        thread->thread = g_thread_create (smlThreadStartCallback, thread, TRUE, NULL); 
    373368        g_cond_wait(thread->started, thread->started_mutex); 
     
    384379        g_main_loop_quit(thread->loop); 
    385380        g_thread_join(thread->thread); 
     381        thread->thread = NULL; 
    386382         
    387383        smlTrace(TRACE_EXIT, "%s", __func__); 
  • branches/development-branch/libsyncml/sml_transport.c

    r101 r108  
    9494                        if (!tsp->functions.connect) { 
    9595                                smlTransportReceiveEvent(tsp, NULL, SML_TRANSPORT_EVENT_CONNECT_DONE, NULL, NULL); 
    96                                 smlTrace(TRACE_INTERNAL, "%s: No disconnect function", __func__); 
     96                                smlTrace(TRACE_INTERNAL, "%s: No connect function", __func__); 
    9797                                break; 
    9898                        } 
     
    188188        tsp->thread = NULL; 
    189189         
     190        g_main_context_unref(tsp->context); 
     191        tsp->context = NULL; 
     192         
    190193        smlTrace(TRACE_EXIT, "%s", __func__); 
    191194} 
     
    290293        g_free(data); 
    291294                 
    292         smlTrace(TRACE_EXIT, "%s", __func__); 
     295        smlTrace(TRACE_EXIT, "%s: Freed", __func__); 
    293296} 
    294297         
     
    403406        g_free(link); 
    404407                 
    405         smlTrace(TRACE_EXIT, "%s", __func__); 
     408        smlTrace(TRACE_EXIT, "%s: Freed", __func__); 
    406409} 
    407410 
  • branches/development-branch/libsyncml/transports/http_client.c

    r101 r108  
    156156         
    157157        smlAssert(env->tsp); 
     158         
     159        g_object_unref(env->session); 
    158160         
    159161        g_free(env->url); 
  • branches/development-branch/libsyncml/transports/http_server.c

    r101 r108  
    100100        smlTransportReceiveEvent(env->tsp, link, SML_TRANSPORT_EVENT_DATA, tspdata, NULL); 
    101101         
     102        smlLinkDeref(link); 
     103        smlTransportDataDeref(tspdata); 
     104         
    102105        soup_message_io_pause(msg); 
    103106         
     
    141144        if (!(config->port > 0 && config->port < 65535)) { 
    142145                smlErrorSet(error, SML_ERROR_MISCONFIGURATION, "specified port was wrong"); 
    143                 goto error
     146                goto error_free_env
    144147        } 
    145148        env->port = config->port; 
     
    149152        env->interface = g_strdup(config->interface); 
    150153         
    151         smlTrace(TRACE_INTERNAL, "config: port %i, url %s, inteface %s", config->port, config->url, config->interface); 
     154        smlTrace(TRACE_INTERNAL, "config: port %i, url %s, interface %s", config->port, config->url, config->interface); 
    152155         
    153156        env->tsp = tsp; 
     
    182185         
    183186        smlAssert(env->tsp); 
     187         
     188        soup_server_quit(env->server); 
     189        g_object_unref(env->server); 
    184190         
    185191        g_free(env->url); 
  • branches/development-branch/tests/check_ds.c

    r101 r108  
    19521952END_TEST 
    19531953 
     1954#if 0 
     1955/* C -- Put, Alert --> S 
     1956 * S -- Status, Put, Alert --> C 
     1957 * C -- Status, Sync, 500 * Add --> S 
     1958 * S -- Status, Sync, 500 * Add --> S 
     1959 * C -- Status, Map --> S 
     1960 * S -- Status --> C */ 
     1961/* Limit the sending size of both sides */ 
     1962START_TEST (check_ds_multi_server) 
     1963{ 
     1964        int num = 50; 
     1965        unsigned int limit = 2000; 
     1966         
     1967        /* General setup */ 
     1968        setup_testbed(NULL); 
     1969         
     1970        SmlError *error = NULL; 
     1971        SmlLocation *loc = smlLocationNew("test", NULL, &error); 
     1972         
     1973        SmlLocation *loc1 = smlLocationNew("vcards", NULL, &error); 
     1974        SmlLocation *loc2 = smlLocationNew("vcals", NULL, &error); 
     1975        SmlLocation *loc3 = smlLocationNew("vnotes", NULL, &error); 
     1976         
     1977        /* The ds clients */ 
     1978        SmlDsServer *client1 = smlDsClientNew(SML_CONTENT_TYPE_VCARD, loc1, loc1, &error); 
     1979        _server_corr *client_corr1 = g_malloc0(sizeof(_server_corr)); 
     1980        client_corr1->server = client1; 
     1981         
     1982        SmlDsServer *client2 = smlDsClientNew(SML_CONTENT_TYPE_VCARD, loc2, loc2, &error); 
     1983        _server_corr *client_corr2 = g_malloc0(sizeof(_server_corr)); 
     1984        client_corr2->server = client2; 
     1985         
     1986        SmlDsServer *client3 = smlDsClientNew(SML_CONTENT_TYPE_VCARD, loc3, loc3, &error); 
     1987        _server_corr *client_corr3 = g_malloc0(sizeof(_server_corr)); 
     1988        client_corr3->server = client3; 
     1989         
     1990        /* The ds servers */ 
     1991        SmlDsServer *server1 = smlDsServerNew(SML_CONTENT_TYPE_VCARD, loc1, &error); 
     1992        _server_corr *server_corr1 = g_malloc0(sizeof(_server_corr)); 
     1993        server_corr1->server = server1; 
     1994        smlDsServerSetConnectCallback(server1, _recv_init_alert, server_corr1); 
     1995         
     1996        SmlDsServer *server2 = smlDsServerNew(SML_CONTENT_TYPE_VCARD, loc2, &error); 
     1997        _server_corr *server_corr2 = g_malloc0(sizeof(_server_corr)); 
     1998        server_corr2->server = server2; 
     1999        smlDsServerSetConnectCallback(server2, _recv_init_alert, server_corr2); 
     2000         
     2001        SmlDsServer *server3 = smlDsServerNew(SML_CONTENT_TYPE_VCARD, loc3, &error); 
     2002        _server_corr *server_corr3 = g_malloc0(sizeof(_server_corr)); 
     2003        server_corr3->server = server3; 
     2004        smlDsServerSetConnectCallback(server3, _recv_init_alert, server_corr3); 
     2005         
     2006         
     2007        /* Start a new session from the client */ 
     2008        SmlSession *session = smlSessionNew(SML_SESSION_TYPE_CLIENT, SML_MIMETYPE_XML, SML_VERSION_12, SML_PROTOCOL_SYNCML, loc, loc, "1", 0, &error); 
     2009        client_corr1->thread = smlSessionRunAsync(session, &to_session); 
     2010        smlSessionSetSendingLimit(session, limit); 
     2011        SmlSession *session2 = smlSessionNew(SML_SESSION_TYPE_SERVER, SML_MIMETYPE_XML, SML_VERSION_12, SML_PROTOCOL_SYNCML, loc, loc, "1", 0, &error); 
     2012        server_corr->thread = smlSessionRunAsync(session2, &to_session2); 
     2013        smlSessionSetSendingLimit(session2, limit); 
     2014         
     2015        smlSessionSetEventCallback(session, _event_callback, client_corr); 
     2016        smlSessionSetDataCallback(session, _data_send_callback, &to_session2); 
     2017        smlSessionSetEventCallback(session2, _event_callback, server_corr); 
     2018        smlSessionSetDataCallback(session2, _data_send_callback, &to_session); 
     2019         
     2020        client_corr->dsession = smlDsServerSendAlert(client, session, SML_ALERT_TWO_WAY, "last", "next", _alert_reply, GINT_TO_POINTER(1), &error); 
     2021        fail_unless(client_corr->dsession != NULL, NULL); 
     2022        fail_unless(error == NULL, NULL); 
     2023         
     2024        fail_unless(smlSessionFlush(session, TRUE, &error), NULL); 
     2025        fail_unless(error == NULL, NULL); 
     2026         
     2027        while (init_alerts_received != 1) { 
     2028                usleep(500); 
     2029        } 
     2030         
     2031        smlDsSessionGetAlert(server_corr1->dsession, _recv_alert, GINT_TO_POINTER(1)); 
     2032        smlDsSessionSendAlert(server_corr1->dsession, SML_ALERT_TWO_WAY, "last", "next", _alert_reply, GINT_TO_POINTER(1), &error); 
     2033         
     2034        smlDsSessionGetAlert(server_corr2->dsession, _recv_alert, GINT_TO_POINTER(1)); 
     2035        smlDsSessionSendAlert(server_corr2->dsession, SML_ALERT_TWO_WAY, "last", "next", _alert_reply, GINT_TO_POINTER(1), &error); 
     2036         
     2037        smlDsSessionGetAlert(server_corr3->dsession, _recv_alert, GINT_TO_POINTER(1)); 
     2038        smlDsSessionSendAlert(server_corr4->dsession, SML_ALERT_TWO_WAY, "last", "next", _alert_reply, GINT_TO_POINTER(1), &error); 
     2039         
     2040         
     2041         
     2042        while (alerts_received != 3) { 
     2043                smlDsSessionDispatch(server_corr1->dsession); 
     2044                smlDsSessionDispatch(server_corr2->dsession); 
     2045                smlDsSessionDispatch(server_corr3->dsession); 
     2046                usleep(500); 
     2047        } 
     2048         
     2049        fail_unless(smlSessionFlush(session2, TRUE, &error), NULL); 
     2050        fail_unless(error == NULL, NULL); 
     2051         
     2052        smlDsSessionGetAlert(client_corr1->dsession, _recv_alert, GINT_TO_POINTER(1)); 
     2053        smlDsSessionGetAlert(client_corr2->dsession, _recv_alert, GINT_TO_POINTER(1)); 
     2054        smlDsSessionGetAlert(client_corr3->dsession, _recv_alert, GINT_TO_POINTER(1)); 
     2055         
     2056         
     2057        while (alerts_received != 6) { 
     2058                smlDsSessionDispatch(client_corr1->dsession); 
     2059                smlDsSessionDispatch(client_corr2->dsession); 
     2060                smlDsSessionDispatch(client_corr3->dsession); 
     2061                usleep(500); 
     2062        } 
     2063         
     2064        smlDsSessionSendSync(client_corr1->dsession, 0, _sync_reply, GINT_TO_POINTER(1), &error); 
     2065        int i = 0; 
     2066        for (i = 0; i < num; i++) { 
     2067                fail_unless(smlDsSessionQueueChange(client_corr1->dsession, SML_CHANGE_ADD, "uid", "data", 5, SML_CONTENT_TYPE_VCARD, _add_reply, GINT_TO_POINTER(2), &error), NULL); 
     2068                fail_unless(error == NULL, NULL); 
     2069        } 
     2070        smlDsSessionCloseSync(client_corr1->dsession, &error); 
     2071         
     2072        smlDsSessionSendSync(client_corr2->dsession, 0, _sync_reply, GINT_TO_POINTER(1), &error); 
     2073        for (i = 0; i < num; i++) { 
     2074                fail_unless(smlDsSessionQueueChange(client_corr2->dsession, SML_CHANGE_ADD, "uid", "data", 5, SML_CONTENT_TYPE_VCARD, _add_reply, GINT_TO_POINTER(2), &error), NULL); 
     2075                fail_unless(error == NULL, NULL); 
     2076        } 
     2077        smlDsSessionCloseSync(client_corr2->dsession, &error); 
     2078         
     2079        smlDsSessionSendSync(client_corr3->dsession, 0, _sync_reply, GINT_TO_POINTER(1), &error); 
     2080        for (i = 0; i < num; i++) { 
     2081                fail_unless(smlDsSessionQueueChange(client_corr3->dsession, SML_CHANGE_ADD, "uid", "data", 5, SML_CONTENT_TYPE_VCARD, _add_reply, GINT_TO_POINTER(2), &error), NULL); 
     2082                fail_unless(error == NULL, NULL); 
     2083        } 
     2084        smlDsSessionCloseSync(client_corr3->dsession, &error); 
     2085         
     2086        fail_unless(smlSessionFlush(session, TRUE, &error), NULL); 
     2087        fail_unless(error == NULL, NULL); 
     2088         
     2089         
     2090        smlDsSessionGetSync(server_corr1->dsession, _recv_sync, GINT_TO_POINTER(1)); 
     2091        smlDsSessionGetChanges(server_corr1->dsession, _recv_changes, GINT_TO_POINTER(1)); 
     2092        smlDsSessionGetSync(server_corr2->dsession, _recv_sync, GINT_TO_POINTER(1)); 
     2093        smlDsSessionGetChanges(server_corr2->dsession, _recv_changes, GINT_TO_POINTER(1)); 
     2094        smlDsSessionGetSync(server_corr3->dsession, _recv_sync, GINT_TO_POINTER(1)); 
     2095        smlDsSessionGetChanges(server_corr3->dsession, _recv_changes, GINT_TO_POINTER(1)); 
     2096         
     2097        while (syncs_received != 3 || adds_received != num * 3) { 
     2098                smlDsSessionDispatch(server_corr1->dsession); 
     2099                smlDsSessionDispatch(server_corr2->dsession); 
     2100                smlDsSessionDispatch(server_corr3->dsession); 
     2101                usleep(5000); 
     2102        } 
     2103         
     2104        smlDsSessionSendSync(server_corr1->dsession, 0, _sync_reply, GINT_TO_POINTER(1), &error); 
     2105        for (i = 0; i < num; i++) { 
     2106                fail_unless(smlDsSessionQueueChange(server_corr1->dsession, SML_CHANGE_ADD, "uid", "data", 5, SML_CONTENT_TYPE_VCARD, _add_reply, GINT_TO_POINTER(1), &error), NULL); 
     2107                fail_unless(error == NULL, NULL); 
     2108        } 
     2109        smlDsSessionCloseSync(server_corr1->dsession, &error); 
     2110         
     2111        smlDsSessionSendSync(server_corr2->dsession, 0, _sync_reply, GINT_TO_POINTER(1), &error); 
     2112        for (i = 0; i < num; i++) { 
     2113                fail_unless(smlDsSessionQueueChange(server_corr2->dsession, SML_CHANGE_ADD, "uid", "data", 5, SML_CONTENT_TYPE_VCARD, _add_reply, GINT_TO_POINTER(1), &error), NULL); 
     2114                fail_unless(error == NULL, NULL); 
     2115        } 
     2116        smlDsSessionCloseSync(server_corr2->dsession, &error); 
     2117         
     2118        smlDsSessionSendSync(server_corr3->dsession, 0, _sync_reply, GINT_TO_POINTER(1), &error); 
     2119        for (i = 0; i < num; i++) { 
     2120                fail_unless(smlDsSessionQueueChange(server_corr3->dsession, SML_CHANGE_ADD, "uid", "data", 5, SML_CONTENT_TYPE_VCARD, _add_reply, GINT_TO_POINTER(1), &error), NULL); 
     2121                fail_unless(error == NULL, NULL); 
     2122        } 
     2123        smlDsSessionCloseSync(server_corr3->dsession, &error); 
     2124         
     2125        fail_unless(smlSessionFlush(session2, TRUE, &error), NULL); 
     2126        fail_unless(error == NULL, NULL); 
     2127         
     2128         
     2129        smlDsSessionGetSync(client_corr1->dsession, _recv_sync, GINT_TO_POINTER(1)); 
     2130        smlDsSessionGetChanges(client_corr1->dsession, _recv_changes, GINT_TO_POINTER(1)); 
     2131        smlDsSessionGetSync(client_corr2->dsession, _recv_sync, GINT_TO_POINTER(1)); 
     2132        smlDsSessionGetChanges(client_corr2->dsession, _recv_changes, GINT_TO_POINTER(1)); 
     2133        smlDsSessionGetSync(client_corr3->dsession, _recv_sync, GINT_TO_POINTER(1)); 
     2134        smlDsSessionGetChanges(client_corr3->dsession, _recv_changes, GINT_TO_POINTER(1)); 
     2135         
     2136        while (adds_received != num * 2 * 3) { 
     2137                smlDsSessionDispatch(client_corr1->dsession); 
     2138                smlDsSessionDispatch(client_corr2->dsession); 
     2139                smlDsSessionDispatch(client_corr3->dsession); 
     2140                usleep(5000); 
     2141        } 
     2142         
     2143        for (i = 0; i < num; i++) { 
     2144                smlDsSessionQueueMap(client_corr1->dsession, "uid", "newuid", &error); 
     2145        } 
     2146        smlDsSessionCloseMap(client_corr1->dsession, _map_reply, GINT_TO_POINTER(1), &error); 
     2147         
     2148        for (i = 0; i < num; i++) { 
     2149                smlDsSessionQueueMap(client_corr2->dsession, "uid", "newuid", &error); 
     2150        } 
     2151        smlDsSessionCloseMap(client_corr2->dsession, _map_reply, GINT_TO_POINTER(1), &error); 
     2152         
     2153        for (i = 0; i < num; i++) { 
     2154                smlDsSessionQueueMap(client_corr3->dsession, "uid", "newuid", &error); 
     2155        } 
     2156        smlDsSessionCloseMap(client_corr3->dsession, _map_reply, GINT_TO_POINTER(1), &error); 
     2157         
     2158        fail_unless(smlSessionFlush(session, TRUE, &error), NULL); 
     2159        fail_unless(error == NULL, NULL); 
     2160         
     2161        while (add_replies_received != num * 2) { 
     2162                usleep(500); 
     2163        } 
     2164         
     2165        fail_unless(smlSessionEnd(session2, &error), NULL); 
     2166        fail_unless(error == NULL, NULL); 
     2167         
     2168        while (session_ends != 2) { 
     2169                usleep(500); 
     2170        } 
     2171         
     2172        smlSessionStop(client_corr1->thread); 
     2173        smlSessionStop(client_corr2->thread); 
     2174        smlSessionStop(client_corr3->thread); 
     2175        smlSessionStop(server_corr1->thread); 
     2176        smlSessionStop(server_corr2->thread); 
     2177        smlSessionStop(server_corr3->thread); 
     2178         
     2179        //fail_unless(data_received == 6, NULL); 
     2180        fail_unless(init_alerts_received == 1, NULL); 
     2181         
     2182        fail_unless(alerts_received == 6, NULL); 
     2183        fail_unless(syncs_received == 6, NULL); 
     2184        fail_unless(changes_received == 0, NULL); 
     2185        fail_unless(replies_received == 15, NULL); 
     2186        fail_unless(session_ends == 2, NULL); 
     2187         
     2188        fail_unless(adds_received == num * 2 * 3, NULL); 
     2189        fail_unless(add_replies_received == num * 2 * 3, NULL); 
     2190        fail_unless(deletes_received == 0, NULL); 
     2191        fail_unless(delete_replies_received == 0, NULL); 
     2192        fail_unless(modifies_received == 0, NULL); 
     2193        fail_unless(modify_replies_received == 0, NULL); 
     2194         
     2195        g_free(client_corr1); 
     2196        g_free(client_corr2); 
     2197        g_free(client_corr3); 
     2198        g_free(server_corr1); 
     2199        g_free(server_corr2); 
     2200        g_free(server_corr3); 
     2201         
     2202        smlSessionFree(session); 
     2203        smlSessionFree(session2); 
     2204                 
     2205        smlDsServerFree(server1); 
     2206        smlDsServerFree(server2); 
     2207        smlDsServerFree(server3); 
     2208        smlDsServerFree(client1); 
     2209        smlDsServerFree(client2); 
     2210        smlDsServerFree(client3); 
     2211} 
     2212END_TEST 
     2213#endif 
     2214 
    19542215Suite *datasync_suite(void) 
    19552216{ 
     
    19752236         * - Slow-sync overwrite 
    19762237         * - Aborting 
    1977          * - Auth 
    19782238         * - lots of changes with limit 
    19792239         * - large objs with both limits 
    1980          * - devinf get 
    19812240         * - missing map 
    1982          * - conflict resolution 
    19832241         * - size too small for one object 
     2242         * - SAN 
     2243         * - SAN 1.2 
    19842244         */ 
    19852245         
  • branches/development-branch/tests/check_http.c

    r101 r108  
    7474        SmlTransportHttpClientConfig config; 
    7575        config.port = -1; 
    76         config.url = g_strdup("test.com")
     76        config.url = "test.com"
    7777        config.proxy = NULL; 
    7878         
    7979        fail_unless(!smlTransportInitialize(tsp, &config, &error), NULL); 
    8080        fail_unless(error != NULL, NULL); 
     81         
     82        smlErrorDeref(&error); 
    8183         
    8284        smlTransportFree(tsp); 
     
    159161        fail_unless(!smlTransportInitialize(tsp, &config, &error), NULL); 
    160162        fail_unless(error != NULL, NULL); 
     163        smlErrorDeref(&error); 
    161164         
    162165        smlTransportFree(tsp); 
     
    214217                                fail_unless(data->type == SML_MIMETYPE_XML, NULL); 
    215218                                fail_unless(link != NULL, NULL); 
    216                                 smlTransportDataDeref(data); 
    217219                                 
    218220                                if (GPOINTER_TO_INT(userdata) == 1) { 
     
    222224                                 
    223225                                        fail_unless(smlTransportSend(tsp, link, data, NULL), NULL); 
     226                                         
     227                                        smlTransportDataDeref(data); 
    224228                                } else if (GPOINTER_TO_INT(userdata) == 2) { 
    225229                                        SmlError *newerror = NULL; 
     
    233237                                fail_unless(data->type == SML_MIMETYPE_XML, NULL); 
    234238                                fail_unless(link != NULL, NULL); 
    235                                 smlTransportDataDeref(data); 
    236239                                 
    237240                                SmlError *newerror = NULL; 
     
    258261         
    259262        SmlTransportHttpClientConfig clientConfig; 
    260         clientConfig.port = 9999
    261         clientConfig.url = g_strdup("127.0.0.1")
     263        clientConfig.port = 10008
     264        clientConfig.url = "http://127.0.0.1:10008"
    262265        clientConfig.proxy = NULL; 
    263266         
    264267        SmlTransportHttpServerConfig serverConfig; 
    265         serverConfig.port = 9999
     268        serverConfig.port = 10008
    266269        serverConfig.url = NULL; 
    267270        serverConfig.interface = NULL; 
     
    280283        fail_unless(error == NULL, NULL); 
    281284         
    282         while (client_connect_done == 0) {}; 
     285        while (client_connect_done == 0) { usleep(50); }; 
    283286         
    284287        fail_unless(client_connect_done == 1, NULL); 
     
    288291        fail_unless(error == NULL, NULL); 
    289292         
    290         while (client_disconnect_done == 0) {}; 
     293        while (client_disconnect_done == 0) { usleep(50); }; 
    291294         
    292295        fail_unless(client_connect_done == 1, NULL); 
     
    313316         
    314317        SmlTransportHttpClientConfig clientConfig; 
    315         clientConfig.port = 9999; 
    316         clientConfig.url = g_strdup("127.0.0.1")
     318        clientConfig.port = 10009; 
     319        clientConfig.url = "http://127.0.0.1:10009"
    317320        clientConfig.proxy = NULL; 
    318321         
    319322        SmlTransportHttpServerConfig serverConfig; 
    320         serverConfig.port = 9999; 
     323        serverConfig.port = 10009; 
    321324        serverConfig.url = NULL; 
    322325        serverConfig.interface = NULL; 
     
    339342        fail_unless(error == NULL, NULL); 
    340343         
     344        smlTransportDataDeref(data); 
     345         
    341346        smlTransportStop(client); 
    342347        smlTransportStop(server); 
     
    352357START_TEST (http_receive) 
    353358{ 
     359        client_connect_done = 0; 
     360        client_disconnect_done = 0; 
     361        client_receives = 0; 
     362        client_errors = 0; 
     363        server_receives = 0; 
     364 
    354365        setup_testbed(NULL); 
    355366         
     
    359370         
    360371        SmlTransportHttpClientConfig clientConfig; 
    361         clientConfig.port = 9999
    362         clientConfig.url = g_strdup("http://127.0.0.1:9999")
     372        clientConfig.port = 10010
     373        clientConfig.url = "http://127.0.0.1:10010"
    363374        clientConfig.proxy = NULL; 
    364375         
    365376        SmlTransportHttpServerConfig serverConfig; 
    366         serverConfig.port = 9999
     377        serverConfig.port = 10010
    367378        serverConfig.url = NULL; 
    368379        serverConfig.interface = NULL; 
     
    385396        fail_unless(smlTransportSend(client, NULL, data, &error), NULL); 
    386397        fail_unless(error == NULL, NULL); 
     398         
     399        smlTransportDataDeref(data); 
    387400         
    388401        while (1) { 
     
    407420START_TEST (http_reply) 
    408421{ 
     422        client_connect_done = 0; 
     423        client_disconnect_done = 0; 
     424        client_receives = 0; 
     425        client_errors = 0; 
     426        server_receives = 0; 
    409427        setup_testbed(NULL); 
    410428         
     
    414432         
    415433        SmlTransportHttpClientConfig clientConfig; 
    416         clientConfig.port = 9999
    417         clientConfig.url = g_strdup("http://127.0.0.1:9999")
     434        clientConfig.port = 10011
     435        clientConfig.url = "http://127.0.0.1:10011"
    418436        clientConfig.proxy = NULL; 
    419437         
    420438        SmlTransportHttpServerConfig serverConfig; 
    421         serverConfig.port = 9999
     439        serverConfig.port = 10011
    422440        serverConfig.url = NULL; 
    423441        serverConfig.interface = NULL; 
     
    440458        fail_unless(smlTransportSend(client, NULL, data, &error), NULL); 
    441459        fail_unless(error == NULL, NULL); 
     460         
     461        smlTransportDataDeref(data); 
    442462         
    443463        while (1) { 
     
    463483START_TEST (http_talk) 
    464484{ 
     485        client_connect_done = 0; 
     486        client_disconnect_done = 0; 
     487        client_receives = 0; 
     488        client_errors = 0; 
     489        server_receives = 0; 
    465490        setup_testbed(NULL); 
    466491         
     
    470495         
    471496        SmlTransportHttpClientConfig clientConfig; 
    472         clientConfig.port = 9999
    473         clientConfig.url = g_strdup("http://127.0.0.1:9999")
     497        clientConfig.port = 10012
     498        clientConfig.url = "http://127.0.0.1:10012"
    474499        clientConfig.proxy = NULL; 
    475500         
    476501        SmlTransportHttpServerConfig serverConfig; 
    477         serverConfig.port = 9999
     502        serverConfig.port = 10012
    478503        serverConfig.url = NULL; 
    479504        serverConfig.interface = NULL; 
     
    500525                fail_unless(smlTransportSend(client, NULL, data, &error), NULL); 
    501526                fail_unless(error == NULL, NULL); 
     527                 
     528                smlTransportDataDeref(data); 
    502529                 
    503530                while (1) { 
     
    524551START_TEST (http_connect_error) 
    525552{ 
     553        client_connect_done = 0; 
     554        client_disconnect_done = 0; 
     555        client_receives = 0; 
     556        client_errors = 0; 
     557        server_receives = 0; 
    526558        setup_testbed(NULL); 
    527559         
     
    530562         
    531563        SmlTransportHttpClientConfig clientConfig; 
    532         clientConfig.port = 9999
    533         clientConfig.url = g_strdup("http://127.0.0.1:9999")
     564        clientConfig.port = 10013
     565        clientConfig.url = "http://127.0.0.1:10013"
    534566        clientConfig.proxy = NULL; 
    535567 
     
    548580        fail_unless(error == NULL, NULL); 
    549581 
     582        smlTransportDataDeref(data); 
     583                 
    550584        while (client_errors == 0) { usleep(100); }; 
    551585         
     
    565599START_TEST (http_reject) 
    566600{ 
     601        client_connect_done = 0; 
     602        client_disconnect_done = 0; 
     603        client_receives = 0; 
     604        client_errors = 0; 
     605        server_receives = 0; 
    567606        setup_testbed(NULL); 
    568607         
     
    572611         
    573612        SmlTransportHttpClientConfig clientConfig; 
    574         clientConfig.port = 9999
    575         clientConfig.url = g_strdup("http://127.0.0.1:9999")
     613        clientConfig.port = 10014
     614        clientConfig.url = "http://127.0.0.1:10014"
    576615        clientConfig.proxy = NULL; 
    577616         
    578617        SmlTransportHttpServerConfig serverConfig; 
    579         serverConfig.port = 9999
     618        serverConfig.port = 10014
    580619        serverConfig.url = NULL; 
    581620        serverConfig.interface = NULL; 
     
    599638        fail_unless(error == NULL, NULL); 
    600639 
     640        smlTransportDataDeref(data); 
     641         
    601642        while (server_receives == 0) { usleep(100); }; 
    602643         
     
    623664START_TEST (http_multi_connect) 
    624665{ 
     666        client_connect_done = 0; 
     667        client_disconnect_done = 0; 
     668        client_receives = 0; 
     669        client_errors = 0; 
     670        server_receives = 0; 
    625671        setup_testbed(NULL); 
    626672         
     
    632678         
    633679        SmlTransportHttpClientConfig clientConfig; 
    634         clientConfig.port = 9999
    635         clientConfig.url = g_strdup("http://127.0.0.1:9999")
     680        clientConfig.port = 10015
     681        clientConfig.url = "http://127.0.0.1:10015"
    636682        clientConfig.proxy = NULL; 
    637683         
    638684        SmlTransportHttpServerConfig serverConfig; 
    639         serverConfig.port = 9999
     685        serverConfig.port = 10015
    640686        serverConfig.url = NULL; 
    641687        serverConfig.interface = NULL; 
     
    707753START_TEST (http_multi_partial_error) 
    708754{ 
     755        client_connect_done = 0; 
     756        client_disconnect_done = 0; 
     757        client_receives = 0; 
     758        client_errors = 0; 
     759        server_receives = 0; 
    709760        setup_testbed(NULL); 
    710761         
     
    716767         
    717768        SmlTransportHttpClientConfig clientConfig; 
    718         clientConfig.port = 9999
    719         clientConfig.url = "http://127.0.0.1:9999"; 
     769        clientConfig.port = 10016
     770        clientConfig.url = "http://127.0.0.1:10016"; 
    720771        clientConfig.proxy = NULL; 
    721772         
    722773        SmlTransportHttpServerConfig serverConfig; 
    723         serverConfig.port = 9999
     774        serverConfig.port = 10016
    724775        serverConfig.url = NULL; 
    725776        serverConfig.interface = NULL; 
     
    791842END_TEST 
    792843 
     844START_TEST (http_multi_stress) 
     845{ 
     846        int num = 1000; 
     847         
     848        client_connect_done = 0; 
     849        client_disconnect_done = 0; 
     850        client_receives = 0; 
     851        client_errors = 0; 
     852        server_receives = 0; 
     853        setup_testbed(NULL); 
     854         
     855        SmlError *error = NULL; 
     856        SmlTransport *server = smlTransportNew(SML_TRANSPORT_HTTP_SERVER, &error); 
     857        SmlTransport *client1 = smlTransportNew(SML_TRANSPORT_HTTP_CLIENT, &error); 
     858        SmlTransport *client2 = smlTransportNew(SML_TRANSPORT_HTTP_CLIENT, &error); 
     859        SmlTransport *client3 = smlTransportNew(SML_TRANSPORT_HTTP_CLIENT, &error); 
     860         
     861        SmlTransportHttpClientConfig clientConfig; 
     862        clientConfig.port = 10015; 
     863        clientConfig.url = "http://127.0.0.1:10015"; 
     864        clientConfig.proxy = NULL; 
     865         
     866        SmlTransportHttpServerConfig serverConfig; 
     867        serverConfig.port = 10015; 
     868        serverConfig.url = NULL; 
     869        serverConfig.interface = NULL; 
     870 
     871        fail_unless(smlTransportRunAsync(client1, &error), NULL); 
     872        fail_unless(error == NULL, NULL); 
     873        fail_unless(smlTransportRunAsync(client2, &error), NULL); 
     874        fail_unless(error == NULL, NULL); 
     875        fail_unless(smlTransportRunAsync(client3, &error), NULL); 
     876        fail_unless(error == NULL, NULL); 
     877        fail_unless(smlTransportRunAsync(server, &error), NULL); 
     878        fail_unless(error == NULL, NULL); 
     879         
     880        fail_unless(smlTransportInitialize(client1, &clientConfig, &error), NULL); 
     881        fail_unless(smlTransportInitialize(client2, &clientConfig, &error), NULL); 
     882        fail_unless(smlTransportInitialize(client3, &clientConfig, &error), NULL); 
     883        fail_unless(smlTransportInitialize(server, &serverConfig, &error), NULL); 
     884 
     885        smlTransportSetEventCallback(client1, _recv_client_event, GINT_TO_POINTER(1)); 
     886        smlTransportSetEventCallback(client2, _recv_client_event, GINT_TO_POINTER(1)); 
     887        smlTransportSetEventCallback(client3, _recv_client_event, GINT_TO_POINTER(1)); 
     888        smlTransportSetEventCallback(server, _recv_server_event, GINT_TO_POINTER(1)); 
     889         
     890        SmlTransportData *data = NULL; 
     891         
     892        int i; 
     893        for (i = 0; i < num; i++) { 
     894                data = smlTransportDataNew("test", 5, SML_MIMETYPE_XML, FALSE, &error); 
     895                fail_unless(data != NULL, NULL); 
     896                fail_unless(error == NULL, NULL); 
     897                fail_unless(smlTransportSend(client1, NULL, data, &error), NULL); 
     898                fail_unless(error == NULL, NULL); 
     899                smlTransportDataDeref(data); 
     900                 
     901                data = smlTransportDataNew("test", 5, SML_MIMETYPE_XML, FALSE, &error); 
     902                fail_unless(data != NULL, NULL); 
     903                fail_unless(error == NULL, NULL); 
     904                fail_unless(smlTransportSend(client2, NULL, data, &error), NULL); 
     905                fail_unless(error == NULL, NULL); 
     906                smlTransportDataDeref(data); 
     907                 
     908                data = smlTransportDataNew("test", 5, SML_MIMETYPE_XML, FALSE, &error); 
     909                fail_unless(data != NULL, NULL); 
     910                fail_unless(error == NULL, NULL); 
     911                fail_unless(smlTransportSend(client3, NULL, data, &error), NULL); 
     912                fail_unless(error == NULL, NULL); 
     913                smlTransportDataDeref(data); 
     914                 
     915                while (1) { 
     916                        usleep(1); 
     917                        if (client_receives == (i+1)*3) 
     918                                break; 
     919                } 
     920        } 
     921         
     922        fail_unless(client_receives == 3 * num, NULL); 
     923        fail_unless(server_receives == 3 * num, NULL); 
     924         
     925        smlTransportStop(client1); 
     926        smlTransportStop(client2); 
     927        smlTransportStop(client3); 
     928        smlTransportStop(server); 
     929         
     930        fail_unless(smlTransportFinalize(server, &error), NULL); 
     931        fail_unless(smlTransportFinalize(client1, &error), NULL); 
     932        fail_unless(smlTransportFinalize(client2, &error), NULL); 
     933        fail_unless(smlTransportFinalize(client3, &error), NULL); 
     934         
     935        smlTransportFree(server); 
     936        smlTransportFree(client1); 
     937        smlTransportFree(client2); 
     938        smlTransportFree(client3); 
     939} 
     940END_TEST 
     941 
    793942Suite *http_suite(void) 
    794943{ 
    795944        Suite *s = suite_create("Http Transports"); 
    796         //Suite *s2 = suite_create("Http Transports"); 
     945        Suite *s2 = suite_create("Http Transports"); 
    797946         
    798947        create_case(s, "http_client_new", http_client_new); 
     
    814963        create_case(s, "http_multi_connect", http_multi_connect); 
    815964        create_case(s, "http_multi_partial_error", http_multi_partial_error); 
    816          
    817         return s; 
     965        create_case(s2, "http_multi_stress", http_multi_stress); 
     966         
     967        return s2; 
    818968} 
    819969