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

手机WAP编程

开发平台:

WINDOWS

  1. /* udpfeed.c - blindly send UDP packets to a certain port
  2.  *
  3.  * This little tool reads a bunch of files and sends each of them
  4.  * to a given port as a single UDP packets.  It's useful for running
  5.  * sets of test packets to see if any of them will crash the gateway.
  6.  * By default, it sends them at one-second intervals.
  7.  */
  8. #include <unistd.h>
  9. #include "gwlib/gwlib.h"
  10. #define UDP_MAXIMUM (65535 - 40)
  11. static unsigned char usage[] = "
  12. Usage: udpfeed [options] files...n
  13. n
  14. where options are:n
  15. n
  16. -h helpn
  17. -g hostname name of IP number of host to send to (default: localhost)n
  18. -p port port number to send to (default: 9200)n
  19. -i interval delay between packers (default: 1.0 seconds)n
  20. n
  21. Each file will be sent as a single packet.n
  22. ";
  23. static Octstr *hostname;
  24. static int port = 9200;  /* By default, the sessionless WSP port */
  25. static double interval = 1.0;  /* Default interval (seconds) between packets */
  26. static long maxsize = UDP_MAXIMUM;  /* Maximum packet size in octets */
  27. static void help(void) {
  28. info(0, "n%s", usage);
  29. }
  30. static void send_file(int udpsock, char *filename, Octstr *address) {
  31. Octstr *contents;
  32. contents = octstr_read_file(filename);
  33. if (contents == NULL) {
  34. info(0, "Skipping "%s".", filename);
  35. return;
  36. }
  37. info(0, "Sending "%s", %ld octets.", filename, octstr_len(contents));
  38. if (octstr_len(contents) > maxsize) {
  39. octstr_truncate(contents, maxsize);
  40. warning(0, "Truncating to %ld octets.", maxsize);
  41. }
  42. udp_sendto(udpsock, contents, address);
  43. octstr_destroy(contents);
  44. }
  45. int main(int argc, char **argv) {
  46. int opt;
  47. Octstr *address;
  48. int udpsock;
  49. gwlib_init();
  50. /* Set defaults that can't be set statically */
  51. hostname = octstr_create("localhost");
  52. while ((opt = getopt(argc, argv, "hg:p:i:m:")) != EOF) {
  53. switch(opt) {
  54. case 'g':
  55. octstr_destroy(hostname);
  56. hostname = octstr_create(optarg);
  57. break;
  58. case 'p':
  59. port = atoi(optarg);
  60. break;
  61. case 'i':
  62. interval = atof(optarg);
  63. break;
  64. case 'm':
  65. maxsize = atol(optarg);
  66. if (maxsize > UDP_MAXIMUM) {
  67. maxsize = UDP_MAXIMUM;
  68. warning(0, "-m: truncated to UDP maximum of"
  69. "%ld bytes.", maxsize);
  70. }
  71. break;
  72. case 'h':
  73. help();
  74. exit(0);
  75. break;
  76. case '?':
  77. default:
  78. error(0, "Unknown option '%c'", opt);
  79. help();
  80. exit(1);
  81. break;
  82. }
  83. }
  84. address = udp_create_address(hostname, port);
  85. udpsock = udp_client_socket();
  86. if (udpsock < 0)
  87. exit(1);
  88. for ( ; optind < argc; optind++) {
  89. send_file(udpsock, argv[optind], address);
  90. if (interval > 0 && optind + 1 < argc)
  91. gwthread_sleep(interval);
  92. }
  93. octstr_destroy(address);
  94. octstr_destroy(hostname);
  95. gwlib_shutdown();
  96.      return 0;
  97. }