AtxHttp.h

00001 /*****************************************************************
00002 |
00003 |   Atomix - HTTP
00004 |
00005 |   (c) 2002-2006 Gilles Boccon-Gibod
00006 |   Author: Gilles Boccon-Gibod (bok@bok.net)
00007 |
00008  ****************************************************************/
00009 
00010 #ifndef _ATX_HTTP_H_
00011 #define _ATX_HTTP_H_
00012 
00013 /*----------------------------------------------------------------------
00014 |    includes
00015 +---------------------------------------------------------------------*/
00016 #include "AtxTypes.h"
00017 #include "AtxDefs.h"
00018 #include "AtxResults.h"
00019 #include "AtxUtils.h"
00020 #include "AtxInterfaces.h"
00021 #include "AtxProperties.h"
00022 #include "AtxStreams.h"
00023 
00024 /*----------------------------------------------------------------------
00025 |    types
00026 +---------------------------------------------------------------------*/
00027 typedef struct ATX_HttpClient   ATX_HttpClient;
00028 typedef struct ATX_HttpMessage  ATX_HttpMessage;
00029 typedef struct ATX_HttpRequest  ATX_HttpRequest;
00030 typedef struct ATX_HttpResponse ATX_HttpResponse;
00031 
00032 /*----------------------------------------------------------------------
00033 |    constants
00034 +---------------------------------------------------------------------*/
00035 #define ATX_HTTP_METHOD_GET     "GET"
00036 #define ATX_HTTP_METHOD_HEAD    "HEAD"
00037 #define ATX_HTTP_METHOD_POST    "POST"
00038 
00039 #define ATX_HTTP_CLIENT_OPTION_FOLLOW_REDIRECT "FollowRedirect"
00040 
00041 /*----------------------------------------------------------------------
00042 |    prototypes
00043 +---------------------------------------------------------------------*/
00044 #ifdef __cplusplus
00045 extern "C" {
00046 #endif /* __cplusplus */
00047 
00048 extern ATX_Result 
00049 ATX_HttpMessage_Create(ATX_HttpMessage** message);
00050 
00051 extern ATX_Result
00052 ATX_HttpMessage_Destroy(ATX_HttpMessage* message);
00053 
00054 extern ATX_Result
00055 ATX_HttpMessage_SetHeader(ATX_HttpMessage* message,
00056                           ATX_CString      name, 
00057                           ATX_CString      value);
00058 
00059 extern const ATX_String*
00060 ATX_HttpMessage_GetHeader(const ATX_HttpMessage* message,
00061                           ATX_CString            name);
00062 
00063 extern ATX_Result
00064 ATX_HttpMessage_SetProtocol(ATX_HttpMessage* message,
00065                             ATX_CString      protocol);
00066 
00067 extern const ATX_String*
00068 ATX_HttpMessage_GetProtocol(const ATX_HttpMessage* message);
00069 
00070 extern ATX_Result
00071 ATX_HttpMessage_SetBody(ATX_HttpMessage* message,
00072                         ATX_InputStream* stream,
00073                         ATX_Size         content_length);
00074 
00075 extern ATX_Result
00076 ATX_HttpMessage_GetBody(const ATX_HttpMessage* message,
00077                         ATX_InputStream*       stream,
00078                         ATX_Size*              content_length);
00079 
00080 extern ATX_Result
00081 ATX_HttpRequest_Create(ATX_CString       method, 
00082                        ATX_CString       uri,
00083                        ATX_HttpRequest** request);
00084 
00085 extern ATX_Result
00086 ATX_HttpRequest_Destroy(ATX_HttpRequest* request);
00087 
00088 extern const ATX_String*
00089 ATX_HttpRequest_GetMethod(const ATX_HttpRequest* request);
00090 
00091 extern ATX_Result
00092 ATX_HttpRequest_SetMethod(ATX_HttpRequest* request,
00093                           ATX_CString      method);
00094 
00095 extern ATX_Result
00096 ATX_HttpRequest_Emit(const ATX_HttpRequest* request,
00097                      ATX_OutputStream*      stream);
00098 
00099 extern ATX_Result
00100 ATX_HttpResponse_CreateFromStream(ATX_InputStream*   stream,
00101                                   ATX_HttpResponse** request);
00102 
00103 extern ATX_Result
00104 ATX_HttpResponse_Destroy(ATX_HttpResponse* response);
00105 
00106 extern ATX_Result
00107 ATX_HttpResponse_Emit(const ATX_HttpResponse* response, 
00108                       ATX_OutputStream*       stream);
00109 
00110 extern ATX_UInt32
00111 ATX_HttpResponse_GetStatusCode(const ATX_HttpResponse* response);
00112 
00113 extern const ATX_String*
00114 ATX_HttpResponse_GetReasonPhrase(const ATX_HttpResponse* response);
00115 
00116 extern ATX_Result
00117 ATX_HttpClient_Create(ATX_HttpClient** client);
00118 
00119 extern ATX_Result
00120 ATX_HttpClient_Destroy(ATX_HttpClient* client);
00121 
00122 extern ATX_Result
00123 ATX_HttpClient_SetOptionBool(ATX_HttpClient* client, 
00124                              ATX_CString     option,
00125                              ATX_Boolean     value);
00126 
00127 extern ATX_Result
00128 ATX_HttpClient_GetOptionBool(const ATX_HttpClient* client, 
00129                              ATX_CString           option,
00130                              ATX_Boolean*          value);
00131 
00132 extern ATX_Result 
00133 ATX_HttpClient_SendRequest(ATX_HttpClient*    client,
00134                            ATX_HttpRequest*   request,
00135                            ATX_HttpResponse** response);
00136 
00137 #ifdef __cplusplus
00138 }
00139 #endif
00140 
00141 #endif /* _ATX_HTTP_H_ */