xref: /aosp_15_r20/external/curl/packages/OS400/rpg-examples/SIMPLE1 (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker      * Curl simple URL request
2*6236dae4SAndroid Build Coastguard Worker      *
3*6236dae4SAndroid Build Coastguard Worker     h DFTACTGRP(*NO) ACTGRP(*NEW)
4*6236dae4SAndroid Build Coastguard Worker     h OPTION(*NOSHOWCPY)
5*6236dae4SAndroid Build Coastguard Worker     h BNDDIR('CURL')
6*6236dae4SAndroid Build Coastguard Worker      *
7*6236dae4SAndroid Build Coastguard Worker      **************************************************************************
8*6236dae4SAndroid Build Coastguard Worker      *                                  _   _ ____  _
9*6236dae4SAndroid Build Coastguard Worker      *  Project                     ___| | | |  _ \| |
10*6236dae4SAndroid Build Coastguard Worker      *                             / __| | | | |_) | |
11*6236dae4SAndroid Build Coastguard Worker      *                            | (__| |_| |  _ <| |___
12*6236dae4SAndroid Build Coastguard Worker      *                             \___|\___/|_| \_\_____|
13*6236dae4SAndroid Build Coastguard Worker      *
14*6236dae4SAndroid Build Coastguard Worker      * Copyright (C) Daniel Stenberg, <[email protected]>, et al.
15*6236dae4SAndroid Build Coastguard Worker      *
16*6236dae4SAndroid Build Coastguard Worker      * This software is licensed as described in the file COPYING, which
17*6236dae4SAndroid Build Coastguard Worker      * you should have received as part of this distribution. The terms
18*6236dae4SAndroid Build Coastguard Worker      * are also available at https://curl.se/docs/copyright.html.
19*6236dae4SAndroid Build Coastguard Worker      *
20*6236dae4SAndroid Build Coastguard Worker      * You may opt to use, copy, modify, merge, publish, distribute and/or sell
21*6236dae4SAndroid Build Coastguard Worker      * copies of the Software, and permit persons to whom the Software is
22*6236dae4SAndroid Build Coastguard Worker      * furnished to do so, under the terms of the COPYING file.
23*6236dae4SAndroid Build Coastguard Worker      *
24*6236dae4SAndroid Build Coastguard Worker      * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF
25*6236dae4SAndroid Build Coastguard Worker      * ANY KIND, either express or implied.
26*6236dae4SAndroid Build Coastguard Worker      *
27*6236dae4SAndroid Build Coastguard Worker      * SPDX-License-Identifier: curl
28*6236dae4SAndroid Build Coastguard Worker      *
29*6236dae4SAndroid Build Coastguard Worker      **************************************************************************
30*6236dae4SAndroid Build Coastguard Worker      *
31*6236dae4SAndroid Build Coastguard Worker      /include H,CURL.INC
32*6236dae4SAndroid Build Coastguard Worker      *
33*6236dae4SAndroid Build Coastguard Worker      * Simple example to request the URL given as command line parameter and
34*6236dae4SAndroid Build Coastguard Worker      * output its response.
35*6236dae4SAndroid Build Coastguard Worker      *
36*6236dae4SAndroid Build Coastguard Worker     d                 pi
37*6236dae4SAndroid Build Coastguard Worker     d url                          120
38*6236dae4SAndroid Build Coastguard Worker      *
39*6236dae4SAndroid Build Coastguard Worker     d urllen          s             10u 0                                      URL length
40*6236dae4SAndroid Build Coastguard Worker      *
41*6236dae4SAndroid Build Coastguard Worker      **************************************************************************
42*6236dae4SAndroid Build Coastguard Worker      *
43*6236dae4SAndroid Build Coastguard Worker     c                   eval      urllen = trimmed_length(url: %len(url))
44*6236dae4SAndroid Build Coastguard Worker      *
45*6236dae4SAndroid Build Coastguard Worker      * Do the curl stuff.
46*6236dae4SAndroid Build Coastguard Worker      *
47*6236dae4SAndroid Build Coastguard Worker     c                   callp     curl_global_init(CURL_GLOBAL_ALL)
48*6236dae4SAndroid Build Coastguard Worker     c                   callp     main
49*6236dae4SAndroid Build Coastguard Worker     c                   callp     curl_global_cleanup()
50*6236dae4SAndroid Build Coastguard Worker     c                   seton                                            lr    Exit
51*6236dae4SAndroid Build Coastguard Worker      *
52*6236dae4SAndroid Build Coastguard Worker      **************************************************************************
53*6236dae4SAndroid Build Coastguard Worker      * Main procedure: do the curl job.
54*6236dae4SAndroid Build Coastguard Worker      **************************************************************************
55*6236dae4SAndroid Build Coastguard Worker      *
56*6236dae4SAndroid Build Coastguard Worker     p main            b
57*6236dae4SAndroid Build Coastguard Worker     d main            pi
58*6236dae4SAndroid Build Coastguard Worker      *
59*6236dae4SAndroid Build Coastguard Worker     d h               s               *                                        Easy handle
60*6236dae4SAndroid Build Coastguard Worker     d result          s                   like(CURLcode)                       Curl return code
61*6236dae4SAndroid Build Coastguard Worker     d                                     inz(CURLE_OUT_OF_MEMORY)
62*6236dae4SAndroid Build Coastguard Worker     d errmsgp         s               *                                        Error string pointer
63*6236dae4SAndroid Build Coastguard Worker     d response        s             52                                         For error display
64*6236dae4SAndroid Build Coastguard Worker      *
65*6236dae4SAndroid Build Coastguard Worker      * Create and fill curl handle.
66*6236dae4SAndroid Build Coastguard Worker      *
67*6236dae4SAndroid Build Coastguard Worker     c                   eval      h = curl_easy_init()
68*6236dae4SAndroid Build Coastguard Worker     c                   if        h <> *NULL
69*6236dae4SAndroid Build Coastguard Worker     c                   callp     curl_easy_setopt_ccsid(h: CURLOPT_URL:
70*6236dae4SAndroid Build Coastguard Worker     c                               %subst(url: 1: urllen): 0)
71*6236dae4SAndroid Build Coastguard Worker     c                   callp     curl_easy_setopt_long(h:
72*6236dae4SAndroid Build Coastguard Worker     c                               CURLOPT_FOLLOWLOCATION: 1)
73*6236dae4SAndroid Build Coastguard Worker      *
74*6236dae4SAndroid Build Coastguard Worker      * Perform the request.
75*6236dae4SAndroid Build Coastguard Worker      *
76*6236dae4SAndroid Build Coastguard Worker     c                   eval      result = curl_easy_perform(h)
77*6236dae4SAndroid Build Coastguard Worker     c                   callp     curl_easy_cleanup(h)                         Release handle
78*6236dae4SAndroid Build Coastguard Worker     c                   endif
79*6236dae4SAndroid Build Coastguard Worker      *
80*6236dae4SAndroid Build Coastguard Worker      * Check for error and report if some.
81*6236dae4SAndroid Build Coastguard Worker      *
82*6236dae4SAndroid Build Coastguard Worker     c                   if        result <> CURLE_OK
83*6236dae4SAndroid Build Coastguard Worker     c                   eval      errmsgp = curl_easy_strerror_ccsid(result: 0)
84*6236dae4SAndroid Build Coastguard Worker     c                   eval      response = %str(errmsgp)
85*6236dae4SAndroid Build Coastguard Worker     c                   dsply                   response
86*6236dae4SAndroid Build Coastguard Worker     c                   endif
87*6236dae4SAndroid Build Coastguard Worker     p main            e
88*6236dae4SAndroid Build Coastguard Worker      *
89*6236dae4SAndroid Build Coastguard Worker      **************************************************************************
90*6236dae4SAndroid Build Coastguard Worker      * Get the length of right-trimmed string
91*6236dae4SAndroid Build Coastguard Worker      **************************************************************************
92*6236dae4SAndroid Build Coastguard Worker      *
93*6236dae4SAndroid Build Coastguard Worker     p trimmed_length  b
94*6236dae4SAndroid Build Coastguard Worker     d trimmed_length  pi            10u 0
95*6236dae4SAndroid Build Coastguard Worker     d  string                   999999    const options(*varsize)
96*6236dae4SAndroid Build Coastguard Worker     d  length                       10u 0 value
97*6236dae4SAndroid Build Coastguard Worker      *
98*6236dae4SAndroid Build Coastguard Worker     d len             s             10u 0
99*6236dae4SAndroid Build Coastguard Worker      *
100*6236dae4SAndroid Build Coastguard Worker     c                   eval      len = %scan(X'00': string: 1: length)        Limit 0-terminated
101*6236dae4SAndroid Build Coastguard Worker     c                   if        len = 0
102*6236dae4SAndroid Build Coastguard Worker     c                   eval      len = length + 1
103*6236dae4SAndroid Build Coastguard Worker     c                   endif
104*6236dae4SAndroid Build Coastguard Worker     c                   if        len <= 1
105*6236dae4SAndroid Build Coastguard Worker     c                   return    0
106*6236dae4SAndroid Build Coastguard Worker     c                   endif
107*6236dae4SAndroid Build Coastguard Worker     c                   return    %checkr(' ': string: len - 1)                Trim right
108*6236dae4SAndroid Build Coastguard Worker     p trimmed_length  e
109