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_SOURCE_H
00024 #define INCLUDED_GR_UDP_SOURCE_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_source;
00032 typedef boost::shared_ptr<gr_udp_source> gr_udp_source_sptr;
00033
00034 gr_udp_source_sptr gr_make_udp_source(size_t itemsize, const char *src,
00035 unsigned short port_src, int payload_size=1472);
00036
00050 class gr_udp_source : public gr_sync_block
00051 {
00052 friend gr_udp_source_sptr gr_make_udp_source(size_t itemsize, const char *src,
00053 unsigned short port_src, int payload_size);
00054
00055 private:
00056 size_t d_itemsize;
00057 bool d_updated;
00058 omni_mutex d_mutex;
00059
00060 int d_payload_size;
00061 int d_socket;
00062 int d_socket_rcv;
00063 struct in_addr d_ip_src;
00064 unsigned short d_port_src;
00065 sockaddr_in d_sockaddr_src;
00066
00067 char *d_temp_buff;
00068 ssize_t d_residual;
00069 size_t d_temp_offset;
00070
00071 protected:
00082 gr_udp_source(size_t itemsize, const char *src, unsigned short port_src, int payload_size);
00083
00084 public:
00085 ~gr_udp_source();
00086
00093 bool open();
00094
00100 void close();
00101
00103 int payload_size() { return d_payload_size; }
00104
00105
00106
00107 int work(int noutput_items,
00108 gr_vector_const_void_star &input_items,
00109 gr_vector_void_star &output_items);
00110 };
00111
00112
00113 #endif