Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __TRANSFORM_INTERNAL_H__
00025 #define __TRANSFORM_INTERNAL_H__
00026
00027
00028 #include "HttpSM.h"
00029 #include "MIME.h"
00030 #include "Transform.h"
00031 #include "P_EventSystem.h"
00032
00033
00034 class TransformVConnection;
00035
00036
00037 class TransformTerminus:public VConnection
00038 {
00039 public:
00040 TransformTerminus(TransformVConnection * tvc);
00041
00042 int handle_event(int event, void *edata);
00043
00044 VIO *do_io_read(Continuation * c, int64_t nbytes, MIOBuffer * buf);
00045 VIO *do_io_write(Continuation * c, int64_t nbytes, IOBufferReader * buf, bool owner = false);
00046 void do_io_close(int lerrno = -1);
00047 void do_io_shutdown(ShutdownHowTo_t howto);
00048
00049 void reenable(VIO * vio);
00050
00051 public:
00052 TransformVConnection * m_tvc;
00053 VIO m_read_vio;
00054 VIO m_write_vio;
00055 volatile int m_event_count;
00056 volatile int m_deletable;
00057 volatile int m_closed;
00058 int m_called_user;
00059 };
00060
00061
00062 class TransformVConnection:public TransformVCChain
00063 {
00064 public:
00065 TransformVConnection(Continuation * cont, APIHook * hooks);
00066 ~TransformVConnection();
00067
00068 int handle_event(int event, void *edata);
00069
00070 VIO *do_io_read(Continuation * c, int64_t nbytes, MIOBuffer * buf);
00071 VIO *do_io_write(Continuation * c, int64_t nbytes, IOBufferReader * buf, bool owner = false);
00072 void do_io_close(int lerrno = -1);
00073 void do_io_shutdown(ShutdownHowTo_t howto);
00074
00075 void reenable(VIO * vio);
00076
00077
00078
00079
00080 virtual uint64_t backlog(uint64_t limit = UINT64_MAX);
00081
00082 public:
00083 VConnection * m_transform;
00084 Continuation *m_cont;
00085 TransformTerminus m_terminus;
00086 volatile int m_closed;
00087 };
00088
00089
00090 class TransformControl:public Continuation
00091 {
00092 public:
00093 TransformControl();
00094
00095 int handle_event(int event, void *edata);
00096
00097 public:
00098 APIHooks m_hooks;
00099 VConnection *m_tvc;
00100 IOBufferReader *m_read_buf;
00101 MIOBuffer *m_write_buf;
00102 };
00103
00104
00105 class NullTransform:public INKVConnInternal
00106 {
00107 public:
00108 NullTransform(ProxyMutex * mutex);
00109 ~NullTransform();
00110
00111 int handle_event(int event, void *edata);
00112
00113 public:
00114 MIOBuffer * m_output_buf;
00115 IOBufferReader *m_output_reader;
00116 VIO *m_output_vio;
00117 };
00118
00119
00120 class RangeTransform:public INKVConnInternal
00121 {
00122 public:
00123 RangeTransform(ProxyMutex * mutex, RangeRecord * ranges, int num_fields, HTTPHdr *transform_resp, const char * content_type, int content_type_len, int64_t content_length);
00124 ~RangeTransform();
00125
00126
00127 int handle_event(int event, void *edata);
00128
00129 void transform_to_range();
00130 void add_boundary(bool end);
00131 void add_sub_header(int index);
00132 void change_response_header();
00133 void calculate_output_cl();
00134
00135 public:
00136 MIOBuffer * m_output_buf;
00137 IOBufferReader *m_output_reader;
00138
00139
00140
00141 HTTPHdr *m_transform_resp;
00142 VIO *m_output_vio;
00143 int64_t m_range_content_length;
00144 int m_num_chars_for_cl;
00145 int m_num_range_fields;
00146 int m_current_range;
00147 const char *m_content_type;
00148 int m_content_type_len;
00149 RangeRecord *m_ranges;
00150 int64_t m_output_cl;
00151 int64_t m_done;
00152
00153 };
00154
00155 #define PREFETCH
00156 #ifdef PREFETCH
00157 class PrefetchProcessor
00158 {
00159 public:
00160 void start();
00161 };
00162
00163 extern PrefetchProcessor prefetchProcessor;
00164 #endif //PREFETCH
00165
00166 #endif