udp_engine.hpp 1.94 KB
Newer Older
1 2 3 4 5 6 7 8

#ifndef __ZMQ_UDP_ENGINE_HPP_INCLUDED__
#define __ZMQ_UDP_ENGINE_HPP_INCLUDED__

#include "io_object.hpp"
#include "i_engine.hpp"
#include "address.hpp"
#include "udp_address.hpp"
9
#include "msg.hpp"
10 11 12 13 14 15 16 17 18 19 20

#define MAX_UDP_MSG 8192

namespace zmq
{
    class io_thread_t;
    class session_base_t;

    class udp_engine_t : public io_object_t, public i_engine
    {
        public:
21
            udp_engine_t (const options_t &options_);
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
            ~udp_engine_t ();

            int init (address_t *address_, bool send_, bool recv_);

            //  i_engine interface implementation.
            //  Plug the engine to the session.
            void plug (zmq::io_thread_t *io_thread_, class session_base_t *session_);

            //  Terminate and deallocate the engine. Note that 'detached'
            //  events are not fired on termination.
            void terminate ();

            //  This method is called by the session to signalise that more
            //  messages can be written to the pipe.
            void restart_input ();

            //  This method is called by the session to signalise that there
            //  are messages to send available.
            void restart_output ();

            void zap_msg_available () {};

            void in_event ();
            void out_event ();

47
            const char *get_endpoint () const;
48

49
        private:
50
            int resolve_raw_address (char *addr_, size_t length_);
51 52
            void sockaddr_to_msg (zmq::msg_t *msg, sockaddr_in* addr);

53 54 55 56 57 58
            bool plugged;

            fd_t fd;
            session_base_t* session;
            handle_t handle;
            address_t *address;
59

60
            options_t options;
61

62 63 64 65
            sockaddr_in raw_address;
            const struct sockaddr* out_address;
            socklen_t out_addrlen;

66 67 68 69 70 71 72 73
            unsigned char out_buffer[MAX_UDP_MSG];
            unsigned char in_buffer[MAX_UDP_MSG];
            bool send_enabled;
            bool recv_enabled;
    };
}

#endif