Diff for /libwww/Library/src/HTFile.c between versions 1.157 and 1.158

version 1.157, 2000/06/19 14:34:29 version 1.158, 2000/08/10 16:05:39
Line 44  typedef enum _FileState { Line 44  typedef enum _FileState {
     FS_NO_DATA          = -2,      FS_NO_DATA          = -2,
     FS_GOT_DATA         = -1,      FS_GOT_DATA         = -1,
     FS_BEGIN            = 0,      FS_BEGIN            = 0,
       FS_PENDING,
     FS_DO_CN,      FS_DO_CN,
     FS_NEED_OPEN_FILE,      FS_NEED_OPEN_FILE,
     FS_NEED_BODY,      FS_NEED_BODY,
Line 436  PRIVATE int FileEvent (SOCKET soc, void Line 437  PRIVATE int FileEvent (SOCKET soc, void
                 HTHost * host = NULL;                  HTHost * host = NULL;
                 if ((host = HTHost_new("localhost", 0)) == NULL) return HT_ERROR;                  if ((host = HTHost_new("localhost", 0)) == NULL) return HT_ERROR;
                 HTNet_setHost(net, host);                  HTNet_setHost(net, host);
                 file->state = FS_DO_CN;  
                 if (HTHost_addNet(host, net) == HT_PENDING) {                  if (HTHost_addNet(host, net) == HT_PENDING) {
                     HTTRACE(PROT_TRACE, "HTLoadFile.. Pending...\n");                      HTTRACE(PROT_TRACE, "HTLoadFile.. Pending...\n");
                     return HT_PENDING;                      /* move to the hack state */
                       file->state = FS_PENDING;
                       return HT_OK;
                 }                  }
             }              }
               file->state = FS_DO_CN;
               break;
   
           case FS_PENDING:
               /*
               ** 2000/08/10 JK : This is a funny state. Because of the
               ** internal libwww stacks, when doing multiple local
               ** requests (e.g., while using the Robot), we need to ask
               ** again for the host object. If we had jumped directly to
               ** the FS_DO_CN state, libwww would have blocked because
               ** of socket starvation.
               ** This state is similar to FS_BEGINNING, but just requests 
               ** the host object. 
               ** YES. THIS IS AN UGLY HACK!!
               */
               {
                   HTHost * host = NULL;
                   if ((host = HTHost_new("localhost", 0)) == NULL) return HT_ERROR;
                   HTNet_setHost(net, host);
                   if (HTHost_addNet(host, net) == HT_PENDING) {
                       HTTRACE(PROT_TRACE, "HTLoadFile.. Pending...\n");
                       file->state = FS_PENDING;
                       return HT_OK;
                   }
               }
               file->state = FS_DO_CN;
             break;              break;
   
         case FS_DO_CN:          case FS_DO_CN:

Removed from v.1.157  
changed lines
  Added in v.1.158


Webmaster