test_pdu.c
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:2k
源码类别:

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  * test_pdu.c - test gw/wtp_pdu packing and unpacking.
  3.  *
  4.  * Richard Braakman
  5.  */
  6.  
  7. #include <string.h>
  8. #include <unistd.h>
  9. #include <signal.h>
  10. #include "gwlib/gwlib.h"
  11. #include "wap/wtp_pdu.h"
  12. #include "wap/wsp_pdu.h"
  13. int main(int argc, char **argv) {
  14. int i;
  15. Octstr *packet = NULL;
  16. Octstr *newpacket = NULL;
  17. WTP_PDU *pdu = NULL;
  18. Octstr *wsp_data = NULL;
  19. WSP_PDU *wsp = NULL;
  20. gwlib_init();
  21. for (i = 1; i < argc; i++) {
  22. octstr_destroy(packet);  packet = NULL;
  23. octstr_destroy(newpacket);  newpacket = NULL;
  24. octstr_destroy(wsp_data);  wsp_data = NULL;
  25. wtp_pdu_destroy(pdu);  pdu = NULL;
  26. wsp_pdu_destroy(wsp);  wsp = NULL;
  27. packet = octstr_read_file(argv[i]);
  28. pdu = wtp_pdu_unpack(packet);
  29. if (!pdu) {
  30. warning(0, "Unpacking PDU %s failed", argv[i]);
  31. continue;
  32. }
  33. debug("test", 0, "PDU %s:", argv[i]);  
  34. wtp_pdu_dump(pdu, 0);
  35. newpacket = wtp_pdu_pack(pdu);
  36. if (!newpacket) {
  37. warning(0, "Repacking PDU %s failed", argv[i]);
  38. continue;
  39. }
  40. if (octstr_compare(packet, newpacket) != 0) {
  41. error(0, "Repacking PDU %s changed it", argv[i]);
  42. debug("test", 0, "Original:");
  43. octstr_dump(packet, 1);
  44. debug("test", 0, "New:");
  45. octstr_dump(newpacket, 1);
  46. continue;
  47. }
  48. if (pdu->type == Invoke) {
  49. wsp_data = pdu->u.Invoke.user_data;
  50. } else if (pdu->type == Result) {
  51. wsp_data = pdu->u.Result.user_data;
  52. } else {
  53. continue;
  54. }
  55. wsp_data = octstr_duplicate(wsp_data);
  56. wsp = wsp_pdu_unpack(wsp_data);
  57. if (!wsp) {
  58. warning(0, "Unpacking WSP data in %s failed", argv[i]);
  59. continue;
  60. }
  61. wsp_pdu_dump(wsp, 0);
  62. octstr_destroy(newpacket);
  63. newpacket = wsp_pdu_pack(wsp);
  64. if (!newpacket) {
  65. warning(0, "Repacking WSP data in %s failed", argv[i]);
  66. continue;
  67. }
  68. if (octstr_compare(wsp_data, newpacket) != 0) {
  69. error(0, "Repacking WSP data in %s changed it",
  70. argv[i]);
  71. debug("test", 0, "Original:");
  72. octstr_dump(wsp_data, 1);
  73. debug("test", 0, "New:");
  74. octstr_dump(newpacket, 1);
  75. continue;
  76. }
  77. }
  78. octstr_destroy(packet);
  79. octstr_destroy(newpacket);
  80. wtp_pdu_destroy(pdu);
  81. gwlib_shutdown();
  82.      return 0;
  83. }