00001
00002 #ifndef Wireless_h_DEFINED
00003 #define Wireless_h_DEFINED
00004
00005 #include <OPENR/OObject.h>
00006 #include <OPENR/OSubject.h>
00007 #include <OPENR/OObserver.h>
00008 #include <ant.h>
00009
00010 #include "Socket.h"
00011 #include "DummySocket.h"
00012 #include <list>
00013
00014 using namespace SocketNS;
00015 using namespace __gnu_cxx;
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 class Wireless {
00034 public:
00035
00036 static const int WIRELESS_MAX_SOCKETS=100;
00037
00038
00039 static const int WIRELESS_DEF_RECV_SIZE=1024;
00040
00041
00042 static const int WIRELESS_DEF_SEND_SIZE=1024;
00043
00044
00045
00046
00047
00048
00049 Wireless();
00050 ~Wireless();
00051
00052
00053
00054
00055
00056
00057 Socket* socket(TransportType_t ttype);
00058
00059
00060
00061
00062 Socket* socket(TransportType_t ttype, int recvsize, int sendsize);
00063
00064
00065
00066
00067
00068
00069 int listen(int sock, int port);
00070
00071
00072 int connect(int sock, const char* ipaddr, int port);
00073
00074 void setReceiver(int sock, int (*rcvcbckfn) (char*, int) );
00075
00076 void setDaemon(int sock, bool val=true) { sockets[sock]->daemon=val; }
00077
00078 void close(int sock);
00079
00080
00081
00082
00083
00084
00085 bool isConnected(int sock) { return sockets[sock]->state
00086 ==CONNECTION_CONNECTED; }
00087 bool isReady(int sock) { return !sockets[sock]->tx; }
00088 bool hasData(int sock) { return !sockets[sock]->rx; }
00089
00090
00091
00092
00093 void setReceiver(Socket &sobj, int (*rcvcbckfn) (char*, int) )
00094 { setReceiver(sobj.sock, rcvcbckfn); }
00095 void setReceiver(Socket *sobj, int (*rcvcbckfn) (char*, int) )
00096 { setReceiver(sobj->sock, rcvcbckfn); }
00097 void setDaemon(Socket &sobj, bool val=true) { setDaemon(sobj.sock, val); }
00098 void setDaemon(Socket *sobj, bool val=true) { setDaemon(sobj->sock, val); }
00099 int listen(Socket &sobj, int port) { return listen(sobj.sock, port); }
00100 int listen(Socket *sobj, int port) { return listen(sobj->sock, port); }
00101 int connect(Socket &sobj, const char* ipaddr, int port)
00102 { return connect (sobj.sock, ipaddr, port); }
00103 int connect(Socket *sobj, const char* ipaddr, int port)
00104 { return connect (sobj->sock, ipaddr, port); }
00105 void close(Socket &sobj) { close(sobj.sock); }
00106 void close(Socket *sobj) { close(sobj->sock); }
00107
00108
00109
00110
00111 void receive(int sock, int (*rcvcbckfn) (char*, int) );
00112 void receive(int sock);
00113
00114
00115
00116
00117
00118 void send(int sock);
00119 void blockingSend(int sock);
00120
00121
00122
00123
00124
00125
00126 void ListenCont (void* msg);
00127 void BindCont (void* msg);
00128 void ConnectCont(void* msg);
00129 void SendCont (void* msg);
00130 void ReceiveCont(void* msg);
00131 void CloseCont (void* msg);
00132
00133
00134 private:
00135
00136
00137 antStackRef ipstackRef;
00138 OID myOID;
00139 Socket* sockets[WIRELESS_MAX_SOCKETS];
00140 list<int> freeSockets;
00141
00142
00143 private:
00144 Wireless(const Wireless&);
00145 Wireless& operator= (const Wireless&);
00146 };
00147
00148
00149 extern Wireless* wireless;
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164 #endif // Wireless_h_DEFINED