Delay Pools and Content Type

From: Varoli Marco <Marco.Varoli@dont-contact.us>
Date: Wed, 4 Apr 2001 11:39:46 +0200

Hy,

here the diff to allow bandwidth allocation based on the reply content-type
(es: application/octect-stream ...)

To be tested ;-)

Bye

----------- CUT HERE -------------------

diff -Ncr squid-head-200103300000OK/src/client_side.c
squid-head-200103300000/src/client_side.c
*** squid-head-200103300000OK/src/client_side.c Wed Apr 4 10:52:18 2001
--- squid-head-200103300000/src/client_side.c Sun Mar 4 01:54:48 2001
***************
*** 88,94 ****
  static void checkFailureRatio(err_type, hier_code);
  static void clientProcessMiss(clientHttpRequest *);
  static void clientBuildReplyHeader(clientHttpRequest * http, HttpReply *
rep);
- static HttpReply *clientBuildReply(clientHttpRequest * http, const char
*buf, size_t size);
  static clientHttpRequest *parseHttpRequestAbort(ConnStateData * conn,
const char *uri);
  static clientHttpRequest *parseHttpRequest(ConnStateData *, method_t *,
int *, char **, size_t *);
  static RH clientRedirectDone;
--- 88,93 ----
***************
*** 1225,1231 ****
      HttpHeader *hdr = &rep->header;
      int is_hit = isTcpHit(http->log_type);
      request_t *request = http->request;
- debug(33, 2) ("clientBuildReplyHeader: Reply Header %s\n",
httpHeaderGetStr(hdr, HDR_CONTENT_TYPE));
  #if DONT_FILTER_THESE
      /* but you might want to if you run Squid as an HTTP accelerator */
      /* httpHeaderDelById(hdr, HDR_ACCEPT_RANGES); */
--- 1224,1229 ----
***************
*** 1320,1328 ****
      httpHeaderPutStr(hdr, HDR_X_REQUEST_URI,
          http->entry->mem_obj->url ? http->entry->mem_obj->url : http->uri);
  #endif
- #if DELAY_POOLS
- delaySetStoreClient(http->sc, delayClientRep(request,rep));
- #endif
      httpHdrMangleList(hdr, request);
  }
  
--- 1318,1323 ----
***************
*** 2183,2189 ****
  clientProcessRequest(clientHttpRequest * http)
  {
      char *url = http->uri;
- const char *buf;
      request_t *r = http->request;
      int fd = http->conn->fd;
      HttpReply *rep;
--- 2178,2183 ----
diff -Ncr squid-head-200103300000OK/src/delay_pools.c
squid-head-200103300000/src/delay_pools.c
*** squid-head-200103300000OK/src/delay_pools.c Wed Apr 4 10:53:23 2001
--- squid-head-200103300000/src/delay_pools.c Mon Mar 19 07:18:42 2001
***************
*** 421,545 ****
      return delayId(pool + 1, position);
  }
  
