OSDN Git Service

Add MS7619SE
[uclinux-h8/uClinux-dist.git] / user / gnugk / rasinfo.h
1 //////////////////////////////////////////////////////////////////
2 //
3 // rasinfo.h
4 //
5 // RAS type traits
6 // Define template classes that associate RAS tags and types
7 //
8 // Copyright (c) Citron Network Inc. 2003
9 //
10 // This work is published under the GNU Public License (GPL)
11 // see file COPYING for details.
12 // We also explicitely grant the right to link this code
13 // with the OpenH323 library.
14 //
15 // initial author: Chih-Wei Huang <cwhuang@linux.org.tw>
16 // initial version: 05/28/2003
17 //
18 //////////////////////////////////////////////////////////////////
19
20 #ifndef RASINFO_H
21 #define RASINFO_H "@(#) $Id: rasinfo.h,v 1.3 2006/04/14 13:56:19 willamowius Exp $"
22
23 #ifndef __STL_TEMPLATE_NULL
24 // explicit specialization
25 #define __STL_TEMPLATE_NULL template<>
26 #endif
27
28 #ifndef __explicit_specialization
29 #define __explicit_specialization __STL_TEMPLATE_NULL
30 #endif
31
32 // compile time assertion
33 template<bool> struct CTAssert;
34 template<> struct CTAssert<true> {};
35
36 // define a type for an RAS tag
37 template<int I> struct RasTag {
38         operator unsigned() const { return I; }
39 };
40
41 // the template classes map RAS tags to its corresponding RAS types
42 template<int> struct RasType;
43
44 template<> struct RasType<H225_RasMessage::e_gatekeeperRequest> {
45         typedef H225_GatekeeperRequest Type;
46 };
47 template<> struct RasType<H225_RasMessage::e_gatekeeperConfirm> {
48         typedef H225_GatekeeperConfirm Type;
49 };
50 template<> struct RasType<H225_RasMessage::e_gatekeeperReject> {
51         typedef H225_GatekeeperReject Type;
52 };
53 template<> struct RasType<H225_RasMessage::e_registrationRequest> {
54         typedef H225_RegistrationRequest Type;
55 };
56 template<> struct RasType<H225_RasMessage::e_registrationConfirm> {
57         typedef H225_RegistrationConfirm Type;
58 };
59 template<> struct RasType<H225_RasMessage::e_registrationReject> {
60         typedef H225_RegistrationReject Type;
61 };
62 template<> struct RasType<H225_RasMessage::e_unregistrationRequest> {
63         typedef H225_UnregistrationRequest Type;
64 };
65 template<> struct RasType<H225_RasMessage::e_unregistrationConfirm> {
66         typedef H225_UnregistrationConfirm Type;
67 };
68 template<> struct RasType<H225_RasMessage::e_unregistrationReject> {
69         typedef H225_UnregistrationReject Type;
70 };
71 template<> struct RasType<H225_RasMessage::e_admissionRequest> {
72         typedef H225_AdmissionRequest Type;
73 };
74 template<> struct RasType<H225_RasMessage::e_admissionConfirm> {
75         typedef H225_AdmissionConfirm Type;
76 };
77 template<> struct RasType<H225_RasMessage::e_admissionReject> {
78         typedef H225_AdmissionReject Type;
79 };
80 template<> struct RasType<H225_RasMessage::e_bandwidthRequest> {
81         typedef H225_BandwidthRequest Type;
82 };
83 template<> struct RasType<H225_RasMessage::e_bandwidthConfirm> {
84         typedef H225_BandwidthConfirm Type;
85 };
86 template<> struct RasType<H225_RasMessage::e_bandwidthReject> {
87         typedef H225_BandwidthReject Type;
88 };
89 template<> struct RasType<H225_RasMessage::e_disengageRequest> {
90         typedef H225_DisengageRequest Type;
91 };
92 template<> struct RasType<H225_RasMessage::e_disengageConfirm> {
93         typedef H225_DisengageConfirm Type;
94 };
95 template<> struct RasType<H225_RasMessage::e_disengageReject> {
96         typedef H225_DisengageReject Type;
97 };
98 template<> struct RasType<H225_RasMessage::e_locationRequest> {
99         typedef H225_LocationRequest Type;
100 };
101 template<> struct RasType<H225_RasMessage::e_locationConfirm> {
102         typedef H225_LocationConfirm Type;
103 };
104 template<> struct RasType<H225_RasMessage::e_locationReject> {
105         typedef H225_LocationReject Type;
106 };
107 template<> struct RasType<H225_RasMessage::e_infoRequest> {
108         typedef H225_InfoRequest Type;
109 };
110 template<> struct RasType<H225_RasMessage::e_infoRequestResponse> {
111         typedef H225_InfoRequestResponse Type;
112 };
113 template<> struct RasType<H225_RasMessage::e_nonStandardMessage> {
114         typedef H225_NonStandardMessage Type;
115 };
116 template<> struct RasType<H225_RasMessage::e_unknownMessageResponse> {
117         typedef H225_UnknownMessageResponse Type;
118 };
119 template<> struct RasType<H225_RasMessage::e_requestInProgress> {
120         typedef H225_RequestInProgress Type;
121 };
122 template<> struct RasType<H225_RasMessage::e_resourcesAvailableIndicate> {
123         typedef H225_ResourcesAvailableIndicate Type;
124 };
125 template<> struct RasType<H225_RasMessage::e_resourcesAvailableConfirm> {
126         typedef H225_ResourcesAvailableConfirm Type;
127 };
128 template<> struct RasType<H225_RasMessage::e_infoRequestAck> {
129         typedef H225_InfoRequestAck Type;
130 };
131 template<> struct RasType<H225_RasMessage::e_infoRequestNak> {
132         typedef H225_InfoRequestNak Type;
133 };
134 template<> struct RasType<H225_RasMessage::e_serviceControlIndication> {
135         typedef H225_ServiceControlIndication Type;
136 };
137 template<> struct RasType<H225_RasMessage::e_serviceControlResponse> {
138         typedef H225_ServiceControlResponse Type;
139 };
140
141 // associate a tag and its type
142 template<int I> struct TagInfo {
143         typedef RasTag<I> Tag;
144         typedef typename RasType<I>::Type Type;
145         enum {
146                 tag = I,
147                 // there are just 32 types of RAS, lucky!
148                 flag = (1 << I)
149         };
150 };
151
152 // a dirty trick, but works :p
153 template<int I> struct RequestInfo : public TagInfo<I> {
154         typedef RasTag<I+1> ConfirmTag;
155         typedef RasTag<I+2> RejectTag;
156         typedef typename RasType<I+1>::Type ConfirmType;
157         typedef typename RasType<I+2>::Type RejectType;
158 };
159
160 template<int I> struct ConfirmInfo : public TagInfo<I> {
161         typedef RasTag<I-1> RequestTag;
162         typedef typename RasType<I-1>::Type RequestType;
163 };
164
165 template<int I> struct RejectInfo : public TagInfo<I> {
166         typedef RasTag<I-2> RequestTag;
167         typedef typename RasType<I-2>::Type RequestType;
168 };
169
170 // define an RAS request and all its associated types
171 template<class> struct RasInfo;
172
173 // RAS request
174 template<> struct RasInfo<H225_GatekeeperRequest> : public RequestInfo<H225_RasMessage::e_gatekeeperRequest> {};
175 template<> struct RasInfo<H225_RegistrationRequest> : public RequestInfo<H225_RasMessage::e_registrationRequest> {};
176 template<> struct RasInfo<H225_UnregistrationRequest> : public RequestInfo<H225_RasMessage::e_unregistrationRequest> {};
177 template<> struct RasInfo<H225_AdmissionRequest> : public RequestInfo<H225_RasMessage::e_admissionRequest> {};
178 template<> struct RasInfo<H225_BandwidthRequest> : public RequestInfo<H225_RasMessage::e_bandwidthRequest> {};
179 template<> struct RasInfo<H225_DisengageRequest> : public RequestInfo<H225_RasMessage::e_disengageRequest> {};
180 template<> struct RasInfo<H225_LocationRequest> : public RequestInfo<H225_RasMessage::e_locationRequest> {};
181
182 // RAS confirm
183 template<> struct RasInfo<H225_GatekeeperConfirm> : public ConfirmInfo<H225_RasMessage::e_gatekeeperConfirm> {};
184 template<> struct RasInfo<H225_RegistrationConfirm> : public ConfirmInfo<H225_RasMessage::e_registrationConfirm> {};
185 template<> struct RasInfo<H225_UnregistrationConfirm> : public ConfirmInfo<H225_RasMessage::e_unregistrationConfirm> {};
186 template<> struct RasInfo<H225_AdmissionConfirm> : public ConfirmInfo<H225_RasMessage::e_admissionConfirm> {};
187 template<> struct RasInfo<H225_BandwidthConfirm> : public ConfirmInfo<H225_RasMessage::e_bandwidthConfirm> {};
188 template<> struct RasInfo<H225_DisengageConfirm> : public ConfirmInfo<H225_RasMessage::e_disengageConfirm> {};
189 template<> struct RasInfo<H225_LocationConfirm> : public ConfirmInfo<H225_RasMessage::e_locationConfirm> {};
190
191 // RAS reject
192 template<> struct RasInfo<H225_GatekeeperReject> : public RejectInfo<H225_RasMessage::e_gatekeeperReject> {};
193 template<> struct RasInfo<H225_RegistrationReject> : public RejectInfo<H225_RasMessage::e_registrationReject> {};
194 template<> struct RasInfo<H225_UnregistrationReject> : public RejectInfo<H225_RasMessage::e_unregistrationReject> {};
195 template<> struct RasInfo<H225_AdmissionReject> : public RejectInfo<H225_RasMessage::e_admissionReject> {};
196 template<> struct RasInfo<H225_BandwidthReject> : public RejectInfo<H225_RasMessage::e_bandwidthReject> {};
197 template<> struct RasInfo<H225_DisengageReject> : public RejectInfo<H225_RasMessage::e_disengageReject> {};
198 template<> struct RasInfo<H225_LocationReject> : public RejectInfo<H225_RasMessage::e_locationReject> {};
199
200 // others
201 template<> struct RasInfo<H225_InfoRequest> : public TagInfo<H225_RasMessage::e_infoRequest> {};
202 template<> struct RasInfo<H225_InfoRequestResponse> : public TagInfo<H225_RasMessage::e_infoRequestResponse> {
203         typedef RasTag<tag+6> ConfirmTag;
204         typedef RasTag<tag+7> RejectTag;
205         typedef RasType<tag+6>::Type ConfirmType;
206         typedef RasType<tag+7>::Type RejectType;
207 };
208 template<> struct RasInfo<H225_NonStandardMessage> : public TagInfo<H225_RasMessage::e_nonStandardMessage> {};
209 template<> struct RasInfo<H225_UnknownMessageResponse> : public TagInfo<H225_RasMessage::e_unknownMessageResponse> {};
210 template<> struct RasInfo<H225_RequestInProgress> : public TagInfo<H225_RasMessage::e_requestInProgress> {};
211 template<> struct RasInfo<H225_ResourcesAvailableIndicate> : public TagInfo<H225_RasMessage::e_resourcesAvailableIndicate> {
212         typedef RasTag<tag+1> ConfirmTag;
213         typedef RasType<tag+1>::Type ConfirmType;
214 };
215 template<> struct RasInfo<H225_ResourcesAvailableConfirm> : public TagInfo<H225_RasMessage::e_resourcesAvailableConfirm> {};
216 template<> struct RasInfo<H225_InfoRequestAck> : public TagInfo<H225_RasMessage::e_infoRequestAck> {};
217 template<> struct RasInfo<H225_InfoRequestNak> : public TagInfo<H225_RasMessage::e_infoRequestNak> {};
218 template<> struct RasInfo<H225_ServiceControlIndication> : public TagInfo<H225_RasMessage::e_serviceControlIndication> {};
219 template<> struct RasInfo<H225_ServiceControlResponse> : public TagInfo<H225_RasMessage::e_serviceControlResponse> {};
220
221 #endif // RASINFO_H