TestPacketSink.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #ifndef _TESTPACKETSINK_H
  2. #define _TESTPACKETSINK_H
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <misc/debug.h>
  7. #include <system/DebugObject.h>
  8. #include <flow/PacketPassInterface.h>
  9. typedef struct {
  10. DebugObject d_obj;
  11. PacketPassInterface input;
  12. int accpeting;
  13. int have_packet;
  14. const char *expect;
  15. } TestPacketSink;
  16. static int _TestPacketSink_input_handler_send (TestPacketSink *s, uint8_t *data, int data_len)
  17. {
  18. ASSERT(!s->have_packet)
  19. ASSERT(s->expect)
  20. ASSERT(strlen(s->expect) == data_len)
  21. ASSERT(!memcmp(s->expect, data, data_len))
  22. s->expect = NULL;
  23. if (s->accpeting) {
  24. return 1;
  25. }
  26. s->have_packet = 1;
  27. return 0;
  28. }
  29. static void _TestPacketSink_input_handler_cancel (TestPacketSink *s)
  30. {
  31. ASSERT(s->have_packet)
  32. s->have_packet = 0;
  33. }
  34. static void TestPacketSink_Init (TestPacketSink *s, int mtu)
  35. {
  36. PacketPassInterface_Init(&s->input, mtu, (PacketPassInterface_handler_send)_TestPacketSink_input_handler_send, s);
  37. PacketPassInterface_EnableCancel(&s->input, (PacketPassInterface_handler_cancel)_TestPacketSink_input_handler_cancel);
  38. s->accpeting = 1;
  39. s->have_packet = 0;
  40. s->expect = NULL;
  41. DebugObject_Init(&s->d_obj);
  42. }
  43. static void TestPacketSink_Free (TestPacketSink *s)
  44. {
  45. DebugObject_Free(&s->d_obj);
  46. PacketPassInterface_Free(&s->input);
  47. }
  48. static PacketPassInterface * TestPacketSink_GetInput (TestPacketSink *s)
  49. {
  50. return &s->input;
  51. }
  52. static void TestPacketSink_SetAccepting (TestPacketSink *s, int accepting)
  53. {
  54. s->accpeting = !!accepting;
  55. }
  56. static void TestPacketSink_Done (TestPacketSink *s)
  57. {
  58. ASSERT(s->have_packet)
  59. s->have_packet = 0;
  60. PacketPassInterface_Done(&s->input);
  61. return;
  62. }
  63. static void TestPacketSink_Expect (TestPacketSink *s, const char *str)
  64. {
  65. s->expect = str;
  66. }
  67. #endif