DBA Data[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;