Ejemplo n.º 1
0
VmTimeType
BasicHttpBandwidthGetDelay(BasicHttpBandwidthGroup *group,        // IN
                           BasicHttpRequest *request,             // IN
                           BandwidthDirection direction)          // IN
{
#if LIBCURL_VERSION_MAJOR <= 7 && LIBCURL_VERSION_MINOR < 18
   NOT_IMPLEMENTED();
   return 0;
#else
   BandwidthStatistics *stats;
   VmTimeType delay = 0;
   uint64 quota;
   uint64 pool = 0;
   BasicHttpRequest *curRequest;
   uint32 requestCount = 0;
   uint32 pausedMaskToCheck = 0;

   ASSERT(group && request);
   ASSERT(request->bwGroup == group);
   ASSERT((BASICHTTP_UPLOAD == direction) || (BASICHTTP_DOWNLOAD == direction));

   if (BASICHTTP_UPLOAD == direction) {
      pausedMaskToCheck = CURLPAUSE_SEND;
   } else if (BASICHTTP_DOWNLOAD == direction) {
      pausedMaskToCheck = CURLPAUSE_RECV;
   }

   if (request->pausedMask & pausedMaskToCheck) {
      Log("BasicHttpBandwidthGetDelay: This %s transfer is paused.\n",
          (BASICHTTP_UPLOAD == direction) ? "upload" : "download");
      goto abort;
   }

   /*
    * Go through the request list to count unpaused transfers.
    */
   curRequest = group->requestList;
   for (; curRequest; curRequest = curRequest->nextInBwGroup) {
      if (!(curRequest->pausedMask & pausedMaskToCheck)) {
         ++requestCount;
      }
   }

   if (requestCount <= 0) {
      Log("BasicHttpBandwidthGetDelay: All %s transfers are paused.\n",
          (BASICHTTP_UPLOAD == direction) ? "upload" : "download");
      goto abort;
   }

   stats = &(request->statistics[direction]);

   quota = group->limits[direction] / requestCount;

   if (stats->windowedRate <= quota) {
      goto abort;
   }

   /*
    * Collect unused bandwidth from slow connections and allot to fast ones.
    */
   curRequest = group->requestList;
   for (; curRequest; curRequest = curRequest->nextInBwGroup) {
      if (!(curRequest->pausedMask & pausedMaskToCheck)
            && (curRequest->statistics[direction].windowedRate < quota)) {
         pool += quota - curRequest->statistics[direction].windowedRate;
         --requestCount;
      }
   }

   if (requestCount > 0) {
      quota += pool / requestCount;
   }

   if (stats->windowedRate <= quota) {
      goto abort;
   }

   /*
    * Delay so that the next time, windowedRate is the same as quota.
    *    winRate=winBytes/T --> quota=winBytes/(T+dT)
    *    ==> dT = winBytes/quota - winBytes/winRate
    */
   delay = stats->windowedBytes * TIMERATE_FACTOR / quota -
             stats->windowedBytes * TIMERATE_FACTOR / stats->windowedRate;

abort:
   return delay;
#endif
}
Ejemplo n.º 2
0
Archivo: path.c Proyecto: gstein/pocore
pc_error_t *pc_path_set_executable(const char *path,
                                   pc_bool_t executable,
                                   pc_pool_t *pool)
{
    NOT_IMPLEMENTED();
}
Ejemplo n.º 3
0
Archivo: path.c Proyecto: gstein/pocore
pc_error_t *pc_path_get_hidden(pc_bool_t *hidden,
                               const char *path,
                               pc_pool_t *pool)
{
    NOT_IMPLEMENTED();
}
Ejemplo n.º 4
0
Archivo: path.c Proyecto: gstein/pocore
pc_error_t *pc_path_listdir(pc_hash_t **entries,
                            const char *path,
                            pc_pool_t *pool)
{
    NOT_IMPLEMENTED();
}
Ejemplo n.º 5
0
Archivo: path.c Proyecto: gstein/pocore
pc_error_t *pc_path_set_readonly(const char *path,
                                 pc_bool_t readonly,
                                 pc_pool_t *pool)
{
    NOT_IMPLEMENTED();
}
Ejemplo n.º 6
0
Archivo: path.c Proyecto: gstein/pocore
pc_error_t *pc_path_remove(const char *path,
                           pc_bool_t allow_missing,
                           pc_pool_t *pool)
{
    NOT_IMPLEMENTED();
}
Ejemplo n.º 7
0
Archivo: path.c Proyecto: gstein/pocore
pc_error_t *pc_path_rmdir(const char *path, pc_pool_t *pool)
{
    NOT_IMPLEMENTED();
}
Ejemplo n.º 8
0
Archivo: path.c Proyecto: gstein/pocore
const char *pc_path_encoding(pc_context_t *ctx, const char *path)
{
    NOT_IMPLEMENTED();
}
Ejemplo n.º 9
0
Archivo: path.c Proyecto: gstein/pocore
pc_error_t *pc_path_move(const char *src_path,
                         const char *dst_path,
                         pc_pool_t *pool)
{
    NOT_IMPLEMENTED();
}
Ejemplo n.º 10
0
Archivo: path.c Proyecto: gstein/pocore
int pc_path_handling(pc_context_t *ctx, const char *path)
{
    NOT_IMPLEMENTED();
}
Ejemplo n.º 11
0
Archivo: path.c Proyecto: gstein/pocore
pc_error_t *pc_path_stat(pc_path_info_t *info,
                         const char *path,
                         pc_pool_t *pool)
{
    NOT_IMPLEMENTED();
}
Ejemplo n.º 12
0
Archivo: path.c Proyecto: gstein/pocore
pc_error_t *pc_path_actual(char **actual,
                           const char *path,
                           pc_pool_t *pool)
{
    NOT_IMPLEMENTED();
}
Ejemplo n.º 13
0
Archivo: path.c Proyecto: gstein/pocore
pc_error_t *pc_path_set_mtime(const char *path,
                              uint64_t mtime,
                              pc_pool_t *pool)
{
    NOT_IMPLEMENTED();
}
Ejemplo n.º 14
0
Archivo: path.c Proyecto: gstein/pocore
pc_error_t *pc_path_get_mtime(uint64_t *mtime,
                              const char *path,
                              pc_pool_t *pool)
{
    NOT_IMPLEMENTED();
}