/[eiffelstudio]/branches/eth/eve/Src/contrib/library/network/http_client/src/spec/libcurl/libcurl_http_client_session.e
ViewVC logotype

Diff of /branches/eth/eve/Src/contrib/library/network/http_client/src/spec/libcurl/libcurl_http_client_session.e

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 92963 by jasonw, Fri Jul 5 06:01:58 2013 UTC revision 92964 by jasonw, Fri Sep 20 05:41:23 2013 UTC
# Line 31  feature -- Status report Line 31  feature -- Status report
31                          Result := curl.is_dynamic_library_exists                          Result := curl.is_dynamic_library_exists
32                  end                  end
33    
34  feature -- Basic operation  feature -- Custom
35    
36          custom (a_method: READABLE_STRING_8; a_path: READABLE_STRING_8; ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT): HTTP_CLIENT_RESPONSE          custom (a_method: READABLE_STRING_8; a_path: READABLE_STRING_8; ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT): HTTP_CLIENT_RESPONSE
37                  local                  local
# Line 41  feature -- Basic operation Line 41  feature -- Basic operation
41                          Result := req.execute                          Result := req.execute
42                  end                  end
43    
44            custom_with_upload_data (a_method: READABLE_STRING_8; a_path: READABLE_STRING_8; a_ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT; data: READABLE_STRING_8): HTTP_CLIENT_RESPONSE
45                    do
46                            Result := impl_custom (a_method, a_path, a_ctx, data, Void)
47                    end
48    
49            custom_with_upload_file (a_method: READABLE_STRING_8; a_path: READABLE_STRING_8; a_ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT; fn: READABLE_STRING_8): HTTP_CLIENT_RESPONSE
50                    do
51                            Result := impl_custom (a_method, a_path, a_ctx, Void, fn)
52                    end
53    
54    feature -- Helper
55    
56          get (a_path: READABLE_STRING_8; ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT): HTTP_CLIENT_RESPONSE          get (a_path: READABLE_STRING_8; ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT): HTTP_CLIENT_RESPONSE
57                  do                  do
58                          Result := custom ("GET", a_path, ctx)                          Result := custom ("GET", a_path, ctx)
# Line 53  feature -- Basic operation Line 65  feature -- Basic operation
65    
66          post (a_path: READABLE_STRING_8; a_ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT; data: detachable READABLE_STRING_8): HTTP_CLIENT_RESPONSE          post (a_path: READABLE_STRING_8; a_ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT; data: detachable READABLE_STRING_8): HTTP_CLIENT_RESPONSE
67                  do                  do
68                          Result := impl_post (a_path, a_ctx, data, Void)                          Result := impl_custom ("POST", a_path, a_ctx, data, Void)
69                  end                  end
70    
71          post_file (a_path: READABLE_STRING_8; a_ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT; fn: detachable READABLE_STRING_8): HTTP_CLIENT_RESPONSE          post_file (a_path: READABLE_STRING_8; a_ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT; fn: detachable READABLE_STRING_8): HTTP_CLIENT_RESPONSE
72                  do                  do
73                          Result := impl_post (a_path, a_ctx, Void, fn)                          Result := impl_custom ("POST", a_path, a_ctx, Void, fn)
74                    end
75    
76            patch (a_path: READABLE_STRING_8; a_ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT; data: detachable READABLE_STRING_8): HTTP_CLIENT_RESPONSE
77                    do
78                            Result := impl_custom ("PATCH", a_path, a_ctx, data, Void)
79                    end
80    
81            patch_file (a_path: READABLE_STRING_8; a_ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT; fn: detachable READABLE_STRING_8): HTTP_CLIENT_RESPONSE
82                    do
83                            Result := impl_custom ("PATCH", a_path, a_ctx, Void, fn)
84                  end                  end
85    
86          put (a_path: READABLE_STRING_8; a_ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT; data: detachable READABLE_STRING_8): HTTP_CLIENT_RESPONSE          put (a_path: READABLE_STRING_8; a_ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT; data: detachable READABLE_STRING_8): HTTP_CLIENT_RESPONSE
                 local  
                         ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT  
                         f: detachable RAW_FILE  
                         l_data: detachable READABLE_STRING_8  
