udp_engine.hpp 1.9 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 47 48
            ~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 ();

        private:

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

52 53 54 55 56 57
            bool plugged;

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

59
            options_t options;
60

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

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

#endif