[Home] [Help]
PACKAGE BODY: APPS.HZ_HTTP_PKG
Source
1 PACKAGE BODY hz_http_pkg AS
2 /*$Header: ARHHTTPB.pls 115.9 2003/12/22 14:52:23 rchanamo noship $*/
3
4 /*PROCEDURE enable_debug;
5
6 PROCEDURE disable_debug;
7 */
8
9 --g_debug BOOLEAN := FALSE;
10 g_debug_count NUMBER := 0;
11 --------------------------------------
12 -- private procedures and functions
13 --------------------------------------
14 --
15 -- PRIVATE PROCEDURE enable_debug
16 -- DESCRIPTION
17 -- Turn on debug mode.
18 -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
19 -- HZ_UTILITY_V2PUB.enable_debug
20 -- MODIFICATION HISTORY
21 --------------------------------------
22 /*PROCEDURE enable_debug IS
23 BEGIN
24 g_debug_count := g_debug_count + 1;
25 IF g_debug_count = 1 THEN
26 IF fnd_profile.value('HZ_API_FILE_DEBUG_ON') = 'Y' OR
27 fnd_profile.value('HZ_API_DBMS_DEBUG_ON') = 'Y'
28 THEN
29 hz_utility_v2pub.enable_debug;
30 g_debug := TRUE;
31 END IF;
32 END IF;
33 END enable_debug;
34 */
35
36 --------------------------------------
37 -- PRIVATE PROCEDURE disable_debug
38 -- DESCRIPTION
39 -- Turn off debug mode.
40 -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
41 -- HZ_UTILITY_V2PUB.disable_debug
42 -- MODIFICATION HISTORY
43 --------------------------------------
44 /*PROCEDURE disable_debug IS
45 BEGIN
46 IF g_debug THEN
47 g_debug_count := g_debug_count - 1;
48 IF g_debug_count = 0 THEN
49 hz_utility_v2pub.disable_debug;
50 g_debug := FALSE;
51 END IF;
52 END IF;
53 END disable_debug;
54 */
55
56 PROCEDURE write(
57 c IN OUT NOCOPY utl_tcp.connection,
58 value VARCHAR2 := NULL)
59 IS
60 b pls_integer;
61 l_debug_prefix VARCHAR2(30) := '';
62 BEGIN
63 b := utl_tcp.write_line(c, value);
64 --enable_debug;
65 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
66 hz_utility_v2pub.debug(p_message=>'The text line transmitted :'|| substrb(value,1,200),
67 p_prefix =>l_debug_prefix,
68 p_msg_level=>fnd_log.level_statement);
69 END IF;
70 --disable_debug;
71 END write;
72
73 PROCEDURE write_header(
74 c IN OUT NOCOPY utl_tcp.connection,
75 name VARCHAR2,
76 value VARCHAR2)
77 IS
78 l_debug_prefix VARCHAR2(30) := '';
79 BEGIN
80 --enable_debug;
81 write(c, name||': '||value);
82 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
83 hz_utility_v2pub.debug(p_message=>'The header is :'|| substrb(name||': '||value,1,200),
84 p_prefix =>l_debug_prefix,
85 p_msg_level=>fnd_log.level_statement);
86 END IF;
87 --disable_debug;
88 END write_header;
89
90 PROCEDURE sethostpostpath(
91 url VARCHAR2,
92 proxyserver VARCHAR2,
93 proxyport NUMBER,
94 host OUT NOCOPY VARCHAR2,
95 port IN OUT NOCOPY NUMBER,
96 path OUT NOCOPY VARCHAR2)
97 IS
98 temp VARCHAR2(400);
99 slash NUMBER;
100 colon NUMBER;
101 BEGIN
102 IF proxyserver IS NOT NULL THEN
103 host := proxyserver;
104 port := proxyport;
105 path := url;
106 ELSE
107 temp := SUBSTRB(url, instrb(url, 'http://')+7);
108 slash := INSTRB(temp,'/');
109 IF slash > 0 THEN
110 host := SUBSTRB(temp, 1, slash-1);
111 path := SUBSTRB(temp, slash);
112 ELSE
113 host := temp;
114 path := '/';
115 END IF;
116 colon := instrb(host, ':');
117 IF colon > 0 THEN
118 port := TO_NUMBER(substrb(host, colon+1));
119 host := SUBSTRB(host,1,colon-1);
120 END IF;
121 END IF;
122 END sethostpostpath;
123
124 --------------------------------------
125 -- PRIVATE PROCEDURE get_response_from
126 -- DESCRIPTION
127 -- Gets an http-format response from the tcp socket and returns it into
128 -- resp. Non-http-formatted responses are returned into err_resp.
129 -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
130 -- hz_utility_v2pub
131 -- utl_tcp
132 -- MODIFICATION HISTORY
133 -- 03-27-2002 J. del Callar Added err_resp parameter to get non-http
134 -- error messages for inclusion in log.
135 --------------------------------------
136 PROCEDURE get_response_from (
137 c in OUT NOCOPY utl_tcp.connection,
138 resp OUT NOCOPY VARCHAR2,
139 content_type OUT NOCOPY VARCHAR2,
140 err_resp OUT NOCOPY VARCHAR2
141 ) IS
142 line VARCHAR2(32767);
143 firstline BOOLEAN := TRUE;
144 header BOOLEAN := TRUE;
145 success BOOLEAN := TRUE;
146 l_debug_prefix VARCHAR2(30) := '';
147 BEGIN
148 --enable_debug;
149 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
150 hz_utility_v2pub.debug(p_message=>'get_response_from (+)',
151 p_prefix=>l_debug_prefix,
152 p_msg_level=>fnd_log.level_procedure);
153 END IF;
154 WHILE success LOOP
155 line := utl_tcp.get_line(c);
156 IF firstline THEN
157 IF line NOT LIKE '%HTTP%200%OK%' THEN
158 success := FALSE;
159 err_resp := line || utl_tcp.get_text(c, 32767-LENGTHB(line));
160 END IF;
161 firstline := FALSE;
162 ELSE
163 IF header THEN
164 IF line = utl_tcp.crlf THEN
165 header := false;
166 ELSE
167 IF UPPER(line) LIKE 'CONTENT-TYPE:%' THEN
168 content_type := RTRIM(RTRIM(RTRIM(LTRIM(SUBSTRB(line,14))),fnd_global.local_chr(10)),fnd_global.local_chr(13));
169 END IF;
170 END IF;
171 ELSE
172 resp := resp || line;
173 END IF;
174 END IF;
175 END LOOP;
176 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
177 hz_utility_v2pub.debug(p_message=>'The response is :' || SUBSTRB(resp, 1, 200),
178 p_prefix =>l_debug_prefix,
179 p_msg_level=>fnd_log.level_statement);
180 hz_utility_v2pub.debug(p_message=>'The error response is :' || SUBSTRB(err_resp, 1, 200),
181 p_prefix =>l_debug_prefix,
182 p_msg_level=>fnd_log.level_statement);
183 END IF;
184 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
185 hz_utility_v2pub.debug(p_message=>'get_response_from (-)',
186 p_prefix=>l_debug_prefix,
187 p_msg_level=>fnd_log.level_procedure);
188 END IF;
189
190 --disable_debug;
191 EXCEPTION
192 WHEN utl_tcp.end_of_input THEN
193 IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
194 hz_utility_v2pub.debug(p_message=>'The response is :' || SUBSTRB(resp, 1, 200),
195 p_prefix=>'ERROR',
196 p_msg_level=>fnd_log.level_error);
197 END IF;
198 IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
199 hz_utility_v2pub.debug(p_message=>'The error response is :' || SUBSTRB(err_resp, 1, 200),
200 p_prefix=>'ERROR',
201 p_msg_level=>fnd_log.level_error);
202 END IF;
203 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
204 hz_utility_v2pub.debug(p_message=>'get_response_from (-)',
205 p_prefix=>l_debug_prefix,
206 p_msg_level=>fnd_log.level_procedure);
207 END IF;
208 --disable_debug;
209 END get_response_from;
210
211 --------------------------------------
212 -- PUBLIC PROCEDURE post
213 -- DESCRIPTION
214 -- Implements HTTP post functionality.
215 -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
216 -- hz_utility_v2pub
217 -- utl_tcp
218 -- MODIFICATION HISTORY
219 -- 07-22-2002 J. del Callar Added for backward compatibility.
220 --------------------------------------
221 PROCEDURE post(
222 doc VARCHAR2,
223 content_type VARCHAR2,
224 url VARCHAR2,
225 resp OUT NOCOPY VARCHAR2,
226 resp_content_type OUT NOCOPY VARCHAR2,
227 proxyserver VARCHAR2 := NULL,
228 proxyport NUMBER := 80,
229 x_return_status IN OUT NOCOPY VARCHAR2,
230 x_msg_count IN OUT NOCOPY NUMBER,
231 x_msg_data IN OUT NOCOPY VARCHAR2)
232 IS
233 l_err_resp VARCHAR2(32767) := NULL;
234 BEGIN
235 x_return_status := fnd_api.g_ret_sts_success;
236
237 post(doc,
238 content_type,
239 url,
240 resp,
241 resp_content_type,
242 proxyserver,
243 proxyport,
244 l_err_resp,
245 x_return_status,
246 x_msg_count,
247 x_msg_data);
248
249 IF l_err_resp IS NOT NULL THEN
250 x_return_status := fnd_api.g_ret_sts_unexp_error;
251 fnd_message.set_name('AR','HZ_HTTP_POST_FAILED');
252 fnd_message.set_token('RETRY', '1');
253 fnd_message.set_token('LASTMSG', NVL(l_err_resp, '<NULL>'));
254 fnd_msg_pub.add;
255 END IF;
256 END post;
257
258 --------------------------------------
259 -- PUBLIC PROCEDURE post
260 -- DESCRIPTION
261 -- Implements HTTP post functionality.
262 -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
263 -- hz_utility_v2pub
264 -- utl_tcp
265 -- MODIFICATION HISTORY
266 -- 03-27-2002 J. del Callar Added err_resp parameter to get non-http
267 -- error messages for inclusion in log.
268 --------------------------------------
269 PROCEDURE post(
270 doc VARCHAR2,
271 content_type VARCHAR2,
272 url VARCHAR2,
273 resp OUT NOCOPY VARCHAR2,
274 resp_content_type OUT NOCOPY VARCHAR2,
275 proxyserver VARCHAR2 := NULL,
276 proxyport NUMBER := 80,
277 err_resp OUT NOCOPY VARCHAR2,
278 x_return_status IN OUT NOCOPY VARCHAR2,
279 x_msg_count IN OUT NOCOPY NUMBER,
280 x_msg_data IN OUT NOCOPY VARCHAR2)
281 IS
282 port NUMBER := 80;
283 host VARCHAR2(400);
284 path VARCHAR2(400);
285 line VARCHAR2(32767);
286 firstline BOOLEAN := TRUE;
287 head BOOLEAN := TRUE;
288 success BOOLEAN := TRUE;
289 c utl_tcp.connection;
290 l_debug_prefix VARCHAR2(30) := '';
291 BEGIN
292 --enable_debug;
293 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
294 hz_utility_v2pub.debug(p_message=>'post (+)',
295 p_prefix=>l_debug_prefix,
296 p_msg_level=>fnd_log.level_procedure);
297 END IF;
298 sethostpostpath(url, proxyserver,proxyport, host, port, path);
299 c := utl_tcp.open_connection(host,port);
300 write(c, 'POST '|| path||' HTTP/1.0');
301 write_header(c, 'Content-Type', content_type);
302 write_header(c, 'Content-Length', lengthb(doc));
303 write(c);
304 write(c, doc);
305 utl_tcp.flush(c);
306 get_response_from(c, resp, resp_content_type, err_resp);
307 utl_tcp.close_connection(c);
308 -- Debug info.
309 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
310 hz_utility_v2pub.debug(p_message=>'post (-)',
311 p_prefix=>l_debug_prefix,
312 p_msg_level=>fnd_log.level_procedure);
313 END IF;
314 --disable_debug;
315 EXCEPTION
316 WHEN OTHERS THEN
317 IF c.remote_host IS NOT NULL THEN
318 utl_tcp.close_connection(c);
319 END IF;
320 fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
321 fnd_message.set_token('ERROR' ,SQLERRM);
322 fnd_msg_pub.add;
323 x_return_status := fnd_api.g_ret_sts_unexp_error;
324 --disable_debug;
325 END post;
326
327 --------------------------------------
328 -- PUBLIC PROCEDURE get
329 -- DESCRIPTION
330 -- Implements HTTP post functionality.
331 -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
332 -- hz_utility_v2pub
333 -- utl_tcp
334 -- MODIFICATION HISTORY
335 -- 07-22-2002 J. del Callar Added for backward compatibility.
336 --------------------------------------
337 PROCEDURE get(
338 url VARCHAR2,
339 resp OUT NOCOPY VARCHAR2,
340 resp_content_type OUT NOCOPY VARCHAR2,
341 proxyserver VARCHAR2 := NULL,
342 proxyport NUMBER := 80,
343 x_return_status IN OUT NOCOPY VARCHAR2,
344 x_msg_count IN OUT NOCOPY NUMBER,
345 x_msg_data IN OUT NOCOPY VARCHAR2)
346 IS
347 l_err_resp VARCHAR2(32767) := NULL;
348 BEGIN
349 x_return_status := fnd_api.g_ret_sts_success;
350
351 get(url,
352 resp,
353 resp_content_type,
354 proxyserver,
355 proxyport,
356 l_err_resp,
357 x_return_status,
358 x_msg_count,
359 x_msg_data);
360
361 IF l_err_resp IS NOT NULL THEN
362 x_return_status := fnd_api.g_ret_sts_unexp_error;
363 fnd_message.set_name('AR','HZ_HTTP_POST_FAILED');
364 fnd_message.set_token('RETRY', '1');
365 fnd_message.set_token('LASTMSG', NVL(l_err_resp, '<NULL>'));
366 fnd_msg_pub.add;
367 END IF;
368 END get;
369
370 --------------------------------------
371 -- PUBLIC PROCEDURE get
372 -- DESCRIPTION
373 -- Implements HTTP get functionality.
374 -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
375 -- hz_utility_v2pub
376 -- utl_tcp
377 -- MODIFICATION HISTORY
378 -- 03-27-2002 J. del Callar Added err_resp parameter to get non-http
379 -- error messages for inclusion in log.
380 --------------------------------------
381 PROCEDURE get(
382 url VARCHAR2,
383 resp OUT NOCOPY VARCHAR2,
384 resp_content_type OUT NOCOPY VARCHAR2,
385 proxyserver VARCHAR2 := NULL,
386 proxyport NUMBER := 80,
387 err_resp OUT NOCOPY VARCHAR2,
388 x_return_status IN OUT NOCOPY VARCHAR2,
389 x_msg_count IN OUT NOCOPY NUMBER,
390 x_msg_data IN OUT NOCOPY VARCHAR2)
391 IS
392 port NUMBER := 80;
393 host VARCHAR2(400);
394 path VARCHAR2(400);
395 msg VARCHAR2(32767);
396 c utl_tcp.connection;
397 l_debug_prefix VARCHAR2(30) := '';
398 BEGIN
399 --enable_debug;
400 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
401 hz_utility_v2pub.debug(p_message=>'get (+)',
402 p_prefix=>l_debug_prefix,
403 p_msg_level=>fnd_log.level_procedure);
404 END IF;
405 sethostpostpath( url, proxyserver, proxyport, host, port, port);
406 c := utl_tcp.open_connection(host, port);
407 write(c, 'GET '||path||' HTTP/1.0');
408 write(c);
409 utl_tcp.flush(c);
410 get_response_from(c, resp, resp_content_type, err_resp);
411 utl_tcp.close_connection(c);
412 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
413 hz_utility_v2pub.debug(p_message=>'get (-)',
414 p_prefix=>l_debug_prefix,
415 p_msg_level=>fnd_log.level_procedure);
416 END IF;
417 --disable_debug;
418 EXCEPTION
419 WHEN OTHERS THEN
420 IF c.remote_host IS NOT NULL THEN
421 utl_tcp.close_connection(c);
422 END IF;
423 fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
424 fnd_message.set_token('ERROR' ,SQLERRM);
425 fnd_msg_pub.add;
426 x_return_status := fnd_api.g_ret_sts_unexp_error;
427 --disable_debug;
428 END get;
429
430 END hz_http_pkg;