comparison freeDiameter/tests/testdisp.c @ 90:2c9444152e4b

Added the dispatch thread code
author Sebastien Decugis <sdecugis@nict.go.jp>
date Mon, 07 Dec 2009 18:32:30 +0900
parents c5c99c73c2bf
children 95a784729cac
comparison
equal deleted inserted replaced
89:3f8b437bcb66 90:2c9444152e4b
103 struct dict_object * enu1, * enu2; 103 struct dict_object * enu1, * enu2;
104 struct msg * msg = NULL; 104 struct msg * msg = NULL;
105 enum disp_action action; 105 enum disp_action action;
106 struct disp_hdl * hdl[NB_CB]; 106 struct disp_hdl * hdl[NB_CB];
107 struct disp_when when; 107 struct disp_when when;
108 const char * ec;
108 109
109 /* First, initialize the daemon modules */ 110 /* First, initialize the daemon modules */
110 INIT_FD(); 111 INIT_FD();
111 112
112 /* Create a dummy session, we don't use it anyway */ 113 /* Create a dummy session, we don't use it anyway */
147 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, &hdl[0] ) );
148 149
149 /* Check this handler is called for a message */ 150 /* Check this handler is called for a message */
150 msg = new_msg( 0, cmd1, avp1, NULL, 0 ); 151 msg = new_msg( 0, cmd1, avp1, NULL, 0 );
151 memset(cbcalled, 0, sizeof(cbcalled)); 152 memset(cbcalled, 0, sizeof(cbcalled));
152 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 153 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
153 CHECK( 1, cbcalled[0] ); 154 CHECK( 1, cbcalled[0] );
154 CHECK( DISP_ACT_CONT, action ); 155 CHECK( DISP_ACT_CONT, action );
155 156
156 /* Delete the message */ 157 /* Delete the message */
157 CHECK( 0, fd_msg_free( msg ) ); 158 CHECK( 0, fd_msg_free( msg ) );
171 CHECK( 0, fd_disp_register( cb_4, DISP_HOW_APPID, &when, &hdl[4] ) ); 172 CHECK( 0, fd_disp_register( cb_4, DISP_HOW_APPID, &when, &hdl[4] ) );
172 173
173 /* Check the callbacks are called as appropriate */ 174 /* Check the callbacks are called as appropriate */
174 memset(cbcalled, 0, sizeof(cbcalled)); 175 memset(cbcalled, 0, sizeof(cbcalled));
175 msg = new_msg( 0, cmd1, avp1, NULL, 0 ); 176 msg = new_msg( 0, cmd1, avp1, NULL, 0 );
176 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 177 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
177 CHECK( 1, cbcalled[0] ); 178 CHECK( 1, cbcalled[0] );
178 CHECK( 0, cbcalled[1] ); 179 CHECK( 0, cbcalled[1] );
179 CHECK( 0, cbcalled[2] ); 180 CHECK( 0, cbcalled[2] );
180 CHECK( 0, cbcalled[3] ); 181 CHECK( 0, cbcalled[3] );
181 CHECK( 0, cbcalled[4] ); 182 CHECK( 0, cbcalled[4] );
182 CHECK( DISP_ACT_CONT, action ); 183 CHECK( DISP_ACT_CONT, action );
183 CHECK( 0, fd_msg_free( msg ) ); 184 CHECK( 0, fd_msg_free( msg ) );
184 185
185 memset(cbcalled, 0, sizeof(cbcalled)); 186 memset(cbcalled, 0, sizeof(cbcalled));
186 msg = new_msg( 1, cmd1, avp1, NULL, 0 ); 187 msg = new_msg( 1, cmd1, avp1, NULL, 0 );
187 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 188 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
188 CHECK( 1, cbcalled[0] ); 189 CHECK( 1, cbcalled[0] );
189 CHECK( 1, cbcalled[1] ); 190 CHECK( 1, cbcalled[1] );
190 CHECK( 0, cbcalled[2] ); 191 CHECK( 0, cbcalled[2] );
191 CHECK( 0, cbcalled[3] ); 192 CHECK( 0, cbcalled[3] );
192 CHECK( 0, cbcalled[4] ); 193 CHECK( 0, cbcalled[4] );
193 CHECK( DISP_ACT_CONT, action ); 194 CHECK( DISP_ACT_CONT, action );
194 CHECK( 0, fd_msg_free( msg ) ); 195 CHECK( 0, fd_msg_free( msg ) );
195 196
196 memset(cbcalled, 0, sizeof(cbcalled)); 197 memset(cbcalled, 0, sizeof(cbcalled));
197 msg = new_msg( 2, cmd1, avp1, NULL, 0 ); 198 msg = new_msg( 2, cmd1, avp1, NULL, 0 );
198 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 199 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
199 CHECK( 1, cbcalled[0] ); 200 CHECK( 1, cbcalled[0] );
200 CHECK( 0, cbcalled[1] ); 201 CHECK( 0, cbcalled[1] );
201 CHECK( 1, cbcalled[2] ); 202 CHECK( 1, cbcalled[2] );
202 CHECK( 1, cbcalled[3] ); 203 CHECK( 1, cbcalled[3] );
203 CHECK( 1, cbcalled[4] ); 204 CHECK( 1, cbcalled[4] );
227 CHECK( 0, fd_disp_register( cb_3, DISP_HOW_CC, &when, &hdl[3] ) ); /* cmd2 (avp1 ignored) */ 228 CHECK( 0, fd_disp_register( cb_3, DISP_HOW_CC, &when, &hdl[3] ) ); /* cmd2 (avp1 ignored) */
228 229
229 /* Check the callbacks are called as appropriate */ 230 /* Check the callbacks are called as appropriate */
230 memset(cbcalled, 0, sizeof(cbcalled)); 231 memset(cbcalled, 0, sizeof(cbcalled));
231 msg = new_msg( 0, cmd1, avp1, NULL, 0 ); 232 msg = new_msg( 0, cmd1, avp1, NULL, 0 );
232 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 233 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
233 CHECK( 1, cbcalled[0] ); 234 CHECK( 1, cbcalled[0] );
234 CHECK( 1, cbcalled[1] ); 235 CHECK( 1, cbcalled[1] );
235 CHECK( 0, cbcalled[2] ); 236 CHECK( 0, cbcalled[2] );
236 CHECK( 0, cbcalled[3] ); 237 CHECK( 0, cbcalled[3] );
237 CHECK( DISP_ACT_CONT, action ); 238 CHECK( DISP_ACT_CONT, action );
238 CHECK( 0, fd_msg_free( msg ) ); 239 CHECK( 0, fd_msg_free( msg ) );
239 240
240 memset(cbcalled, 0, sizeof(cbcalled)); 241 memset(cbcalled, 0, sizeof(cbcalled));
241 msg = new_msg( 2, cmd1, avp1, NULL, 0 ); 242 msg = new_msg( 2, cmd1, avp1, NULL, 0 );
242 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 243 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
243 CHECK( 1, cbcalled[0] ); 244 CHECK( 1, cbcalled[0] );
244 CHECK( 1, cbcalled[1] ); 245 CHECK( 1, cbcalled[1] );
245 CHECK( 1, cbcalled[2] ); 246 CHECK( 1, cbcalled[2] );
246 CHECK( 0, cbcalled[3] ); 247 CHECK( 0, cbcalled[3] );
247 CHECK( DISP_ACT_CONT, action ); 248 CHECK( DISP_ACT_CONT, action );
248 CHECK( 0, fd_msg_free( msg ) ); 249 CHECK( 0, fd_msg_free( msg ) );
249 250
250 memset(cbcalled, 0, sizeof(cbcalled)); 251 memset(cbcalled, 0, sizeof(cbcalled));
251 msg = new_msg( 2, cmd2, avp1, NULL, 0 ); 252 msg = new_msg( 2, cmd2, avp1, NULL, 0 );
252 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 253 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
253 CHECK( 1, cbcalled[0] ); 254 CHECK( 1, cbcalled[0] );
254 CHECK( 0, cbcalled[1] ); 255 CHECK( 0, cbcalled[1] );
255 CHECK( 0, cbcalled[2] ); 256 CHECK( 0, cbcalled[2] );
256 CHECK( 1, cbcalled[3] ); 257 CHECK( 1, cbcalled[3] );
257 CHECK( DISP_ACT_CONT, action ); 258 CHECK( DISP_ACT_CONT, action );
258 CHECK( 0, fd_msg_free( msg ) ); 259 CHECK( 0, fd_msg_free( msg ) );
259 260
260 memset(cbcalled, 0, sizeof(cbcalled)); 261 memset(cbcalled, 0, sizeof(cbcalled));
261 msg = new_msg( 1, cmd2, NULL, avp2, 0 ); 262 msg = new_msg( 1, cmd2, NULL, avp2, 0 );
262 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 263 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
263 CHECK( 1, cbcalled[0] ); 264 CHECK( 1, cbcalled[0] );
264 CHECK( 0, cbcalled[1] ); 265 CHECK( 0, cbcalled[1] );
265 CHECK( 0, cbcalled[2] ); 266 CHECK( 0, cbcalled[2] );
266 CHECK( 1, cbcalled[3] ); 267 CHECK( 1, cbcalled[3] );
267 CHECK( DISP_ACT_CONT, action ); 268 CHECK( DISP_ACT_CONT, action );
307 308
308 309
309 /* Check the callbacks are called as appropriate */ 310 /* Check the callbacks are called as appropriate */
310 memset(cbcalled, 0, sizeof(cbcalled)); 311 memset(cbcalled, 0, sizeof(cbcalled));
311 msg = new_msg( 0, cmd1, NULL, NULL, 0 ); 312 msg = new_msg( 0, cmd1, NULL, NULL, 0 );
312 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 313 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
313 CHECK( 1, cbcalled[0] ); 314 CHECK( 1, cbcalled[0] );
314 CHECK( 0, cbcalled[1] ); 315 CHECK( 0, cbcalled[1] );
315 CHECK( 0, cbcalled[2] ); 316 CHECK( 0, cbcalled[2] );
316 CHECK( 0, cbcalled[3] ); 317 CHECK( 0, cbcalled[3] );
317 CHECK( 0, cbcalled[4] ); 318 CHECK( 0, cbcalled[4] );
319 CHECK( DISP_ACT_CONT, action ); 320 CHECK( DISP_ACT_CONT, action );
320 CHECK( 0, fd_msg_free( msg ) ); 321 CHECK( 0, fd_msg_free( msg ) );
321 322
322 memset(cbcalled, 0, sizeof(cbcalled)); 323 memset(cbcalled, 0, sizeof(cbcalled));
323 msg = new_msg( 0, cmd1, avp1, NULL, 0 ); 324 msg = new_msg( 0, cmd1, avp1, NULL, 0 );
324 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 325 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
325 CHECK( 1, cbcalled[0] ); 326 CHECK( 1, cbcalled[0] );
326 CHECK( 1, cbcalled[1] ); 327 CHECK( 1, cbcalled[1] );
327 CHECK( 1, cbcalled[2] ); 328 CHECK( 1, cbcalled[2] );
328 CHECK( 0, cbcalled[3] ); 329 CHECK( 0, cbcalled[3] );
329 CHECK( 0, cbcalled[4] ); 330 CHECK( 0, cbcalled[4] );
331 CHECK( DISP_ACT_CONT, action ); 332 CHECK( DISP_ACT_CONT, action );
332 CHECK( 0, fd_msg_free( msg ) ); 333 CHECK( 0, fd_msg_free( msg ) );
333 334
334 memset(cbcalled, 0, sizeof(cbcalled)); 335 memset(cbcalled, 0, sizeof(cbcalled));
335 msg = new_msg( 1, cmd2, avp1, NULL, 0 ); 336 msg = new_msg( 1, cmd2, avp1, NULL, 0 );
336 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 337 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
337 CHECK( 1, cbcalled[0] ); 338 CHECK( 1, cbcalled[0] );
338 CHECK( 1, cbcalled[1] ); 339 CHECK( 1, cbcalled[1] );
339 CHECK( 0, cbcalled[2] ); 340 CHECK( 0, cbcalled[2] );
340 CHECK( 1, cbcalled[3] ); 341 CHECK( 1, cbcalled[3] );
341 CHECK( 0, cbcalled[4] ); 342 CHECK( 0, cbcalled[4] );
343 CHECK( DISP_ACT_CONT, action ); 344 CHECK( DISP_ACT_CONT, action );
344 CHECK( 0, fd_msg_free( msg ) ); 345 CHECK( 0, fd_msg_free( msg ) );
345 346
346 memset(cbcalled, 0, sizeof(cbcalled)); 347 memset(cbcalled, 0, sizeof(cbcalled));
347 msg = new_msg( 1, cmd1, avp1, NULL, 0 ); 348 msg = new_msg( 1, cmd1, avp1, NULL, 0 );
348 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 349 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
349 CHECK( 1, cbcalled[0] ); 350 CHECK( 1, cbcalled[0] );
350 CHECK( 1, cbcalled[1] ); 351 CHECK( 1, cbcalled[1] );
351 CHECK( 1, cbcalled[2] ); 352 CHECK( 1, cbcalled[2] );
352 CHECK( 1, cbcalled[3] ); 353 CHECK( 1, cbcalled[3] );
353 CHECK( 1, cbcalled[4] ); 354 CHECK( 1, cbcalled[4] );
355 CHECK( DISP_ACT_CONT, action ); 356 CHECK( DISP_ACT_CONT, action );
356 CHECK( 0, fd_msg_free( msg ) ); 357 CHECK( 0, fd_msg_free( msg ) );
357 358
358 memset(cbcalled, 0, sizeof(cbcalled)); 359 memset(cbcalled, 0, sizeof(cbcalled));
359 msg = new_msg( 1, cmd1, avp1, avp2, 0 ); 360 msg = new_msg( 1, cmd1, avp1, avp2, 0 );
360 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 361 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
361 CHECK( 1, cbcalled[0] ); 362 CHECK( 1, cbcalled[0] );
362 CHECK( 1, cbcalled[1] ); 363 CHECK( 1, cbcalled[1] );
363 CHECK( 1, cbcalled[2] ); 364 CHECK( 1, cbcalled[2] );
364 CHECK( 1, cbcalled[3] ); 365 CHECK( 1, cbcalled[3] );
365 CHECK( 1, cbcalled[4] ); 366 CHECK( 1, cbcalled[4] );
368 CHECK( DISP_ACT_CONT, action ); 369 CHECK( DISP_ACT_CONT, action );
369 CHECK( 0, fd_msg_free( msg ) ); 370 CHECK( 0, fd_msg_free( msg ) );
370 371
371 memset(cbcalled, 0, sizeof(cbcalled)); 372 memset(cbcalled, 0, sizeof(cbcalled));
372 msg = new_msg( 1, cmd1, NULL, avp2, 1 ); 373 msg = new_msg( 1, cmd1, NULL, avp2, 1 );
373 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 374 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
374 CHECK( 1, cbcalled[0] ); 375 CHECK( 1, cbcalled[0] );
375 CHECK( 0, cbcalled[1] ); 376 CHECK( 0, cbcalled[1] );
376 CHECK( 0, cbcalled[2] ); 377 CHECK( 0, cbcalled[2] );
377 CHECK( 0, cbcalled[3] ); 378 CHECK( 0, cbcalled[3] );
378 CHECK( 0, cbcalled[4] ); 379 CHECK( 0, cbcalled[4] );
381 CHECK( DISP_ACT_CONT, action ); 382 CHECK( DISP_ACT_CONT, action );
382 CHECK( 0, fd_msg_free( msg ) ); 383 CHECK( 0, fd_msg_free( msg ) );
383 384
384 memset(cbcalled, 0, sizeof(cbcalled)); 385 memset(cbcalled, 0, sizeof(cbcalled));
385 msg = new_msg( 1, cmd1, NULL, avp2, 2 ); 386 msg = new_msg( 1, cmd1, NULL, avp2, 2 );
386 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 387 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
387 CHECK( 1, cbcalled[0] ); 388 CHECK( 1, cbcalled[0] );
388 CHECK( 0, cbcalled[1] ); 389 CHECK( 0, cbcalled[1] );
389 CHECK( 0, cbcalled[2] ); 390 CHECK( 0, cbcalled[2] );
390 CHECK( 0, cbcalled[3] ); 391 CHECK( 0, cbcalled[3] );
391 CHECK( 0, cbcalled[4] ); 392 CHECK( 0, cbcalled[4] );
428 CHECK( 0, fd_disp_register( cb_3, DISP_HOW_AVP_ENUMVAL, &when, &hdl[3] ) ); /* avp2, enu2 + app1 */ 429 CHECK( 0, fd_disp_register( cb_3, DISP_HOW_AVP_ENUMVAL, &when, &hdl[3] ) ); /* avp2, enu2 + app1 */
429 430
430 /* Check the callbacks are called as appropriate */ 431 /* Check the callbacks are called as appropriate */
431 memset(cbcalled, 0, sizeof(cbcalled)); 432 memset(cbcalled, 0, sizeof(cbcalled));
432 msg = new_msg( 0, cmd1, avp1, NULL, 0 ); 433 msg = new_msg( 0, cmd1, avp1, NULL, 0 );
433 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 434 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
434 CHECK( 1, cbcalled[0] ); 435 CHECK( 1, cbcalled[0] );
435 CHECK( 0, cbcalled[1] ); 436 CHECK( 0, cbcalled[1] );
436 CHECK( 0, cbcalled[2] ); 437 CHECK( 0, cbcalled[2] );
437 CHECK( 0, cbcalled[3] ); 438 CHECK( 0, cbcalled[3] );
438 CHECK( DISP_ACT_CONT, action ); 439 CHECK( DISP_ACT_CONT, action );
439 CHECK( 0, fd_msg_free( msg ) ); 440 CHECK( 0, fd_msg_free( msg ) );
440 441
441 memset(cbcalled, 0, sizeof(cbcalled)); 442 memset(cbcalled, 0, sizeof(cbcalled));
442 msg = new_msg( 1, cmd2, avp1, avp2, 0 ); 443 msg = new_msg( 1, cmd2, avp1, avp2, 0 );
443 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 444 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
444 CHECK( 1, cbcalled[0] ); 445 CHECK( 1, cbcalled[0] );
445 CHECK( 0, cbcalled[1] ); 446 CHECK( 0, cbcalled[1] );
446 CHECK( 0, cbcalled[2] ); 447 CHECK( 0, cbcalled[2] );
447 CHECK( 0, cbcalled[3] ); 448 CHECK( 0, cbcalled[3] );
448 CHECK( DISP_ACT_CONT, action ); 449 CHECK( DISP_ACT_CONT, action );
449 CHECK( 0, fd_msg_free( msg ) ); 450 CHECK( 0, fd_msg_free( msg ) );
450 451
451 memset(cbcalled, 0, sizeof(cbcalled)); 452 memset(cbcalled, 0, sizeof(cbcalled));
452 msg = new_msg( 1, cmd2, avp1, avp2, 1 ); 453 msg = new_msg( 1, cmd2, avp1, avp2, 1 );
453 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 454 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
454 CHECK( 1, cbcalled[0] ); 455 CHECK( 1, cbcalled[0] );
455 CHECK( 1, cbcalled[1] ); 456 CHECK( 1, cbcalled[1] );
456 CHECK( 0, cbcalled[2] ); 457 CHECK( 0, cbcalled[2] );
457 CHECK( 0, cbcalled[3] ); 458 CHECK( 0, cbcalled[3] );
458 CHECK( DISP_ACT_CONT, action ); 459 CHECK( DISP_ACT_CONT, action );
459 CHECK( 0, fd_msg_free( msg ) ); 460 CHECK( 0, fd_msg_free( msg ) );
460 461
461 memset(cbcalled, 0, sizeof(cbcalled)); 462 memset(cbcalled, 0, sizeof(cbcalled));
462 msg = new_msg( 1, cmd2, avp1, avp2, 2 ); 463 msg = new_msg( 1, cmd2, avp1, avp2, 2 );
463 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 464 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
464 CHECK( 1, cbcalled[0] ); 465 CHECK( 1, cbcalled[0] );
465 CHECK( 0, cbcalled[1] ); 466 CHECK( 0, cbcalled[1] );
466 CHECK( 0, cbcalled[2] ); 467 CHECK( 0, cbcalled[2] );
467 CHECK( 1, cbcalled[3] ); 468 CHECK( 1, cbcalled[3] );
468 CHECK( DISP_ACT_CONT, action ); 469 CHECK( DISP_ACT_CONT, action );
469 CHECK( 0, fd_msg_free( msg ) ); 470 CHECK( 0, fd_msg_free( msg ) );
470 471
471 memset(cbcalled, 0, sizeof(cbcalled)); 472 memset(cbcalled, 0, sizeof(cbcalled));
472 msg = new_msg( 1, cmd1, avp1, avp2, 1 ); 473 msg = new_msg( 1, cmd1, avp1, avp2, 1 );
473 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 474 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
474 CHECK( 1, cbcalled[0] ); 475 CHECK( 1, cbcalled[0] );
475 CHECK( 1, cbcalled[1] ); 476 CHECK( 1, cbcalled[1] );
476 CHECK( 1, cbcalled[2] ); 477 CHECK( 1, cbcalled[2] );
477 CHECK( 0, cbcalled[3] ); 478 CHECK( 0, cbcalled[3] );
478 CHECK( DISP_ACT_CONT, action ); 479 CHECK( DISP_ACT_CONT, action );
486 CHECK( 0, fd_msg_avp_new ( avp2, 0, &avp ) ); 487 CHECK( 0, fd_msg_avp_new ( avp2, 0, &avp ) );
487 value.u32 = 2; 488 value.u32 = 2;
488 CHECK( 0, fd_msg_avp_setvalue ( avp, &value ) ); 489 CHECK( 0, fd_msg_avp_setvalue ( avp, &value ) );
489 CHECK( 0, fd_msg_avp_add ( msg, MSG_BRW_LAST_CHILD, avp ) ); 490 CHECK( 0, fd_msg_avp_add ( msg, MSG_BRW_LAST_CHILD, avp ) );
490 } 491 }
491 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 492 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
492 CHECK( 1, cbcalled[0] ); 493 CHECK( 1, cbcalled[0] );
493 CHECK( 1, cbcalled[1] ); 494 CHECK( 1, cbcalled[1] );
494 CHECK( 0, cbcalled[2] ); 495 CHECK( 0, cbcalled[2] );
495 CHECK( 1, cbcalled[3] ); 496 CHECK( 1, cbcalled[3] );
496 CHECK( DISP_ACT_CONT, action ); 497 CHECK( DISP_ACT_CONT, action );
510 CHECK( 0, fd_disp_register( cb_2, DISP_HOW_ANY, &when, &hdl[3] ) ); 511 CHECK( 0, fd_disp_register( cb_2, DISP_HOW_ANY, &when, &hdl[3] ) );
511 CHECK( 0, fd_disp_register( cb_3, DISP_HOW_ANY, &when, &hdl[4] ) ); 512 CHECK( 0, fd_disp_register( cb_3, DISP_HOW_ANY, &when, &hdl[4] ) );
512 513
513 memset(cbcalled, 0, sizeof(cbcalled)); 514 memset(cbcalled, 0, sizeof(cbcalled));
514 msg = new_msg( 1, cmd1, avp1, avp2, 1 ); 515 msg = new_msg( 1, cmd1, avp1, avp2, 1 );
515 CHECK( 12345, fd_msg_dispatch ( &msg, sess, &action ) ); 516 CHECK( 12345, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
516 CHECK( 1, cbcalled[0] ); 517 CHECK( 1, cbcalled[0] );
517 CHECK( 1, cbcalled[1] ); 518 CHECK( 1, cbcalled[1] );
518 CHECK( 1, cbcalled[6] ); 519 CHECK( 1, cbcalled[6] );
519 CHECK( 0, cbcalled[2] ); 520 CHECK( 0, cbcalled[2] );
520 CHECK( 0, cbcalled[3] ); 521 CHECK( 0, cbcalled[3] );
532 CHECK( 0, fd_disp_register( cb_2, DISP_HOW_ANY, &when, &hdl[3] ) ); 533 CHECK( 0, fd_disp_register( cb_2, DISP_HOW_ANY, &when, &hdl[3] ) );
533 CHECK( 0, fd_disp_register( cb_3, DISP_HOW_ANY, &when, &hdl[4] ) ); 534 CHECK( 0, fd_disp_register( cb_3, DISP_HOW_ANY, &when, &hdl[4] ) );
534 535
535 memset(cbcalled, 0, sizeof(cbcalled)); 536 memset(cbcalled, 0, sizeof(cbcalled));
536 msg = new_msg( 1, cmd1, avp1, avp2, 1 ); 537 msg = new_msg( 1, cmd1, avp1, avp2, 1 );
537 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 538 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
538 CHECK( 1, cbcalled[0] ); 539 CHECK( 1, cbcalled[0] );
539 CHECK( 1, cbcalled[1] ); 540 CHECK( 1, cbcalled[1] );
540 CHECK( 1, cbcalled[8] ); 541 CHECK( 1, cbcalled[8] );
541 CHECK( 0, cbcalled[2] ); 542 CHECK( 0, cbcalled[2] );
542 CHECK( 0, cbcalled[3] ); 543 CHECK( 0, cbcalled[3] );
554 CHECK( 0, fd_disp_register( cb_2, DISP_HOW_ANY, &when, &hdl[3] ) ); 555 CHECK( 0, fd_disp_register( cb_2, DISP_HOW_ANY, &when, &hdl[3] ) );
555 CHECK( 0, fd_disp_register( cb_3, DISP_HOW_ANY, &when, &hdl[4] ) ); 556 CHECK( 0, fd_disp_register( cb_3, DISP_HOW_ANY, &when, &hdl[4] ) );
556 557
557 memset(cbcalled, 0, sizeof(cbcalled)); 558 memset(cbcalled, 0, sizeof(cbcalled));
558 msg = new_msg( 1, cmd1, avp1, avp2, 1 ); 559 msg = new_msg( 1, cmd1, avp1, avp2, 1 );
559 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 560 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
560 CHECK( 1, cbcalled[0] ); 561 CHECK( 1, cbcalled[0] );
561 CHECK( 1, cbcalled[1] ); 562 CHECK( 1, cbcalled[1] );
562 CHECK( 1, cbcalled[9] ); 563 CHECK( 1, cbcalled[9] );
563 CHECK( 0, cbcalled[2] ); 564 CHECK( 0, cbcalled[2] );
564 CHECK( 0, cbcalled[3] ); 565 CHECK( 0, cbcalled[3] );
585 CHECK( 0, fd_disp_register( cb_3, DISP_HOW_CC, &when, &hdl[3] ) ); 586 CHECK( 0, fd_disp_register( cb_3, DISP_HOW_CC, &when, &hdl[3] ) );
586 CHECK( 0, fd_disp_register( cb_4, DISP_HOW_APPID, &when, &hdl[4] ) ); 587 CHECK( 0, fd_disp_register( cb_4, DISP_HOW_APPID, &when, &hdl[4] ) );
587 588
588 memset(cbcalled, 0, sizeof(cbcalled)); 589 memset(cbcalled, 0, sizeof(cbcalled));
589 msg = new_msg( 2, cmd2, avp1, avp2, 2 ); 590 msg = new_msg( 2, cmd2, avp1, avp2, 2 );
590 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 591 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
591 CHECK( 1, cbcalled[0] ); 592 CHECK( 1, cbcalled[0] );
592 CHECK( 1, cbcalled[1] ); 593 CHECK( 1, cbcalled[1] );
593 CHECK( 1, cbcalled[2] ); 594 CHECK( 1, cbcalled[2] );
594 CHECK( 1, cbcalled[3] ); 595 CHECK( 1, cbcalled[3] );
595 CHECK( 1, cbcalled[4] ); 596 CHECK( 1, cbcalled[4] );
597 CHECK( 0, fd_msg_free( msg ) ); 598 CHECK( 0, fd_msg_free( msg ) );
598 599
599 CHECK( 0, fd_disp_register( cb_9, DISP_HOW_ANY, &when, &hdl[5] ) ); 600 CHECK( 0, fd_disp_register( cb_9, DISP_HOW_ANY, &when, &hdl[5] ) );
600 memset(cbcalled, 0, sizeof(cbcalled)); 601 memset(cbcalled, 0, sizeof(cbcalled));
601 msg = new_msg( 2, cmd2, avp1, avp2, 2 ); 602 msg = new_msg( 2, cmd2, avp1, avp2, 2 );
602 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 603 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
603 CHECK( 1, cbcalled[0] ); 604 CHECK( 1, cbcalled[0] );
604 CHECK( 0, cbcalled[1] ); 605 CHECK( 0, cbcalled[1] );
605 CHECK( 0, cbcalled[2] ); 606 CHECK( 0, cbcalled[2] );
606 CHECK( 0, cbcalled[3] ); 607 CHECK( 0, cbcalled[3] );
607 CHECK( 0, cbcalled[4] ); 608 CHECK( 0, cbcalled[4] );
610 CHECK( 0, fd_disp_unregister( &hdl[5] ) ); 611 CHECK( 0, fd_disp_unregister( &hdl[5] ) );
611 612
612 CHECK( 0, fd_disp_register( cb_9, DISP_HOW_AVP_ENUMVAL, &when, &hdl[5] ) ); 613 CHECK( 0, fd_disp_register( cb_9, DISP_HOW_AVP_ENUMVAL, &when, &hdl[5] ) );
613 memset(cbcalled, 0, sizeof(cbcalled)); 614 memset(cbcalled, 0, sizeof(cbcalled));
614 msg = new_msg( 2, cmd2, avp1, avp2, 2 ); 615 msg = new_msg( 2, cmd2, avp1, avp2, 2 );
615 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 616 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
616 CHECK( 1, cbcalled[0] ); 617 CHECK( 1, cbcalled[0] );
617 CHECK( 1, cbcalled[1] ); 618 CHECK( 1, cbcalled[1] );
618 CHECK( 1, cbcalled[2] ); 619 CHECK( 1, cbcalled[2] );
619 CHECK( 0, cbcalled[3] ); 620 CHECK( 0, cbcalled[3] );
620 CHECK( 0, cbcalled[4] ); 621 CHECK( 0, cbcalled[4] );
623 CHECK( 0, fd_disp_unregister( &hdl[5] ) ); 624 CHECK( 0, fd_disp_unregister( &hdl[5] ) );
624 625
625 CHECK( 0, fd_disp_register( cb_9, DISP_HOW_AVP, &when, &hdl[5] ) ); 626 CHECK( 0, fd_disp_register( cb_9, DISP_HOW_AVP, &when, &hdl[5] ) );
626 memset(cbcalled, 0, sizeof(cbcalled)); 627 memset(cbcalled, 0, sizeof(cbcalled));
627 msg = new_msg( 2, cmd2, avp1, avp2, 2 ); 628 msg = new_msg( 2, cmd2, avp1, avp2, 2 );
628 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 629 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
629 CHECK( 1, cbcalled[0] ); 630 CHECK( 1, cbcalled[0] );
630 CHECK( 1, cbcalled[1] ); 631 CHECK( 1, cbcalled[1] );
631 CHECK( 1, cbcalled[2] ); 632 CHECK( 1, cbcalled[2] );
632 CHECK( 0, cbcalled[3] ); 633 CHECK( 0, cbcalled[3] );
633 CHECK( 0, cbcalled[4] ); 634 CHECK( 0, cbcalled[4] );
636 CHECK( 0, fd_disp_unregister( &hdl[5] ) ); 637 CHECK( 0, fd_disp_unregister( &hdl[5] ) );
637 638
638 CHECK( 0, fd_disp_register( cb_9, DISP_HOW_CC, &when, &hdl[5] ) ); 639 CHECK( 0, fd_disp_register( cb_9, DISP_HOW_CC, &when, &hdl[5] ) );
639 memset(cbcalled, 0, sizeof(cbcalled)); 640 memset(cbcalled, 0, sizeof(cbcalled));
640 msg = new_msg( 2, cmd2, avp1, avp2, 2 ); 641 msg = new_msg( 2, cmd2, avp1, avp2, 2 );
641 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 642 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
642 CHECK( 1, cbcalled[0] ); 643 CHECK( 1, cbcalled[0] );
643 CHECK( 1, cbcalled[1] ); 644 CHECK( 1, cbcalled[1] );
644 CHECK( 1, cbcalled[2] ); 645 CHECK( 1, cbcalled[2] );
645 CHECK( 1, cbcalled[3] ); 646 CHECK( 1, cbcalled[3] );
646 CHECK( 0, cbcalled[4] ); 647 CHECK( 0, cbcalled[4] );
649 CHECK( 0, fd_disp_unregister( &hdl[5] ) ); 650 CHECK( 0, fd_disp_unregister( &hdl[5] ) );
650 651
651 CHECK( 0, fd_disp_register( cb_9, DISP_HOW_APPID, &when, &hdl[5] ) ); 652 CHECK( 0, fd_disp_register( cb_9, DISP_HOW_APPID, &when, &hdl[5] ) );
652 memset(cbcalled, 0, sizeof(cbcalled)); 653 memset(cbcalled, 0, sizeof(cbcalled));
653 msg = new_msg( 2, cmd2, avp1, avp2, 2 ); 654 msg = new_msg( 2, cmd2, avp1, avp2, 2 );
654 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action ) ); 655 CHECK( 0, fd_msg_dispatch ( &msg, sess, &action, &ec ) );
655 CHECK( 1, cbcalled[0] ); 656 CHECK( 1, cbcalled[0] );
656 CHECK( 1, cbcalled[1] ); 657 CHECK( 1, cbcalled[1] );
657 CHECK( 1, cbcalled[2] ); 658 CHECK( 1, cbcalled[2] );
658 CHECK( 1, cbcalled[3] ); 659 CHECK( 1, cbcalled[3] );
659 CHECK( 1, cbcalled[4] ); 660 CHECK( 1, cbcalled[4] );
"Welcome to our mercurial repository"