Dependents:   SimpleLCDClock readCard2Twitter_http AnalogClock_StepperMotor_NTP ServoCamV1

if/net/net.h

Committer:
donatien
Date:
2010-05-24
Revision:
0:3717b703f76d
Child:
1:e52ec2a24c6a

File content as of revision 0:3717b703f76d:

#ifndef NET_H
#define NET_H

class NetIf;
class NetTcpSocket;
class NetUdpSocket;
class NetDnsRequest;

#include <list>
using std::list;

#include "host.h"
#include "ipaddr.h"
#include "netif.h"
#include "nettcpsocket.h"
#include "netudpsocket.h"
#include "netservice.h"
#include "netdnsrequest.h"

class Net
{
private:
  Net();
  ~Net();
public:  
  static void poll(); //Poll every if & socket
  
  static NetTcpSocket* tcpSocket(NetIf& netif);
  static NetTcpSocket* tcpSocket(); //Socket on default if
  static void releaseTcpSocket(NetTcpSocket* pNetTcpSocket);
  
  static NetUdpSocket* udpSocket(NetIf& netif);
  static NetUdpSocket* udpSocket(); //Socket on default if
  static void releaseUdpSocket(NetUdpSocket* pNetUdpSocket);
  
  static NetDnsRequest* dnsRequest(const char* hostname, NetIf& netif);
  static NetDnsRequest* dnsRequest(const char* hostname); //Create a new NetDnsRequest object from default if

  static NetDnsRequest* dnsRequest(Host* pHost, NetIf& netif);
  static NetDnsRequest* dnsRequest(Host* pHost); //Create a new NetDnsRequest object from default if
  
  static void setDefaultIf(NetIf& netif); //Deprecated
  static void setDefaultIf(NetIf* pIf);
  static NetIf* getDefaultIf();
  
  //TODO: Factory functions like 'setupEthernet', 'setupPPP', 'setupTelit' ...
  #if 0
  enum NetErr //Generic errors
  {
    __NET_MIN = -0xFFFF;
    NET_OPEN, //Could not open if
    NET_CONNECT, //Could not connect
    NET_AUTH, //Could not auth
    NET_HW, //HW problem
        
    NET_OK = 0
  };
  
  static NetErr Ethernet();
  static NetErr PPPoverSerial(int Tx, int Rx, const char* apn, const char* user, const char* password);
  static NetErr Telit(int pwrSetPin, int pwrMonPin, int Tx, int Rx);
  #endif
  
protected:
  friend class NetIf;
  friend class NetTcpSocket;
  friend class NetUdpSocket;
  
  static void registerIf(NetIf* pIf);
  static void unregisterIf(NetIf* pIf);
  
  static void registerNetTcpSocket(NetTcpSocket* pNetTcpSocket);
  static void unregisterNetTcpSocket(NetTcpSocket* pNetTcpSocket);  
  
  static void registerNetUdpSocket(NetUdpSocket* pNetUdpSocket);
  static void unregisterNetUdpSocket(NetUdpSocket* pNetUdpSocket);  
  
private:
  static Net& net(); //Return inst of singleton

  NetIf* m_defaultIf;
  
  list<NetIf*> m_lpIf;
  list<NetTcpSocket*> m_lpNetTcpSocket;
  list<NetUdpSocket*> m_lpNetUdpSocket;
};

#endif