network.hh
上传用户:aoeyumen
上传日期:2007-01-06
资源大小:3329k
文件大小:4k
源码类别:

DVD

开发平台:

Unix_Linux

  1. /*
  2.   File: network.hh
  3.   
  4.   Description:
  5.   This file contains all network functions to be used with the mpeg2player. This
  6.   is a temporary solution. The complete AtmSocket API should be used for this
  7.   in order to use configuration/testing facilities. Hopefully we can do that im
  8.   June/July 1996
  9.   
  10.   This file has been re-organized big time to cover a more generic range of
  11.   options not necesdarilly related to the mpeg2player.
  12.   class Socket           // Abstract class
  13.     class SocketFile     // Socket to file
  14.     class SocketTcp      // TCP stream socket
  15.     class SocketUdp      // UDP datagram socket - NOT TESTED
  16.     class SocketAtmSpans // ATM Fore Spans signalling socket
  17.     class SocketAtmPvc   // ATM Fore PVC socket
  18.   class SocketMulti      // Socket accepts call from TCP, UDP, ATM spans, or PVC
  19.   Created: April 1996, Alex Theo de Jong, NIST
  20. */
  21. #ifndef __network_hh_ 
  22. #define __network_hh_
  23. // Network
  24. #include <string.h>
  25. #include <sys/types.h>
  26. #include <sys/socket.h>
  27. #include <sys/uio.h>
  28. #include <sys/ioctl.h>
  29. #include <unistd.h>
  30. #include <netinet/in.h>
  31. #include <netdb.h>
  32. #include <arpa/inet.h>
  33. #include <errno.h>
  34. #include <sys/fcntl.h>
  35. #ifdef FORE_ATM
  36. // Fore API
  37. #include <fore_atm/fore_atm_user.h>
  38. #define ATMDEVICE  "/dev/fa0"
  39. #endif
  40. // Abstract class
  41. class Socket {
  42.   friend class SocketMulti;
  43.  protected:
  44.   int socketfd; 
  45.   // variables for recv
  46.   unsigned char* bfr;
  47.   int bytes, read_bytes;
  48.  public:
  49.   Socket(){ socketfd=-1; }
  50.   virtual ~Socket(){}
  51.   virtual int accept() = 0;
  52.   virtual int recv(unsigned char* data, int size) = 0;
  53.   virtual int send(unsigned char* data, int size) = 0;
  54.   virtual int close() = 0;
  55. };
  56. class SocketFile : public Socket {
  57.   String filename;
  58.  public:
  59.   SocketFile(const char* filename=0);
  60.   ~SocketFile();
  61.   int accept(){ return (socketfd>=0); }
  62.   int recv(unsigned char* data, int size);
  63.   int send(unsigned char*, int){ return -1; }
  64.   int close();
  65. };
  66. class SocketTcp : public Socket {
  67.   int fd;
  68.  public:
  69.   SocketTcp(unsigned int asap, unsigned int pdu_size=0);
  70.   ~SocketTcp();
  71.   int accept();
  72.   int recv(unsigned char* data, int size);
  73.   int send(unsigned char* data, int size){
  74.     return ::write(fd, data, size);
  75.   }
  76.   int close();
  77. };
  78. class SocketUdp : public Socket {
  79.   sockaddr_in cli_addr;
  80.   sockaddr* pcli_addr;
  81.   int cli_len;
  82.   int fd;
  83.  public:
  84.   SocketUdp(unsigned int asap, unsigned int pdu_size=0);
  85.   ~SocketUdp();
  86.   int accept();
  87.   int recv(unsigned char* data, int size);
  88.   int send(unsigned char* data, int size){
  89.     return ::sendto(fd, (char*) data, size, 0, pcli_addr, cli_len);
  90.   }
  91.   int close();
  92. };
  93. #ifdef FORE_ATM
  94. class SocketAtmSpans : public Socket {
  95.   unsigned int asap;
  96.   Aal_type aal_type;
  97.   Atm_qos qos;
  98.   Atm_dataflow dataflow;
  99.   Atm_endpoint atm_endpoint;
  100.   int fd;
  101.  public:
  102.   SocketAtmSpans(unsigned int sap);
  103.   ~SocketAtmSpans();
  104.   int accept();
  105.   int recv(unsigned char* data, int size);
  106.   int send(unsigned char* data, int size){
  107.     return ::atm_send(fd, (caddr_t) data, size);
  108.   }
  109.   int close();
  110. };
  111. class SocketAtmPvc : public Socket {
  112.   Aal_type aal_type;
  113.   Atm_dataflow dataflow;
  114.   Vpvc vpvc;
  115.   int fd;
  116.  public:
  117.   SocketAtmPvc(unsigned int vci, unsigned int vpi=0);
  118.   ~SocketAtmPvc();
  119.   int accept();
  120.   int recv(unsigned char* data, int size);
  121.   int send(unsigned char* data, int size){
  122.     return ::atm_sendto(fd, (caddr_t) data, size, vpvc);
  123.   }
  124.   int close();
  125. };
  126. #endif // FORE_ATM
  127. // Multi socket that accepts the first available connection;
  128. // either TCP, UDP, ATM SPANS or ATM PVC
  129. #define SOCKETMULTI_MAX   10
  130. class SocketMulti {
  131.   Socket** sockets;
  132.   Socket* socket;
  133.   int count; // number of sockets
  134.  public:
  135.   SocketMulti(const char* filename);
  136.   SocketMulti(unsigned int asap, int pdu_size, unsigned int vci=60, unsigned int vpi=0);
  137.   ~SocketMulti();
  138.   int accept();
  139.   int recv(unsigned char* data, int size){ return socket->recv(data, size); }
  140.   int send(unsigned char* data, int size){ return socket->send(data, size); }
  141.   int close(){ return socket->close(); }
  142. };
  143. #endif // __network_hh_