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 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 #include "libts.h"
00035 #include "Error.h"
00036 #include "HTTP.h"
00037 #include "ICP.h"
00038 #include "ICPlog.h"
00039 #include "LogAccessICP.h"
00040 #include "LogUtils.h"
00041 
00042 
00043 
00044 
00045 
00046 LogAccessICP::LogAccessICP(ICPlog * icp_log)
00047   : m_icp_log(icp_log)
00048 {
00049   ink_assert(m_icp_log != NULL);
00050 }
00051 
00052 
00053 
00054 
00055 
00056 LogAccessICP::~LogAccessICP()
00057 {
00058 }
00059 
00060 
00061 
00062 
00063 
00064 
00065 
00066 
00067 int
00068 LogAccessICP::marshal_client_host_ip(char *buf)
00069 {
00070   return marshal_ip(buf, m_icp_log->GetClientIP());
00071 }
00072 
00073 
00074 
00075 
00076 int
00077 LogAccessICP::marshal_client_host_port(char *buf)
00078 {
00079   if (buf) {
00080     uint16_t port = ntohs(m_icp_log->GetClientPort());
00081     marshal_int(buf, port);
00082   }
00083   return INK_MIN_ALIGN;
00084 }
00085 
00086 
00087 
00088 
00089 int
00090 LogAccessICP::marshal_client_auth_user_name(char *buf)
00091 {
00092   char *str = (char *) m_icp_log->GetIdent();
00093   int len = LogAccess::strlen(str);
00094   if (buf) {
00095     marshal_str(buf, str, len);
00096   }
00097   return len;
00098 }
00099 
00100 
00101 
00102 
00103 int
00104 LogAccessICP::marshal_client_req_text(char *buf)
00105 {
00106   int len = marshal_client_req_http_method(NULL) + marshal_client_req_url(NULL) + marshal_client_req_http_version(NULL);
00107 
00108   if (buf) {
00109     int offset = 0;
00110     offset += marshal_client_req_http_method(&buf[offset]);
00111     offset += marshal_client_req_url(&buf[offset]);
00112     offset += marshal_client_req_http_version(&buf[offset]);
00113     len = offset;
00114   }
00115   return len;
00116 }
00117 
00118 
00119 
00120 
00121 int
00122 LogAccessICP::marshal_client_req_http_method(char *buf)
00123 {
00124   char *str = (char *) m_icp_log->GetMethod();
00125   int len = LogAccess::strlen(str);
00126 
00127   if (buf) {
00128     marshal_str(buf, str, len);
00129   }
00130   return len;
00131 }
00132 
00133 
00134 
00135 
00136 int
00137 LogAccessICP::marshal_client_req_url(char *buf)
00138 {
00139   char *str = (char *) m_icp_log->GetURI();
00140   int len = LogAccess::strlen(str);
00141   if (buf) {
00142     marshal_str(buf, str, len);
00143   }
00144   return len;
00145 }
00146 
00147 
00148 
00149 
00150 int
00151 LogAccessICP::marshal_client_req_url_canon(char *buf)
00152 {
00153   int escapified_len;
00154   Arena arena;
00155 
00156   
00157   
00158   char *uri_str = (char *) m_icp_log->GetURI();
00159   int uri_len =::strlen(uri_str);
00160   char *str = LogUtils::escapify_url(&arena, uri_str, uri_len,
00161                                      &escapified_len);
00162 
00163   int len = round_strlen(escapified_len + 1);   
00164   if (buf)
00165     marshal_str(buf, str, len);
00166   return len;
00167 }
00168 
00169 
00170 
00171 
00172 int
00173 LogAccessICP::marshal_proxy_resp_content_type(char *buf)
00174 {
00175   
00176   
00177   char *ct_str = (char *) m_icp_log->GetContentType();
00178   int ct_len = ::strlen(ct_str);
00179 
00180   
00181   
00182   LogUtils::remove_content_type_attributes(ct_str, &ct_len);
00183   int len = LogAccess::strlen(ct_str);
00184   if (buf)
00185     marshal_str(buf, ct_str, len);
00186   return len;
00187 }
00188 
00189 
00190 
00191 
00192 int
00193 LogAccessICP::marshal_proxy_resp_squid_len(char *buf)
00194 {
00195   if (buf) {
00196     int64_t val = m_icp_log->GetSize();
00197     marshal_int(buf, val);
00198   }
00199   return INK_MIN_ALIGN;
00200 }
00201 
00202 
00203 
00204 
00205 int
00206 LogAccessICP::marshal_proxy_resp_content_len(char *buf)
00207 {
00208   if (buf) {
00209     int64_t val = m_icp_log->GetSize();
00210     marshal_int(buf, val);
00211   }
00212   return INK_MIN_ALIGN;
00213 }
00214 
00215 
00216 
00217 
00218 int
00219 LogAccessICP::marshal_proxy_resp_status_code(char *buf)
00220 {
00221   if (buf) {
00222     int64_t status = 0;         
00223     marshal_int(buf, status);
00224   }
00225   return INK_MIN_ALIGN;
00226 }
00227 
00228 
00229 
00230 
00231 int
00232 LogAccessICP::marshal_cache_result_code(char *buf)
00233 {
00234   if (buf) {
00235     SquidLogCode code = m_icp_log->GetAction();
00236     marshal_int(buf, (int64_t) code);
00237   }
00238   return INK_MIN_ALIGN;
00239 }
00240 
00241 
00242 
00243 
00244 int
00245 LogAccessICP::marshal_proxy_hierarchy_route(char *buf)
00246 {
00247   if (buf) {
00248     SquidHierarchyCode code = m_icp_log->GetHierarchy();
00249     marshal_int(buf, (int64_t) code);
00250   }
00251   return INK_MIN_ALIGN;
00252 }
00253 
00254 
00255 
00256 
00257 int
00258 LogAccessICP::marshal_server_host_name(char *buf)
00259 {
00260   char *str = (char *) m_icp_log->GetFromHost();
00261   int len = LogAccess::strlen(str);
00262   if (buf) {
00263     marshal_str(buf, str, len);
00264   }
00265   return len;
00266 }
00267 
00268 
00269 
00270 
00271 int
00272 LogAccessICP::marshal_transfer_time_ms(char *buf)
00273 {
00274   if (buf) {
00275     ink_hrtime elapsed = m_icp_log->GetElapsedTime();
00276     elapsed /= HRTIME_MSECOND;
00277     int64_t val = (int64_t) elapsed;
00278     marshal_int(buf, val);
00279   }
00280   return INK_MIN_ALIGN;
00281 }
00282 
00283 int
00284 LogAccessICP::marshal_transfer_time_s(char *buf)
00285 {
00286   if (buf) {
00287     ink_hrtime elapsed = m_icp_log->GetElapsedTime();
00288     elapsed /= HRTIME_SECOND;
00289     int64_t val = (int64_t) elapsed;
00290     marshal_int(buf, val);
00291   }
00292   return INK_MIN_ALIGN;
00293 }