ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/host/c++/socket++-1.10/test/commObj.h
Revision: 1.1
Committed: Mon Feb 26 15:02:40 2001 UTC (23 years, 8 months ago) by ab11
Content type: text/plain
Branch: MAIN
CVS Tags: PROJECT_COMPLETION
Log Message:
Test programs for Networking class. Unused by the host

File Contents

# User Rev Content
1 ab11 1.1 //----------------------------------------------------------------------------
2     // File: CommObj.hh
3     // Author: Bala Swaminathan 5/12/94
4     // This file contains interface of the Network Communication Object class.
5     //
6     // Copyright 1994, Washington University in St. Louis
7     //----------------------------------------------------------------------------
8    
9     // The following CommObj is modeled using the sockets.
10     // Each PRO creates a CommObj of type CommObj::PRIMARY and this becomes
11     // its main socket. Later whenever it needs a "new" socket it either
12     // (1) creates a socket of type CommObj::SECONDARY and then "connects"
13     // to another PRO's primary socket, or (2) the PRO can "accept" a connection
14     // from another PRO's secondary socket. This "accepting" a connection, if
15     // succesful, results in the creation of a socket of type CommObj::SECONDARY.
16    
17     #ifndef CommObj_hh
18     #define CommObj_hh
19    
20     #include "sockinet.h"
21    
22     class CommObj : public sockinetbuf {
23     public:
24     enum type { PRIMARY, SECONDARY };
25     public:
26     CommObj (const type ty = SECONDARY, // "do-nothing" constructor
27     const int portID=0) // can specify a port (for PRIMARY)
28     : sockinetbuf(sockbuf::sock_stream) // TCP Sockets
29     {
30     if (ty == PRIMARY) {
31     sockinetaddr addr (INADDR_ANY, portID);
32     // this creates addr of INADDR_ANY and port=0
33     // i.e. sockets bound to any address can "connect" to us
34     bind (addr); // bind to the above address
35     listen (); // now listen (default 5) for new connections
36     }
37     }
38     CommObj (const sockbuf& sb): sockinetbuf (sb) {}
39    
40     const sockinetbuf sbuf () { return *this; } // for DEUBUGGING purposes
41     };
42    
43     // The CommController manages all the CommObj instances in the PROTOCOL.
44     // (* the list of CommObj* maintained by CommController are not shown *)
45    
46     class CommController {
47     public:
48     CommController (int portID=0) // creates the PERIMARY CommObj
49     {
50     c_server = new CommObj (CommObj::PRIMARY, portID);
51     }
52     ~CommController () // close all sockets and delete list
53     { delete c_server; }
54     CommObj* server () // return "main" socket
55     { return c_server; }
56     CommObj accept () // accept connection on the SERVER Commobj
57     {
58     // return c_server->accept();
59     sockinetaddr sa;
60     sockinetbuf si = c_server->accept(sa);
61     cout << " accept(): peer.host = " << sa.gethostname() << endl;
62     cout << " accept(): peer.port = " << sa.getport() << endl;
63     cout << " acc: local.host = " << (si).localhost() << endl;
64     cout << " acc: local.port = " << (si).localport() << endl;
65     cout << " acc: peer.host = " << (si).peerhost() << endl;
66     cout << " acc: peer.port = " << (si).peerport() << endl;
67     return si;
68     }
69     private:
70     CommObj* c_server; // the server or the main Object
71     };
72    
73     #endif CommObj_hh
74