87                  do                  do
88                          --| Quick and dirty hack using real file, for PUT uploaded data                          Result := impl_custom ("PUT", a_path, a_ctx, data, Void)
                         --| FIXME [2012-05-23]: better use libcurl for that purpose  
                         ctx := a_ctx  
                         if data /= Void then  
                                 if ctx = Void then  
                                         create ctx.make  
                                 end  
                                 ctx.set_upload_data (data)  
                         end  
                         if ctx /= Void then  
                                 l_data := ctx.upload_data  
                         end  
                         if l_data /= Void then  
                                 create f.make_open_write (create {FILE_NAME}.make_temporary_name)  
                                 f.put_string (l_data)  
                                 f.close  
                                 check ctx /= Void then  
                                         ctx.set_upload_data (Void)  
                                         ctx.set_upload_filename (f.path.name)  
                                 end  
                         end  
                         Result := custom ("PUT", a_path, ctx)  
                         if f /= Void then  
                                 f.delete  
                         end  
                         if l_data /= Void and a_ctx /= Void then  
                                 a_ctx.set_upload_filename (Void)  
                                 a_ctx.set_upload_data (l_data)  
                         end  
89                  end                  end
90    
91          put_file (a_path: READABLE_STRING_8; a_ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT; fn: detachable READABLE_STRING_8): HTTP_CLIENT_RESPONSE          put_file (a_path: READABLE_STRING_8; a_ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT; fn: detachable READABLE_STRING_8): HTTP_CLIENT_RESPONSE
                 local  
                         ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT  
92                  do                  do
93                          ctx := a_ctx                          Result := impl_custom ("PUT", a_path, a_ctx, Void, fn)
                         if fn /= Void then  
                                 if ctx = Void then  
                                         create ctx.make  
                                 end  
                                 ctx.set_upload_filename (fn)  
                         end  
                         Result := custom ("PUT", a_path, ctx)  
94                  end                  end
95    
96          delete (a_path: READABLE_STRING_8; ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT): HTTP_CLIENT_RESPONSE          delete (a_path: READABLE_STRING_8; ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT): HTTP_CLIENT_RESPONSE
# Line 119  feature -- Basic operation Line 100  feature -- Basic operation
100    
101  feature {NONE} -- Implementation  feature {NONE} -- Implementation
102    
103          impl_post (a_path: READABLE_STRING_8; a_ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT; data: detachable READABLE_STRING_8; fn: detachable READABLE_STRING_8): HTTP_CLIENT_RESPONSE          impl_custom (a_method: READABLE_STRING_8; a_path: READABLE_STRING_8; a_ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT; data: detachable READABLE_STRING_8; fn: detachable READABLE_STRING_8): HTTP_CLIENT_RESPONSE
104                  local                  local
105                          req: HTTP_CLIENT_REQUEST                          req: HTTP_CLIENT_REQUEST
106                          ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT                          ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT
107                            f: detachable RAW_FILE
108                            l_data: detachable READABLE_STRING_8
109                  do                  do
110                          ctx := a_ctx                          ctx := a_ctx
111                          if data /= Void then                          if data /= Void then
# Line 137  feature {NONE} -- Implementation Line 120  feature {NONE} -- Implementation
120                                  end                                  end
121                                  ctx.set_upload_filename (fn)                                  ctx.set_upload_filename (fn)
122                          end                          end
123                          create {LIBCURL_HTTP_CLIENT_REQUEST} req.make (base_url + a_path, "POST", Current, ctx)                          if ctx /= Void then
124                                    l_data := ctx.upload_data
125                                    if l_data /= Void and a_method.is_case_insensitive_equal_general ("PUT") then
126                                            --| Quick and dirty hack using real file, for PUT uploaded data
127                                            --| FIXME [2012-05-23]: better use libcurl for that purpose
128    
129                                            if ctx.has_upload_filename then
130                                                    check put_conflict_file_and_data: False end
131                                            end
132                                            create f.make_open_write (create {FILE_NAME}.make_temporary_name)
133                                            f.put_string (l_data)
134                                            f.close
135                                            check ctx /= Void then
136                                                    ctx.set_upload_data (Void)
137                                                    ctx.set_upload_filename (f.path.name)
138                                            end
139                                    end
140                            end
141    
142                            create {LIBCURL_HTTP_CLIENT_REQUEST} req.make (base_url + a_path, a_method, Current, ctx)
143                          Result := req.execute                          Result := req.execute
144    
145                            if f /= Void then
146                                    f.delete
147                            end
148                            if l_data /= Void and a_ctx /= Void then
149                                    a_ctx.set_upload_filename (Void)
150                                    a_ctx.set_upload_data (l_data)
151                            end
152                  end                  end
153    
154  feature {LIBCURL_HTTP_CLIENT_REQUEST} -- Curl implementation  feature {LIBCURL_HTTP_CLIENT_REQUEST} -- Curl implementation

Legend:
Removed from v.92963  
changed lines
  Added in v.92964

  ViewVC Help
Powered by ViewVC 1.1.23