Ignore:
Timestamp:
02/28/09 23:49:41 (3 years ago)
Author:
eagle
Message:

seems to work on WinXP now :)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/win/trunk/src/ocat_wintuntap.c

    r483 r484  
    135135int win_open_tun(char *dev, int s) 
    136136{ 
    137    char deviceId[256], deviceName[256], tapPath[256]; 
     137   char deviceId[SIZE_256], deviceName[SIZE_256], tapPath[SIZE_256]; 
    138138   TapData_t *tapData = &tapData_; 
    139139   unsigned long len = 0; 
     
    183183   // % netsh interface ipv6 add route  fd87:d87e:eb43::/48 "LAN-Verbindung 2" 
    184184 
    185    strlcpy(dev, deviceId, s); 
     185   strlcpy(dev, deviceName, s); 
    186186   return 0; 
    187187} 
     
    202202int win_write_tun(const char *jb, int len) 
    203203{ 
    204     TapData_t *tapData = &tapData_; 
    205     DWORD written, err; 
    206     BOOL result; 
    207      
    208     result = GetOverlappedResult(tapData->fd, &tapData->write_overlapped, 
    209                                   &written, FALSE); 
    210  
    211     if (!result && GetLastError() == ERROR_IO_INCOMPLETE) 
    212         WaitForSingleObject(tapData->write_event, INFINITE); 
    213  
    214     if (!WriteFile(tapData->fd, jb, len, &written, &tapData->write_overlapped)) 
    215     { 
     204   TapData_t *tapData = &tapData_; 
     205   DWORD written, err; 
     206     
     207   log_debug("WriteFile %d bytes", len); 
     208   if (!GetOverlappedResult(tapData->fd, &tapData->write_overlapped, &written, FALSE)) 
     209   { 
     210      err = GetLastError(); 
     211      log_debug("GetOverlappedResult failed. Error = %ld", err); 
     212      if (err == ERROR_IO_INCOMPLETE) 
     213      { 
     214         log_debug("IO_COMPLETE, WaitForSingleObject"); 
     215         if ((err = WaitForSingleObject(tapData->write_event, INFINITE)) == WAIT_FAILED) 
     216            log_msg(LOG_ERR, "WaitForSingleObject failed. Error = %ld", GetLastError()); 
     217         else 
     218            log_debug("WaitForSingleObject returen %08lx", err); 
     219      } 
     220   } 
     221 
     222   if (!WriteFile(tapData->fd, jb, len, &written, &tapData->write_overlapped)) 
     223   { 
    216224      if ((err = GetLastError()) != ERROR_IO_PENDING) 
    217225      {    
    218        fprintf(stderr, "error writing %ld \n", err); 
    219        return -1; 
     226         log_msg(LOG_ERR, "error writing %ld", err); 
     227         return -1; 
    220228      } 
    221229      else 
    222          fprintf(stderr, "io pending\n"); 
    223     } 
    224  
    225     return written; 
    226      
     230         log_debug("IO_PENDING"); 
     231   } 
     232 
     233   return written; 
    227234} 
    228235 
     
    234241   DWORD len, err; 
    235242     
    236    log_debug("ReadFile"); 
     243   log_debug("ReadFile max. %d bytes", n); 
    237244   if (!ReadFile(tapData->fd, buf, n, &len, &tapData->read_overlapped)) 
    238245   { 
     
    240247      if ((err = GetLastError()) == ERROR_IO_PENDING) 
    241248      { 
    242          log_debug("ReadFile pending..."); 
    243  
    244          if ((err = WaitForSingleObject(tapData->read_event, INFINITE)) == WAIT_FAILED) 
    245             log_msg(LOG_ERR, "WaitForSingleObject failed. Error = %ld", GetLastError()); 
    246          else 
    247             log_debug("WaitForSingleObject returen %08lx", err); 
     249         for (err = WAIT_TIMEOUT; err == WAIT_TIMEOUT;) 
     250         { 
     251            log_debug("ReadFile pending..."); 
     252            if ((err = WaitForSingleObject(tapData->read_event, SELECT_TIMEOUT * 1000)) == WAIT_FAILED) 
     253               log_msg(LOG_ERR, "WaitForSingleObject failed. Error = %ld", GetLastError()); 
     254            log_debug("WaitForSingleObject returned %08lx", err); 
     255         } 
    248256 
    249257         if (!GetOverlappedResult(tapData->fd, &tapData->read_overlapped, &len, FALSE)) 
Note: See TracChangeset for help on using the changeset viewer.