ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/host/c++/socket++-1.10/protocol.h
Revision: 1.1
Committed: Mon Feb 26 15:01:39 2001 UTC (23 years, 9 months ago) by ab11
Content type: text/plain
Branch: MAIN
CVS Tags: PROJECT_COMPLETION
Log Message:
Networking class. Assumed to be bug free.

File Contents

# Content
1 // protocol.h -*- C++ -*- socket library
2 // Copyright (C) 1992,1993,1994 Gnanasekaran Swaminathan <gs4t@virginia.edu>
3 //
4 // Permission is granted to use at your own risk and distribute this software
5 // in source and binary forms provided the above copyright
6 // notice and this paragraph are preserved on all copies.
7 // This software is provided "as is" with no express or implied warranty.
8 //
9 // Version: 17Oct95 1.10
10
11 #ifndef PROTOCOL_H
12 #define PROTOCOL_H
13
14 #include <sockinet.h>
15
16 class protocol: public iosockstream {
17 public:
18 enum p_name {
19 nil = 0,
20 tcp = sockbuf::sock_stream,
21 udp = sockbuf::sock_dgram
22 };
23
24 class protocolbuf: public sockinetbuf {
25 private:
26 protocol::p_name pn;
27
28 int bind (sockAddr& sa) { return sockbuf::bind (sa); }
29 int connect (sockAddr& sa) { return sockbuf::connect (sa); }
30
31 public:
32 protocolbuf (sockbuf& si): sockinetbuf (si), pn (protocol::nil) {}
33 protocolbuf (protocol::p_name pname)
34 : sockinetbuf ((sockbuf::type) pname, 0), pn (pname) {}
35
36
37 int bind () { serve_clients (); return 0; }
38 int connect ();
39 int connect (unsigned long addr);
40 int connect (const char* host);
41 int connect (const char* host, int portno);
42
43 const char* protocol_name () const;
44
45 virtual void serve_clients (int portno = -1) = 0;
46 virtual const char* rfc_name () const = 0;
47 virtual const char* rfc_doc () const = 0;
48 };
49
50 protocol (): ios (0) {}
51 };
52
53 inline const char* protocol::protocolbuf::protocol_name () const
54 {
55 char* ret = "";
56 if (pn == protocol::tcp)
57 ret = "tcp";
58 if (pn == protocol::udp)
59 ret = "udp";
60 return ret;
61 }
62
63 inline int protocol::protocolbuf::connect ()
64 {
65 if (pn != protocol::nil)
66 return sockinetbuf::connect (localhost (), rfc_name (), protocol_name ());
67 return -1;
68 }
69
70 inline int protocol::protocolbuf::connect (unsigned long addr)
71 // addr is in host byte order
72 {
73 if (pn != protocol::nil)
74 return sockinetbuf::connect (addr, rfc_name (), protocol_name ());
75 return -1;
76 }
77
78 inline int protocol::protocolbuf::connect (const char* host)
79 {
80 if (pn != protocol::nil)
81 return sockinetbuf::connect (host, rfc_name (), protocol_name ());
82 return -1;
83 }
84
85 inline int protocol::protocolbuf::connect (const char* host, int portno)
86 {
87 if (pn != protocol::nil)
88 return sockinetbuf::connect (host, portno);
89 return -1;
90 }
91
92 #endif // PROTOCOL_H