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 (24 years, 10 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

# Content
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