DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_HTTP_PKG

Source


1 PACKAGE BODY hz_http_pkg AS
2 /*$Header: ARHHTTPB.pls 120.5 2010/12/14 13:11:35 rgokavar ship $*/
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,4000),
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,4000),
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, 4000),
178 			          p_prefix =>l_debug_prefix,
179 			          p_msg_level=>fnd_log.level_statement);
180        IF err_resp IS NOT NULL THEN
181 	    hz_utility_v2pub.debug(p_message=>'The error response is :' || SUBSTRB(err_resp, 1, 4000),
182 			          p_prefix =>l_debug_prefix,
183 			          p_msg_level=>fnd_log.level_statement);
184 		END IF;
185     END IF;
186     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
187 	hz_utility_v2pub.debug(p_message=>'get_response_from (-)',
188 	                       p_prefix=>l_debug_prefix,
189 			       p_msg_level=>fnd_log.level_procedure);
190     END IF;
191 
192     --disable_debug;
193   EXCEPTION
194     WHEN utl_tcp.end_of_input THEN
195     IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
196 	    hz_utility_v2pub.debug(p_message=>'The response is :' || SUBSTRB(resp, 1, 4000),
197 	                           p_prefix=>'ERROR',
198 			           p_msg_level=>fnd_log.level_error);
199     END IF;
200     IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
201 	    hz_utility_v2pub.debug(p_message=>'The error response is :' || SUBSTRB(err_resp, 1, 4000),
202 	                           p_prefix=>'ERROR',
203 			           p_msg_level=>fnd_log.level_error);
204     END IF;
205     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
206 	hz_utility_v2pub.debug(p_message=>'get_response_from (-)',
207 	                       p_prefix=>l_debug_prefix,
208 			       p_msg_level=>fnd_log.level_procedure);
209     END IF;
210          --disable_debug;
211   END get_response_from;
212 
213   --------------------------------------
214   -- PUBLIC PROCEDURE post
215   -- DESCRIPTION
216   --   Implements HTTP post functionality.
217   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
218   --   hz_utility_v2pub
219   --   utl_tcp
220   -- MODIFICATION HISTORY
221   --   07-22-2002 J. del Callar Added for backward compatibility.
222   --------------------------------------
223   PROCEDURE post(
224     doc                    VARCHAR2,
225     content_type           VARCHAR2,
226     url                    VARCHAR2,
227     resp               OUT NOCOPY VARCHAR2,
228     resp_content_type  OUT NOCOPY VARCHAR2,
229     proxyserver            VARCHAR2 := NULL,
230     proxyport              NUMBER   := 80,
231     x_return_status IN OUT NOCOPY VARCHAR2,
232     x_msg_count     IN OUT NOCOPY NUMBER,
233     x_msg_data      IN OUT NOCOPY VARCHAR2)
234   IS
235     l_err_resp VARCHAR2(32767) := NULL;
236   BEGIN
237     x_return_status := fnd_api.g_ret_sts_success;
238 
239     post(doc,
240          content_type,
241          url,
242          resp,
243          resp_content_type,
244          proxyserver,
245          proxyport,
246          l_err_resp,
247          x_return_status,
248          x_msg_count,
249          x_msg_data);
250 
251     IF l_err_resp IS NOT NULL THEN
252       x_return_status := fnd_api.g_ret_sts_unexp_error;
253       fnd_message.set_name('AR','HZ_HTTP_POST_FAILED');
254       fnd_message.set_token('RETRY', '1');
255       fnd_message.set_token('LASTMSG', NVL(l_err_resp, '<NULL>'));
256       fnd_msg_pub.add;
257     END IF;
258   END post;
259 
260   --------------------------------------
261   -- PUBLIC PROCEDURE post
262   -- DESCRIPTION
263   --   Implements HTTP post functionality.
264   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
265   --   hz_utility_v2pub
266   --   utl_tcp
267   -- MODIFICATION HISTORY
268   --   03-27-2002 J. del Callar Added err_resp parameter to get non-http
269   --                            error messages for inclusion in log.
270   --------------------------------------
271   PROCEDURE post(
272     doc                    VARCHAR2,
273     content_type           VARCHAR2,
274     url                    VARCHAR2,
275     resp               OUT NOCOPY VARCHAR2,
276     resp_content_type  OUT NOCOPY VARCHAR2,
277     proxyserver            VARCHAR2 := NULL,
278     proxyport              NUMBER   := 80,
279     err_resp           OUT NOCOPY VARCHAR2,
280     x_return_status IN OUT NOCOPY VARCHAR2,
281     x_msg_count     IN OUT NOCOPY NUMBER,
282     x_msg_data      IN OUT NOCOPY VARCHAR2)
283   IS
284     port         NUMBER := 80;
285     host         VARCHAR2(400);
286     path         VARCHAR2(400);
287     line         VARCHAR2(32767);
288     firstline    BOOLEAN := TRUE;
289     head         BOOLEAN := TRUE;
290     success      BOOLEAN := TRUE;
291     c            utl_tcp.connection;
292     l_debug_prefix	VARCHAR2(30) := '';
293   BEGIN
294     --enable_debug;
295     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
296 	hz_utility_v2pub.debug(p_message=>'post (+)',
297 	                       p_prefix=>l_debug_prefix,
298 			       p_msg_level=>fnd_log.level_procedure);
299     END IF;
300     sethostpostpath(url, proxyserver,proxyport,  host, port, path);
301     c := utl_tcp.open_connection(host,port);
302     write(c, 'POST '|| path||' HTTP/1.0');
303     write_header(c, 'Content-Type', content_type);
304     write_header(c, 'Content-Length', lengthb(doc));
305     write(c);
306     write(c, doc);
307     utl_tcp.flush(c);
308     get_response_from(c, resp, resp_content_type, err_resp);
309     utl_tcp.close_connection(c);
310     -- Debug info.
311     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
312 	hz_utility_v2pub.debug(p_message=>'post (-)',
313 	                       p_prefix=>l_debug_prefix,
314 			       p_msg_level=>fnd_log.level_procedure);
315     END IF;
316     --disable_debug;
317   EXCEPTION
318     WHEN OTHERS THEN
319       IF c.remote_host IS NOT NULL THEN
320         utl_tcp.close_connection(c);
321       END IF;
322       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
323       fnd_message.set_token('ERROR' ,SQLERRM);
324       fnd_msg_pub.add;
325       x_return_status := fnd_api.g_ret_sts_unexp_error;
326       --disable_debug;
327   END post;
328 
329   --------------------------------------
330   -- PUBLIC PROCEDURE get
331   -- DESCRIPTION
332   --   Implements HTTP post functionality.
333   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
334   --   hz_utility_v2pub
335   --   utl_tcp
336   -- MODIFICATION HISTORY
337   --   07-22-2002 J. del Callar Added for backward compatibility.
338   --------------------------------------
339   PROCEDURE get(
340     url                    VARCHAR2,
341     resp               OUT NOCOPY VARCHAR2,
342     resp_content_type  OUT NOCOPY VARCHAR2,
343     proxyserver            VARCHAR2 := NULL,
344     proxyport              NUMBER   := 80,
345     x_return_status IN OUT NOCOPY VARCHAR2,
346     x_msg_count     IN OUT NOCOPY NUMBER,
347     x_msg_data      IN OUT NOCOPY VARCHAR2)
348   IS
349     l_err_resp VARCHAR2(32767) := NULL;
350   BEGIN
351     x_return_status := fnd_api.g_ret_sts_success;
352 
353     get(url,
354         resp,
355         resp_content_type,
356         proxyserver,
357         proxyport,
358         l_err_resp,
359         x_return_status,
360         x_msg_count,
361         x_msg_data);
362 
363     IF l_err_resp IS NOT NULL THEN
364       x_return_status := fnd_api.g_ret_sts_unexp_error;
365       fnd_message.set_name('AR','HZ_HTTP_POST_FAILED');
366       fnd_message.set_token('RETRY', '1');
367       fnd_message.set_token('LASTMSG', NVL(l_err_resp, '<NULL>'));
368       fnd_msg_pub.add;
369     END IF;
370   END get;
371 
372   --------------------------------------
373   -- PUBLIC PROCEDURE get
374   -- DESCRIPTION
375   --   Implements HTTP get functionality.
376   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
377   --   hz_utility_v2pub
378   --   utl_tcp
379   -- MODIFICATION HISTORY
380   --   03-27-2002 J. del Callar Added err_resp parameter to get non-http
381   --                            error messages for inclusion in log.
382   --------------------------------------
383   PROCEDURE get(
384     url                    VARCHAR2,
385     resp               OUT NOCOPY VARCHAR2,
386     resp_content_type  OUT NOCOPY VARCHAR2,
387     proxyserver            VARCHAR2 := NULL,
388     proxyport              NUMBER   := 80,
389     err_resp           OUT NOCOPY VARCHAR2,
390     x_return_status IN OUT NOCOPY VARCHAR2,
391     x_msg_count     IN OUT NOCOPY NUMBER,
392     x_msg_data      IN OUT NOCOPY VARCHAR2)
393   IS
394     port   NUMBER := 80;
395     host   VARCHAR2(400);
396     path   VARCHAR2(400);
397     msg    VARCHAR2(32767);
398     c      utl_tcp.connection;
399     l_debug_prefix	VARCHAR2(30) := '';
400   BEGIN
401     --enable_debug;
402     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
403 	hz_utility_v2pub.debug(p_message=>'get (+)',
404 	                       p_prefix=>l_debug_prefix,
405 			       p_msg_level=>fnd_log.level_procedure);
406     END IF;
407     sethostpostpath( url, proxyserver, proxyport, host, port, port);
408     c := utl_tcp.open_connection(host, port);
409     write(c, 'GET '||path||' HTTP/1.0');
410     write(c);
411     utl_tcp.flush(c);
412     get_response_from(c, resp, resp_content_type, err_resp);
413     utl_tcp.close_connection(c);
414     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
415 	hz_utility_v2pub.debug(p_message=>'get (-)',
416 	                       p_prefix=>l_debug_prefix,
417 			       p_msg_level=>fnd_log.level_procedure);
418     END IF;
419     --disable_debug;
420   EXCEPTION
421     WHEN OTHERS THEN
422       IF c.remote_host IS NOT NULL THEN
423         utl_tcp.close_connection(c);
424       END IF;
425       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
426       fnd_message.set_token('ERROR' ,SQLERRM);
427       fnd_msg_pub.add;
428       x_return_status := fnd_api.g_ret_sts_unexp_error;
429       --disable_debug;
430   END get;
431 
432 END hz_http_pkg;