- delay_id
- delayClientRep(request_t * r, HttpReply * rep)
- {
- aclCheck_t ch;
- int i;
- int j;
- unsigned int host;
- unsigned short pool, position;
- unsigned char class, net;
-
- memset(&ch, '\0', sizeof(ch));
- ch.src_addr = r->client_addr;
- ch.my_addr = r->my_addr;
- ch.my_port = r->my_port;
- ch.request = r;
- ch.reply = rep;
- debug(77, 2) ("delayClientRep: Reply Header %s\n",
httpHeaderGetStr(&ch.reply->header, HDR_CONTENT_TYPE));
- if (r->client_addr.s_addr == INADDR_BROADCAST) {
- debug(77, 2) ("delayClientRep: WARNING: Called with 'allones'
address, ignoring\n");
- return delayId(0, 0);
- }
- for (pool = 0; pool < Config.Delay.pools; pool++) {
- if (aclCheckFast(Config.Delay.access[pool], &ch))
- break;
- }
- if (pool == Config.Delay.pools)
- return delayId(0, 0);
- class = Config.Delay.class[pool];
- if (class == 0)
- return delayId(0, 0);
- if (class == 1)
- return delayId(pool + 1, 0);
- if (class == 2) {
- host = ntohl(ch.src_addr.s_addr) & 0xff;
- if (host == 255) {
- if (!delay_data[pool].class2->individual_255_used) {
- delay_data[pool].class2->individual_255_used = 1;
- delay_data[pool].class2->individual[IND_MAP_SZ - 1] =
- (int) (((double)
Config.Delay.rates[pool]->individual.max_bytes *
- Config.Delay.initial) / 100);
- }
- return delayId(pool + 1, 255);
- }
- for (i = 0; i < IND_MAP_SZ; i++) {
- if (delay_data[pool].class2->individual_map[i] == host)
- break;
- if (delay_data[pool].class2->individual_map[i] == 255) {
- delay_data[pool].class2->individual_map[i] = host;
- assert(i < (IND_MAP_SZ - 1));
- delay_data[pool].class2->individual_map[i + 1] = 255;
- delay_data[pool].class2->individual[i] =
- (int) (((double)
Config.Delay.rates[pool]->individual.max_bytes *
- Config.Delay.initial) / 100);
- break;
- }
- }
- return delayId(pool + 1, i);
- }
- /* class == 3 */
- host = ntohl(ch.src_addr.s_addr) & 0xffff;
- net = host >> 8;
- host &= 0xff;
- if (net == 255) {
- i = 255;
- if (!delay_data[pool].class3->network_255_used) {
- delay_data[pool].class3->network_255_used = 1;
- delay_data[pool].class3->network[255] =
- (int) (((double) Config.Delay.rates[pool]->network.max_bytes
*
- Config.Delay.initial) / 100);
- }
- } else {
- for (i = 0; i < NET_MAP_SZ; i++) {
- if (delay_data[pool].class3->network_map[i] == net)
- break;
- if (delay_data[pool].class3->network_map[i] == 255) {
- delay_data[pool].class3->network_map[i] = net;
- delay_data[pool].class3->individual_map[i][0] = 255;
- assert(i < (NET_MAP_SZ - 1));
- delay_data[pool].class3->network_map[i + 1] = 255;
- delay_data[pool].class3->network[i] =
- (int) (((double)
Config.Delay.rates[pool]->network.max_bytes *
- Config.Delay.initial) / 100);
- break;
- }
- }
- }
- position = i << 8;
- if (host == 255) {
- position |= 255;
- if (!(delay_data[pool].class3->individual_255_used[i / 8] & (1 << (i
% 8)))) {
- delay_data[pool].class3->individual_255_used[i / 8] |= (1 << (i
% 8));
- assert(position < C3_IND_SZ);
- delay_data[pool].class3->individual[position] =
- (int) (((double)
Config.Delay.rates[pool]->individual.max_bytes *
- Config.Delay.initial) / 100);
- }
- return delayId(pool + 1, position);
- }
- assert(i < NET_MAP_SZ);
- for (j = 0; j < IND_MAP_SZ; j++) {
- if (delay_data[pool].class3->individual_map[i][j] == host) {
- position |= j;
- break;
- }
- if (delay_data[pool].class3->individual_map[i][j] == 255) {
- delay_data[pool].class3->individual_map[i][j] = host;
- assert(j < (IND_MAP_SZ - 1));
- delay_data[pool].class3->individual_map[i][j + 1] = 255;
- position |= j;
- assert(position < C3_IND_SZ);
- delay_data[pool].class3->individual[position] =
- (int) (((double)
Config.Delay.rates[pool]->individual.max_bytes *
- Config.Delay.initial) / 100);
- break;
- }
- }
- return delayId(pool + 1, position);
- }
-
  static void
  delayUpdateClass1(class1DelayPool * class1, delaySpecSet * rates, int
incr)
  {
--- 421,426 ----
diff -Ncr squid-head-200103300000OK/src/protos.h
squid-head-200103300000/src/protos.h
*** squid-head-200103300000OK/src/protos.h Mon Apr 2 15:02:11 2001
--- squid-head-200103300000/src/protos.h Tue Mar 20 02:10:25 2001
***************
*** 1221,1227 ****
  extern void delayClearNoDelay(int fd);
  extern int delayIsNoDelay(int fd);
  extern delay_id delayClient(request_t *);
- extern delay_id delayClientRep(request_t *, HttpReply *);
  extern EVH delayPoolsUpdate;
  extern int delayBytesWanted(delay_id d, int min, int max);
  extern void delayBytesIn(delay_id, int qty);
--- 1221,1226 ----

                Marco Varoli
                Assistenza Elsag
                tel +39 0106583226
                cell+39 03355826018
                e-mail marco.varoli@elsag.it
                e-mail marco.varoli@aitek.it
Received on Wed Apr 04 2001 - 03:42:15 MDT

This archive was generated by hypermail pre-2.1.9 : Tue Dec 09 2003 - 16:13:44 MST