Navigation


Changeset 639:95a784729cac in freeDiameter for freeDiameter/tests/testdisp.c


Ignore:
Timestamp:
Dec 20, 2010, 1:07:06 PM (13 years ago)
Author:
Sebastien Decugis <sdecugis@nict.go.jp>
Branch:
default
Phase:
public
Message:

Added new opaque pointer to fd_sess_handler_create and fd_disp_register for usability. Bumped API version number.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • freeDiameter/tests/testdisp.c

    r90 r639  
    3636#include "tests.h"
    3737       
    38 #define Define_cb( __int, __extra )                                                                             \
    39 int cb_##__int( struct msg ** msg, struct avp * avp, struct session * session, enum disp_action * action )      \
    40 {                                                                                                               \
    41         CHECK( 1, msg ? 1 : 0 );                                                                                \
    42         CHECK( 1, action ? 1 : 0 );                                                                             \
    43         CHECK( sess, session );                                                                                 \
    44         *action = DISP_ACT_CONT;                                                                                \
    45         cbcalled[__int] += 1;                                                                                   \
    46         do {                                                                                                    \
    47                 __extra ;                                                                                       \
    48         } while (0);                                                                                            \
    49         return 0;                                                                                               \
     38#define Define_cb( __int, __extra )                                                                                             \
     39int cb_##__int( struct msg ** msg, struct avp * avp, struct session * session, void * opaque, enum disp_action * action )       \
     40{                                                                                                                               \
     41        CHECK( 1, msg ? 1 : 0 );                                                                                                \
     42        CHECK( 1, action ? 1 : 0 );                                                                                             \
     43        CHECK( sess, session );                                                                                                 \
     44        if (opaque) {                                                                                                           \
     45                CHECK( 1, opaque == g_opaque ? 1 : 0 );                                                                         \
     46        }                                                                                                                       \
     47        *action = DISP_ACT_CONT;                                                                                                \
     48        cbcalled[__int] += 1;                                                                                                   \
     49        do {                                                                                                                    \
     50                __extra ;                                                                                                       \
     51        } while (0);                                                                                                            \
     52        return 0;                                                                                                               \
    5053}
    5154
     
    5356char cbcalled[NB_CB];
    5457struct session * sess;
     58void * g_opaque = (void *)"test";
    5559
    5660/* cb_0 */  Define_cb( 0, );
     
    142146        /* Register first handler, very simple test */
    143147        {
    144                 CHECK( 0, fd_disp_register( cb_0, DISP_HOW_ANY, NULL, &hdl[0] ) );
     148                CHECK( 0, fd_disp_register( cb_0, DISP_HOW_ANY, NULL, NULL, &hdl[0] ) );
    145149                CHECK( 1, hdl[0] ? 1 : 0 );
    146                 CHECK( 0, fd_disp_unregister( &hdl[0] ) );
     150                CHECK( 0, fd_disp_unregister( &hdl[0], NULL ) );
    147151                CHECK( NULL, hdl[0] );
    148                 CHECK( 0, fd_disp_register( cb_0, DISP_HOW_ANY, NULL, &hdl[0] ) );
     152                CHECK( 0, fd_disp_register( cb_0, DISP_HOW_ANY, NULL, NULL, &hdl[0] ) );
    149153       
    150154                /* Check this handler is called for a message */
     
    157161                /* Delete the message */
    158162                CHECK( 0, fd_msg_free( msg ) );
    159                 CHECK( 0, fd_disp_unregister( &hdl[0] ) );
     163                CHECK( 0, fd_disp_unregister( &hdl[0], NULL ) );
    160164        }
    161165       
    162166        /* Handlers for applications */
    163167        {
    164                 CHECK( 0, fd_disp_register( cb_0, DISP_HOW_ANY, &when, &hdl[0] ) );
     168                CHECK( 0, fd_disp_register( cb_0, DISP_HOW_ANY, &when, NULL, &hdl[0] ) );
    165169                when.app = app1;
    166                 CHECK( 0, fd_disp_register( cb_1, DISP_HOW_APPID, &when, &hdl[1] ) );
     170                CHECK( 0, fd_disp_register( cb_1, DISP_HOW_APPID, &when, NULL, &hdl[1] ) );
    167171                when.app = app2;
    168                 CHECK( 0, fd_disp_register( cb_2, DISP_HOW_APPID, &when, &hdl[2] ) );
     172                CHECK( 0, fd_disp_register( cb_2, DISP_HOW_APPID, &when, NULL, &hdl[2] ) );
    169173                when.avp = avp2;
    170                 CHECK( 0, fd_disp_register( cb_3, DISP_HOW_APPID, &when, &hdl[3] ) );
     174                CHECK( 0, fd_disp_register( cb_3, DISP_HOW_APPID, &when, NULL, &hdl[3] ) );
    171175                when.avp = avp1;
    172                 CHECK( 0, fd_disp_register( cb_4, DISP_HOW_APPID, &when, &hdl[4] ) );
     176                CHECK( 0, fd_disp_register( cb_4, DISP_HOW_APPID, &when, NULL, &hdl[4] ) );
    173177       
    174178                /* Check the callbacks are called as appropriate */
     
    206210                CHECK( 0, fd_msg_free( msg ) );
    207211               
    208                 CHECK( 0, fd_disp_unregister( &hdl[0] ) );
    209                 CHECK( 0, fd_disp_unregister( &hdl[1] ) );
    210                 CHECK( 0, fd_disp_unregister( &hdl[2] ) );
    211                 CHECK( 0, fd_disp_unregister( &hdl[3] ) );
    212                 CHECK( 0, fd_disp_unregister( &hdl[4] ) );
     212                CHECK( 0, fd_disp_unregister( &hdl[0], NULL ) );
     213                CHECK( 0, fd_disp_unregister( &hdl[1], NULL ) );
     214                CHECK( 0, fd_disp_unregister( &hdl[2], NULL ) );
     215                CHECK( 0, fd_disp_unregister( &hdl[3], NULL ) );
     216                CHECK( 0, fd_disp_unregister( &hdl[4], NULL ) );
    213217        }
    214218       
     
    217221                when.app = NULL;
    218222                when.command = NULL;
    219                 CHECK( 0, fd_disp_register( cb_0, DISP_HOW_ANY, &when, &hdl[0] ) );
    220                 CHECK( EINVAL, fd_disp_register( cb_1, DISP_HOW_CC, &when, &hdl[1] ) );
     223                CHECK( 0, fd_disp_register( cb_0, DISP_HOW_ANY, &when, NULL, &hdl[0] ) );
     224                CHECK( EINVAL, fd_disp_register( cb_1, DISP_HOW_CC, &when, NULL, &hdl[1] ) );
    221225                when.command = cmd1;
    222                 CHECK( 0, fd_disp_register( cb_1, DISP_HOW_CC, &when, &hdl[1] ) ); /* cmd1 */
     226                CHECK( 0, fd_disp_register( cb_1, DISP_HOW_CC, &when, NULL, &hdl[1] ) ); /* cmd1 */
    223227                when.app = app2;
    224                 CHECK( 0, fd_disp_register( cb_2, DISP_HOW_CC, &when, &hdl[2] ) ); /* app2 + cmd1 */
     228                CHECK( 0, fd_disp_register( cb_2, DISP_HOW_CC, &when, NULL, &hdl[2] ) ); /* app2 + cmd1 */
    225229                when.command = cmd2;
    226230                when.app = NULL;
    227231                when.avp = avp1;
    228                 CHECK( 0, fd_disp_register( cb_3, DISP_HOW_CC, &when, &hdl[3] ) ); /* cmd2 (avp1 ignored) */
     232                CHECK( 0, fd_disp_register( cb_3, DISP_HOW_CC, &when, NULL, &hdl[3] ) ); /* cmd2 (avp1 ignored) */
    229233               
    230234                /* Check the callbacks are called as appropriate */
     
    269273                CHECK( 0, fd_msg_free( msg ) );
    270274               
    271                 CHECK( 0, fd_disp_unregister( &hdl[0] ) );
    272                 CHECK( 0, fd_disp_unregister( &hdl[1] ) );
    273                 CHECK( 0, fd_disp_unregister( &hdl[2] ) );
    274                 CHECK( 0, fd_disp_unregister( &hdl[3] ) );
     275                CHECK( 0, fd_disp_unregister( &hdl[0], NULL ) );
     276                CHECK( 0, fd_disp_unregister( &hdl[1], NULL ) );
     277                CHECK( 0, fd_disp_unregister( &hdl[2], NULL ) );
     278                CHECK( 0, fd_disp_unregister( &hdl[3], NULL ) );
    275279        }
    276280       
     
    281285                when.avp = NULL;
    282286       
    283                 CHECK( 0, fd_disp_register( cb_0, DISP_HOW_ANY, &when, &hdl[0] ) ); /* all */
    284                 CHECK( EINVAL, fd_disp_register( cb_1, DISP_HOW_AVP, &when, &hdl[1] ) );
     287                CHECK( 0, fd_disp_register( cb_0, DISP_HOW_ANY, &when, NULL, &hdl[0] ) ); /* all */
     288                CHECK( EINVAL, fd_disp_register( cb_1, DISP_HOW_AVP, &when, NULL, &hdl[1] ) );
    285289               
    286290                when.avp = avp1;
    287                 CHECK( 0, fd_disp_register( cb_1, DISP_HOW_AVP, &when, &hdl[1] ) ); /* avp1 */
     291                CHECK( 0, fd_disp_register( cb_1, DISP_HOW_AVP, &when, NULL, &hdl[1] ) ); /* avp1 */
    288292               
    289293                when.command = cmd1;
    290                 CHECK( 0, fd_disp_register( cb_2, DISP_HOW_AVP, &when, &hdl[2] ) ); /* avp1 + cmd1 */
     294                CHECK( 0, fd_disp_register( cb_2, DISP_HOW_AVP, &when, NULL, &hdl[2] ) ); /* avp1 + cmd1 */
    291295               
    292296                when.command = NULL;
    293297                when.app = app1;
    294                 CHECK( 0, fd_disp_register( cb_3, DISP_HOW_AVP, &when, &hdl[3] ) ); /* avp1 + app1 */
     298                CHECK( 0, fd_disp_register( cb_3, DISP_HOW_AVP, &when, NULL, &hdl[3] ) ); /* avp1 + app1 */
    295299               
    296300                when.command = cmd1;
    297                 CHECK( 0, fd_disp_register( cb_4, DISP_HOW_AVP, &when, &hdl[4] ) ); /* avp1 + cmd1 + app1 */
     301                CHECK( 0, fd_disp_register( cb_4, DISP_HOW_AVP, &when, NULL, &hdl[4] ) ); /* avp1 + cmd1 + app1 */
    298302               
    299303                when.app = NULL;
     
    301305                when.avp = avp2;
    302306                when.value = enu1;
    303                 CHECK( 0, fd_disp_register( cb_5, DISP_HOW_AVP, &when, &hdl[5] ) ); /* avp2 */
     307                CHECK( 0, fd_disp_register( cb_5, DISP_HOW_AVP, &when, NULL, &hdl[5] ) ); /* avp2 */
    304308               
    305309                when.value = enu2;
    306                 CHECK( 0, fd_disp_register( cb_7, DISP_HOW_AVP, &when, &hdl[6] ) ); /* avp2 */
     310                CHECK( 0, fd_disp_register( cb_7, DISP_HOW_AVP, &when, NULL, &hdl[6] ) ); /* avp2 */
    307311               
    308312               
     
    396400                CHECK( 0, fd_msg_free( msg ) );
    397401               
    398                 CHECK( 0, fd_disp_unregister( &hdl[0] ) );
    399                 CHECK( 0, fd_disp_unregister( &hdl[1] ) );
    400                 CHECK( 0, fd_disp_unregister( &hdl[2] ) );
    401                 CHECK( 0, fd_disp_unregister( &hdl[3] ) );
    402                 CHECK( 0, fd_disp_unregister( &hdl[4] ) );
    403                 CHECK( 0, fd_disp_unregister( &hdl[5] ) );
    404                 CHECK( 0, fd_disp_unregister( &hdl[6] ) );
     402                CHECK( 0, fd_disp_unregister( &hdl[0], NULL ) );
     403                CHECK( 0, fd_disp_unregister( &hdl[1], NULL ) );
     404                CHECK( 0, fd_disp_unregister( &hdl[2], NULL ) );
     405                CHECK( 0, fd_disp_unregister( &hdl[3], NULL ) );
     406                CHECK( 0, fd_disp_unregister( &hdl[4], NULL ) );
     407                CHECK( 0, fd_disp_unregister( &hdl[5], NULL ) );
     408                CHECK( 0, fd_disp_unregister( &hdl[6], NULL ) );
    405409        }
    406410               
     
    412416                when.value = NULL;
    413417               
    414                 CHECK( 0, fd_disp_register( cb_0, DISP_HOW_ANY, &when, &hdl[0] ) ); /* all */
    415                 CHECK( EINVAL, fd_disp_register( cb_1, DISP_HOW_AVP_ENUMVAL, &when, &hdl[1] ) );
     418                CHECK( 0, fd_disp_register( cb_0, DISP_HOW_ANY, &when, NULL, &hdl[0] ) ); /* all */
     419                CHECK( EINVAL, fd_disp_register( cb_1, DISP_HOW_AVP_ENUMVAL, &when, NULL, &hdl[1] ) );
    416420                when.value = enu1;
    417                 CHECK( EINVAL, fd_disp_register( cb_1, DISP_HOW_AVP_ENUMVAL, &when, &hdl[1] ) );
     421                CHECK( EINVAL, fd_disp_register( cb_1, DISP_HOW_AVP_ENUMVAL, &when, NULL, &hdl[1] ) );
    418422                when.avp = avp1;
    419                 CHECK( EINVAL, fd_disp_register( cb_1, DISP_HOW_AVP_ENUMVAL, &when, &hdl[1] ) );
     423                CHECK( EINVAL, fd_disp_register( cb_1, DISP_HOW_AVP_ENUMVAL, &when, NULL, &hdl[1] ) );
    420424                when.avp = avp2;
    421                 CHECK( 0, fd_disp_register( cb_1, DISP_HOW_AVP_ENUMVAL, &when, &hdl[1] ) ); /* avp2, enu1 */
     425                CHECK( 0, fd_disp_register( cb_1, DISP_HOW_AVP_ENUMVAL, &when, NULL, &hdl[1] ) ); /* avp2, enu1 */
    422426               
    423427                when.command = cmd1;
    424                 CHECK( 0, fd_disp_register( cb_2, DISP_HOW_AVP_ENUMVAL, &when, &hdl[2] ) ); /* avp2, enu1 + cmd1 */
     428                CHECK( 0, fd_disp_register( cb_2, DISP_HOW_AVP_ENUMVAL, &when, NULL, &hdl[2] ) ); /* avp2, enu1 + cmd1 */
    425429               
    426430                when.command = NULL;
    427431                when.app = app1;
    428432                when.value = enu2;
    429                 CHECK( 0, fd_disp_register( cb_3, DISP_HOW_AVP_ENUMVAL, &when, &hdl[3] ) ); /* avp2, enu2 + app1 */
     433                CHECK( 0, fd_disp_register( cb_3, DISP_HOW_AVP_ENUMVAL, &when, NULL, &hdl[3] ) ); /* avp2, enu2 + app1 */
    430434               
    431435                /* Check the callbacks are called as appropriate */
     
    498502                CHECK( 0, fd_msg_free( msg ) );
    499503               
    500                 CHECK( 0, fd_disp_unregister( &hdl[0] ) );
    501                 CHECK( 0, fd_disp_unregister( &hdl[1] ) );
    502                 CHECK( 0, fd_disp_unregister( &hdl[2] ) );
    503                 CHECK( 0, fd_disp_unregister( &hdl[3] ) );
     504                CHECK( 0, fd_disp_unregister( &hdl[0], NULL ) );
     505                CHECK( 0, fd_disp_unregister( &hdl[1], NULL ) );
     506                CHECK( 0, fd_disp_unregister( &hdl[2], NULL ) );
     507                CHECK( 0, fd_disp_unregister( &hdl[3], NULL ) );
    504508        }
    505509       
    506510        /* Test behavior of handlers */
    507511        {
    508                 CHECK( 0, fd_disp_register( cb_0, DISP_HOW_ANY, &when, &hdl[0] ) );
    509                 CHECK( 0, fd_disp_register( cb_1, DISP_HOW_ANY, &when, &hdl[1] ) );
    510                 CHECK( 0, fd_disp_register( cb_6, DISP_HOW_ANY, &when, &hdl[2] ) );
    511                 CHECK( 0, fd_disp_register( cb_2, DISP_HOW_ANY, &when, &hdl[3] ) );
    512                 CHECK( 0, fd_disp_register( cb_3, DISP_HOW_ANY, &when, &hdl[4] ) );
     512                CHECK( 0, fd_disp_register( cb_0, DISP_HOW_ANY, &when, NULL, &hdl[0] ) );
     513                CHECK( 0, fd_disp_register( cb_1, DISP_HOW_ANY, &when, NULL, &hdl[1] ) );
     514                CHECK( 0, fd_disp_register( cb_6, DISP_HOW_ANY, &when, NULL, &hdl[2] ) );
     515                CHECK( 0, fd_disp_register( cb_2, DISP_HOW_ANY, &when, NULL, &hdl[3] ) );
     516                CHECK( 0, fd_disp_register( cb_3, DISP_HOW_ANY, &when, NULL, &hdl[4] ) );
    513517               
    514518                memset(cbcalled, 0, sizeof(cbcalled));
     
    522526                CHECK( 0, fd_msg_free( msg ) );
    523527               
    524                 CHECK( 0, fd_disp_unregister( &hdl[0] ) );
    525                 CHECK( 0, fd_disp_unregister( &hdl[1] ) );
    526                 CHECK( 0, fd_disp_unregister( &hdl[2] ) );
    527                 CHECK( 0, fd_disp_unregister( &hdl[3] ) );
    528                 CHECK( 0, fd_disp_unregister( &hdl[4] ) );
    529                
    530                 CHECK( 0, fd_disp_register( cb_0, DISP_HOW_ANY, &when, &hdl[0] ) );
    531                 CHECK( 0, fd_disp_register( cb_1, DISP_HOW_ANY, &when, &hdl[1] ) );
    532                 CHECK( 0, fd_disp_register( cb_8, DISP_HOW_ANY, &when, &hdl[2] ) );
    533                 CHECK( 0, fd_disp_register( cb_2, DISP_HOW_ANY, &when, &hdl[3] ) );
    534                 CHECK( 0, fd_disp_register( cb_3, DISP_HOW_ANY, &when, &hdl[4] ) );
     528                CHECK( 0, fd_disp_unregister( &hdl[0], NULL ) );
     529                CHECK( 0, fd_disp_unregister( &hdl[1], NULL ) );
     530                CHECK( 0, fd_disp_unregister( &hdl[2], NULL ) );
     531                CHECK( 0, fd_disp_unregister( &hdl[3], NULL ) );
     532                CHECK( 0, fd_disp_unregister( &hdl[4], NULL ) );
     533               
     534                CHECK( 0, fd_disp_register( cb_0, DISP_HOW_ANY, &when, NULL, &hdl[0] ) );
     535                CHECK( 0, fd_disp_register( cb_1, DISP_HOW_ANY, &when, NULL, &hdl[1] ) );
     536                CHECK( 0, fd_disp_register( cb_8, DISP_HOW_ANY, &when, NULL, &hdl[2] ) );
     537                CHECK( 0, fd_disp_register( cb_2, DISP_HOW_ANY, &when, NULL, &hdl[3] ) );
     538                CHECK( 0, fd_disp_register( cb_3, DISP_HOW_ANY, &when, NULL, &hdl[4] ) );
    535539               
    536540                memset(cbcalled, 0, sizeof(cbcalled));
     
    544548                CHECK( NULL, msg );
    545549               
    546                 CHECK( 0, fd_disp_unregister( &hdl[0] ) );
    547                 CHECK( 0, fd_disp_unregister( &hdl[1] ) );
    548                 CHECK( 0, fd_disp_unregister( &hdl[2] ) );
    549                 CHECK( 0, fd_disp_unregister( &hdl[3] ) );
    550                 CHECK( 0, fd_disp_unregister( &hdl[4] ) );
    551                
    552                 CHECK( 0, fd_disp_register( cb_0, DISP_HOW_ANY, &when, &hdl[0] ) );
    553                 CHECK( 0, fd_disp_register( cb_1, DISP_HOW_ANY, &when, &hdl[1] ) );
    554                 CHECK( 0, fd_disp_register( cb_9, DISP_HOW_ANY, &when, &hdl[2] ) );
    555                 CHECK( 0, fd_disp_register( cb_2, DISP_HOW_ANY, &when, &hdl[3] ) );
    556                 CHECK( 0, fd_disp_register( cb_3, DISP_HOW_ANY, &when, &hdl[4] ) );
     550                CHECK( 0, fd_disp_unregister( &hdl[0], NULL ) );
     551                CHECK( 0, fd_disp_unregister( &hdl[1], NULL ) );
     552                CHECK( 0, fd_disp_unregister( &hdl[2], NULL ) );
     553                CHECK( 0, fd_disp_unregister( &hdl[3], NULL ) );
     554                CHECK( 0, fd_disp_unregister( &hdl[4], NULL ) );
     555               
     556                CHECK( 0, fd_disp_register( cb_0, DISP_HOW_ANY, &when, NULL, &hdl[0] ) );
     557                CHECK( 0, fd_disp_register( cb_1, DISP_HOW_ANY, &when, NULL, &hdl[1] ) );
     558                CHECK( 0, fd_disp_register( cb_9, DISP_HOW_ANY, &when, NULL, &hdl[2] ) );
     559                CHECK( 0, fd_disp_register( cb_2, DISP_HOW_ANY, &when, NULL, &hdl[3] ) );
     560                CHECK( 0, fd_disp_register( cb_3, DISP_HOW_ANY, &when, NULL, &hdl[4] ) );
    557561               
    558562                memset(cbcalled, 0, sizeof(cbcalled));
     
    567571                CHECK( 0, fd_msg_free( msg ) );
    568572               
    569                 CHECK( 0, fd_disp_unregister( &hdl[0] ) );
    570                 CHECK( 0, fd_disp_unregister( &hdl[1] ) );
    571                 CHECK( 0, fd_disp_unregister( &hdl[2] ) );
    572                 CHECK( 0, fd_disp_unregister( &hdl[3] ) );
    573                 CHECK( 0, fd_disp_unregister( &hdl[4] ) );
     573                CHECK( 0, fd_disp_unregister( &hdl[0], NULL ) );
     574                CHECK( 0, fd_disp_unregister( &hdl[1], NULL ) );
     575                CHECK( 0, fd_disp_unregister( &hdl[2], NULL ) );
     576                CHECK( 0, fd_disp_unregister( &hdl[3], NULL ) );
     577                CHECK( 0, fd_disp_unregister( &hdl[4], NULL ) );
    574578        }
    575579               
     
    581585                when.value = enu2;
    582586               
    583                 CHECK( 0, fd_disp_register( cb_0, DISP_HOW_ANY, &when, &hdl[0] ) );
    584                 CHECK( 0, fd_disp_register( cb_1, DISP_HOW_AVP_ENUMVAL, &when, &hdl[1] ) );
    585                 CHECK( 0, fd_disp_register( cb_2, DISP_HOW_AVP, &when, &hdl[2] ) );
    586                 CHECK( 0, fd_disp_register( cb_3, DISP_HOW_CC, &when, &hdl[3] ) );
    587                 CHECK( 0, fd_disp_register( cb_4, DISP_HOW_APPID, &when, &hdl[4] ) );
     587                CHECK( 0, fd_disp_register( cb_0, DISP_HOW_ANY, &when, NULL, &hdl[0] ) );
     588                CHECK( 0, fd_disp_register( cb_1, DISP_HOW_AVP_ENUMVAL, &when, NULL, &hdl[1] ) );
     589                CHECK( 0, fd_disp_register( cb_2, DISP_HOW_AVP, &when, NULL, &hdl[2] ) );
     590                CHECK( 0, fd_disp_register( cb_3, DISP_HOW_CC, &when, NULL, &hdl[3] ) );
     591                CHECK( 0, fd_disp_register( cb_4, DISP_HOW_APPID, &when, NULL, &hdl[4] ) );
    588592               
    589593                memset(cbcalled, 0, sizeof(cbcalled));
     
    598602                CHECK( 0, fd_msg_free( msg ) );
    599603               
    600                 CHECK( 0, fd_disp_register( cb_9, DISP_HOW_ANY, &when, &hdl[5] ) );
     604                CHECK( 0, fd_disp_register( cb_9, DISP_HOW_ANY, &when, NULL, &hdl[5] ) );
    601605                memset(cbcalled, 0, sizeof(cbcalled));
    602606                msg = new_msg( 2, cmd2, avp1, avp2, 2 );
     
    609613                CHECK( 1, cbcalled[9] );
    610614                CHECK( 0, fd_msg_free( msg ) );
    611                 CHECK( 0, fd_disp_unregister( &hdl[5] ) );
    612                
    613                 CHECK( 0, fd_disp_register( cb_9, DISP_HOW_AVP_ENUMVAL, &when, &hdl[5] ) );
     615                CHECK( 0, fd_disp_unregister( &hdl[5], NULL ) );
     616               
     617                CHECK( 0, fd_disp_register( cb_9, DISP_HOW_AVP_ENUMVAL, &when, NULL, &hdl[5] ) );
    614618                memset(cbcalled, 0, sizeof(cbcalled));
    615619                msg = new_msg( 2, cmd2, avp1, avp2, 2 );
     
    622626                CHECK( 1, cbcalled[9] );
    623627                CHECK( 0, fd_msg_free( msg ) );
    624                 CHECK( 0, fd_disp_unregister( &hdl[5] ) );
    625                
    626                 CHECK( 0, fd_disp_register( cb_9, DISP_HOW_AVP, &when, &hdl[5] ) );
     628                CHECK( 0, fd_disp_unregister( &hdl[5], NULL ) );
     629               
     630                CHECK( 0, fd_disp_register( cb_9, DISP_HOW_AVP, &when, NULL, &hdl[5] ) );
    627631                memset(cbcalled, 0, sizeof(cbcalled));
    628632                msg = new_msg( 2, cmd2, avp1, avp2, 2 );
     
    635639                CHECK( 1, cbcalled[9] );
    636640                CHECK( 0, fd_msg_free( msg ) );
    637                 CHECK( 0, fd_disp_unregister( &hdl[5] ) );
    638                
    639                 CHECK( 0, fd_disp_register( cb_9, DISP_HOW_CC, &when, &hdl[5] ) );
     641                CHECK( 0, fd_disp_unregister( &hdl[5], NULL ) );
     642               
     643                CHECK( 0, fd_disp_register( cb_9, DISP_HOW_CC, &when, NULL, &hdl[5] ) );
    640644                memset(cbcalled, 0, sizeof(cbcalled));
    641645                msg = new_msg( 2, cmd2, avp1, avp2, 2 );
     
    648652                CHECK( 1, cbcalled[9] );
    649653                CHECK( 0, fd_msg_free( msg ) );
    650                 CHECK( 0, fd_disp_unregister( &hdl[5] ) );
    651                
    652                 CHECK( 0, fd_disp_register( cb_9, DISP_HOW_APPID, &when, &hdl[5] ) );
     654                CHECK( 0, fd_disp_unregister( &hdl[5], NULL ) );
     655               
     656                CHECK( 0, fd_disp_register( cb_9, DISP_HOW_APPID, &when, NULL, &hdl[5] ) );
    653657                memset(cbcalled, 0, sizeof(cbcalled));
    654658                msg = new_msg( 2, cmd2, avp1, avp2, 2 );
     
    661665                CHECK( 1, cbcalled[9] );
    662666                CHECK( 0, fd_msg_free( msg ) );
    663                 CHECK( 0, fd_disp_unregister( &hdl[5] ) );
    664                
    665                 CHECK( 0, fd_disp_unregister( &hdl[0] ) );
    666                 CHECK( 0, fd_disp_unregister( &hdl[1] ) );
    667                 CHECK( 0, fd_disp_unregister( &hdl[2] ) );
    668                 CHECK( 0, fd_disp_unregister( &hdl[3] ) );
    669                 CHECK( 0, fd_disp_unregister( &hdl[4] ) );
     667                CHECK( 0, fd_disp_unregister( &hdl[5], NULL ) );
     668               
     669                CHECK( 0, fd_disp_unregister( &hdl[0], NULL ) );
     670                CHECK( 0, fd_disp_unregister( &hdl[1], NULL ) );
     671                CHECK( 0, fd_disp_unregister( &hdl[2], NULL ) );
     672                CHECK( 0, fd_disp_unregister( &hdl[3], NULL ) );
     673                CHECK( 0, fd_disp_unregister( &hdl[4], NULL ) );
    670674        }                       
    671675       
     
    698702        }
    699703       
     704        /* Test opaque pointer management */
     705        {
     706                void * ptr;
     707                CHECK( 0, fd_disp_register( cb_0, DISP_HOW_ANY, NULL, g_opaque, &hdl[0] ) );
     708       
     709                /* Check this handler is called for a message */
     710                msg = new_msg( 0, cmd1, avp1, NULL, 0 );
     711                memset(cbcalled, 0, sizeof(cbcalled));
     712                CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
     713                CHECK( 1, cbcalled[0] );
     714                CHECK( DISP_ACT_CONT, action );
     715               
     716                /* Delete the message */
     717                CHECK( 0, fd_msg_free( msg ) );
     718                CHECK( 0, fd_disp_unregister( &hdl[0], &ptr ) );
     719                CHECK( 1, ptr == g_opaque ? 1 : 0 );
     720        }
     721       
    700722        /* That's all for the tests yet */
    701723        PASSTEST();
Note: See TracChangeset for help on using the changeset viewer.