00001 #line 3 "./lpsrc/flx_posix_demux.ipk"
00002 #ifndef __FLX_DEMUX_POSIX_DEMUXER_H__
00003 #define __FLX_DEMUX_POSIX_DEMUXER_H__
00004
00005
00006
00007 #include "demux_demuxer.hpp"
00008
00009 namespace flx { namespace demux {
00010 class DEMUX_EXTERN posix_demuxer;
00011
00012
00013 class DEMUX_EXTERN posix_wakeup {
00014 public:
00015 virtual ~posix_wakeup() {}
00016
00017
00018 virtual void wakeup(posix_demuxer& demux) = 0;
00019 };
00020
00021 class DEMUX_EXTERN socket_wakeup : public posix_wakeup {
00022 public:
00023 int s;
00024 int wakeup_flags;
00025
00026 socket_wakeup() : s(-1) {}
00027 };
00028
00029 class DEMUX_EXTERN posix_demuxer : public demuxer {
00030 protected:
00031 void async_quit();
00032
00033
00034 public:
00035 virtual ~posix_demuxer();
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 virtual int add_socket_wakeup(socket_wakeup* sv, int flags) = 0;
00047
00048
00049
00050
00051
00052 static bool socket_recv(int s, sel_param* pb);
00053 static bool socket_send(int s, sel_param* pb);
00054 };
00055
00056
00057
00058
00059
00060
00061 class DEMUX_EXTERN accept_control_block : public socket_wakeup {
00062 public:
00063 int accepted;
00064 int socket_err;
00065
00066 accept_control_block() : accepted(-1), socket_err(0) {}
00067
00068 virtual int start(posix_demuxer& demux);
00069 virtual void wakeup(posix_demuxer& demux);
00070 };
00071
00072 class DEMUX_EXTERN connect_control_block : public socket_wakeup {
00073 public:
00074 int socket_err;
00075
00076 const char* addy;
00077 int p;
00078
00079 connect_control_block() : socket_err(0) {}
00080
00081 virtual int start(posix_demuxer& demux);
00082 virtual void wakeup(posix_demuxer& demux);
00083
00084
00085
00086
00087
00088
00089 bool finished() { return ( 0 == socket_err); }
00090 };
00091
00092 }}
00093 #endif
00094