00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef INCLUDED_GR_UDP_SINK_H
00024 #define INCLUDED_GR_UDP_SINK_H
00025
00026 #include <gr_sync_block.h>
00027 #include <omnithread.h>
00028 #include <sys/socket.h>
00029 #include <arpa/inet.h>
00030
00031 class gr_udp_sink;
00032 typedef boost::shared_ptr<gr_udp_sink> gr_udp_sink_sptr;
00033
00034 gr_udp_sink_sptr
00035 gr_make_udp_sink (size_t itemsize,
00036 const char *src, unsigned short port_src,
00037 const char *dst, unsigned short port_dst,
00038 int payload_size=1472);
00039
00055 class gr_udp_sink : public gr_sync_block
00056 {
00057 friend gr_udp_sink_sptr gr_make_udp_sink (size_t itemsize,
00058 const char *src, unsigned short port_src,
00059 const char *dst, unsigned short port_dst,
00060 int payload_size);
00061 private:
00062 size_t d_itemsize;
00063 bool d_updated;
00064 omni_mutex d_mutex;
00065
00066 int d_payload_size;
00067 int d_socket;
00068 int d_socket_rcv;
00069 struct in_addr d_ip_src;
00070 struct in_addr d_ip_dst;
00071 unsigned short d_port_src;
00072 unsigned short d_port_dst;
00073 sockaddr_in d_sockaddr_src;
00074 sockaddr_in d_sockaddr_dst;
00075
00076 protected:
00090 gr_udp_sink (size_t itemsize,
00091 const char *src, unsigned short port_src,
00092 const char *dst, unsigned short port_dst,
00093 int payload_size);
00094
00095 public:
00096 ~gr_udp_sink ();
00097
00104 bool open();
00105
00111 void close();
00112
00114 int payload_size() { return d_payload_size; }
00115
00116
00117
00118 int work (int noutput_items,
00119 gr_vector_const_void_star &input_items,
00120 gr_vector_void_star &output_items);
00121 };
00122
00123 #endif