1 : //=============================================================================
2 : // File <$/src/cpp/prod/protocol/giop/giop.cpp>
3 : // This file is part of YaOrb : Yet Another Object Request Broker,
4 : // Copyright (c) 2000-2003, Marc Alff.
5 : //
6 : // This program is free software; you can redistribute it and/or
7 : // modify it under the terms of the GNU General Public License
8 : // as published by the Free Software Foundation; either version 2
9 : // of the License, or (at your option) any later version.
10 : //
11 : // This program is distributed in the hope that it will be useful,
12 : // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 : // GNU General Public License for more details.
15 : //
16 : // You should have received a copy of the GNU General Public License
17 : // along with this program; if not, write to the Free Software
18 : // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 : //
20 : //=============================================================================
21 :
22 : #include <stdio.h>
23 : #include <yaorb/CORBA.h>
24 : #include <yaorb/YAORB.h>
25 :
26 : #include "src/cpp/prod/tool/Assert.h"
27 :
28 : #include "src/cpp/prod/tool/DEVELOPMENT.h"
29 :
30 : #include "src/cpp/prod/protocol/giop/message_header.h"
31 : #include "src/cpp/prod/protocol/giop/giop.h"
32 : #include "src/cpp/prod/protocol/giop/request_header_12.h"
33 : #include "src/cpp/prod/protocol/giop/reply_12.h"
34 : #include "src/cpp/prod/protocol/giop/cancel_request_12.h"
35 : #include "src/cpp/prod/protocol/giop/locate_request_12.h"
36 : #include "src/cpp/prod/protocol/giop/locate_reply_12.h"
37 : #include "src/cpp/prod/protocol/giop/fragment_12.h"
38 :
39 31 : GIOPMessage::GIOPMessage()
40 31 : : _header(), _body()
41 : {
42 31 : _body._no_body = NULL ;
43 : }
44 :
45 31 : GIOPMessage::~GIOPMessage()
46 : {
47 31 : switch (_header.GetGIOP12MessageType())
48 : {
49 : case GIOPRequest_type:
50 : {
51 17 : if (_body._request != NULL)
52 : {
53 10 : delete _body._request ;
54 : }
55 : break ;
56 : }
57 : case GIOPReply_type:
58 : {
59 4 : if (_body._reply != NULL)
60 : {
61 2 : delete _body._reply ;
62 : }
63 : break ;
64 : }
65 : case GIOPCancelRequest_type:
66 : {
67 1 : if (_body._cancelRequest != NULL)
68 : {
69 1 : delete _body._cancelRequest ;
70 : }
71 : break ;
72 : }
73 : case GIOPLocateRequest_type:
74 : {
75 1 : if (_body._locateRequest != NULL)
76 : {
77 1 : delete _body._locateRequest ;
78 : }
79 : break ;
80 : }
81 : case GIOPLocateReply_type:
82 : {
83 2 : if (_body._locateReply != NULL)
84 : {
85 2 : delete _body._locateReply ;
86 : }
87 : break ;
88 : }
89 : case GIOPCloseConnection_type:
90 : case GIOPMessageError_type:
91 : {
92 : // NOTHING
93 : break ;
94 : }
95 : case GIOPFragment_type:
96 : {
97 2 : if (_body._fragment != NULL)
98 : {
99 0 : delete _body._fragment ;
100 : }
101 : break ;
102 : }
103 : }
104 0 : }
105 :
106 4 : void GIOPMessage::cdr(YAORB::CDR *cdrs)
107 : {
108 4 : cdr_header(cdrs) ;
109 4 : cdr_body(cdrs) ;
110 : }
111 :
112 35 : void GIOPMessage::cdr_header(YAORB::CDR *cdrs)
113 : {
114 35 : _header.cdr(cdrs) ;
115 : }
116 :
117 18 : void GIOPMessage::cdr_body(YAORB::CDR *cdrs)
118 : {
119 18 : YAORB::CDR_Op op = cdrs->Op() ;
120 :
121 18 : switch (_header.GetGIOP12MessageType())
122 : {
123 : case GIOPRequest_type:
124 : {
125 10 : if (op == YAORB::CDR_READ)
126 : {
127 6 : _body._request = new GIOP12RequestHeader() ;
128 : }
129 :
130 10 : _body._request->cdr(cdrs) ;
131 : break ;
132 : }
133 : case GIOPReply_type:
134 : {
135 2 : if (op == YAORB::CDR_READ)
136 : {
137 2 : _body._reply = new GIOP12ReplyMessage() ;
138 : }
139 2 : _body._reply->cdr(cdrs) ;
140 : break ;
141 : }
142 : case GIOPCancelRequest_type:
143 : {
144 1 : if (op == YAORB::CDR_READ)
145 : {
146 1 : _body._cancelRequest = new GIOP12CancelRequestMessage() ;
147 : }
148 1 : _body._cancelRequest->cdr(cdrs) ;
149 : break ;
150 : }
151 : case GIOPLocateRequest_type:
152 : {
153 1 : if (op == YAORB::CDR_READ)
154 : {
155 1 : _body._locateRequest = new GIOP12LocateRequestMessage() ;
156 : }
157 1 : _body._locateRequest->cdr(cdrs) ;
158 : break ;
159 : }
160 : case GIOPLocateReply_type:
161 : {
162 2 : if (op == YAORB::CDR_READ)
163 : {
164 2 : _body._locateReply = new GIOP12LocateReplyMessage() ;
165 : }
166 2 : _body._locateReply->cdr(cdrs) ;
167 : break ;
168 : }
169 : case GIOPCloseConnection_type:
170 : case GIOPMessageError_type:
171 : {
172 2 : _body._no_body = NULL ;
173 2 : break ;
174 : }
175 : case GIOPFragment_type:
176 : {
177 0 : if (op == YAORB::CDR_READ)
178 : {
179 0 : _body._fragment = new GIOP12FragmentMessage() ;
180 : }
181 0 : _body._fragment->cdr(cdrs) ;
182 : break ;
183 : }
184 : }
185 : }
186 :
187 : GIOPMessageHeader&
188 36 : GIOPMessage::GetHeader(void)
189 : {
190 : return _header ;
191 : }
192 :
193 : GIOP12RequestHeader*
194 5 : GIOPMessage::GetRequest(void) const
195 : {
196 : ASSERT(_header.GetGIOP12MessageType() == GIOPRequest_type) ;
197 :
198 : return _body._request ;
199 : }
200 :
201 : void
202 4 : GIOPMessage::SetRequest(GIOP12RequestHeader *msg)
203 : {
204 4 : _header.SetGIOP12MessageType(GIOPRequest_type) ;
205 4 : _body._request = msg ;
206 : }
207 :
208 : GIOP12ReplyMessage*
209 1 : GIOPMessage::GetReply(void) const
210 : {
211 : ASSERT(_header.GetGIOP12MessageType() == GIOPReply_type) ;
212 :
213 : return _body._reply ;
214 : }
215 :
216 : GIOP12CancelRequestMessage*
217 1 : GIOPMessage::GetCancelRequest(void) const
218 : {
219 : ASSERT(_header.GetGIOP12MessageType() == GIOPCancelRequest_type) ;
220 :
221 : return _body._cancelRequest ;
222 : }
223 :
224 : GIOP12LocateRequestMessage*
225 1 : GIOPMessage::GetLocateRequest(void) const
226 : {
227 : ASSERT(_header.GetGIOP12MessageType() == GIOPLocateRequest_type) ;
228 :
229 : return _body._locateRequest ;
230 : }
231 :
232 : GIOP12LocateReplyMessage*
233 1 : GIOPMessage::GetLocateReply(void) const
234 : {
235 : ASSERT(_header.GetGIOP12MessageType() == GIOPLocateReply_type) ;
236 :
237 : return _body._locateReply ;
238 : }
239 :
|