void send_callback( object_header_t *hdr, DWORD status, LPVOID info, DWORD buflen )
{
- TRACE("%p, 0x%08x, %p, %u\n", hdr, status, info, buflen);
-
- if (hdr->callback && (hdr->notify_mask & status)) hdr->callback( hdr->handle, hdr->context, status, info, buflen );
+ if (hdr->callback && (hdr->notify_mask & status))
+ {
+ TRACE("%p, 0x%08x, %p, %u\n", hdr, status, info, buflen);
+ hdr->callback( hdr->handle, hdr->context, status, info, buflen );
+ TRACE("returning from 0x%08x callback\n", status);
+ }
}
/***********************************************************************
TRACE("%p\n", session);
+ if (session->unload_event) SetEvent( session->unload_event );
+
LIST_FOR_EACH_SAFE( item, next, &session->cookie_cache )
{
domain = LIST_ENTRY( item, domain_t, entry );
heap_free( session->proxy_username );
heap_free( session->proxy_password );
heap_free( session );
-#ifdef __REACTOS__
- WSACleanup();
-#endif
}
static BOOL session_query_option( object_header_t *hdr, DWORD option, LPVOID buffer, LPDWORD buflen )
case WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH:
FIXME("WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH: 0x%x\n", *(DWORD *)buffer);
return TRUE;
+ case WINHTTP_OPTION_UNLOAD_NOTIFY_EVENT:
+ TRACE("WINHTTP_OPTION_UNLOAD_NOTIFY_EVENT: %p\n", *(HANDLE *)buffer);
+ session->unload_event = *(HANDLE *)buffer;
+ return TRUE;
default:
FIXME("unimplemented option %u\n", option);
set_last_error( ERROR_INVALID_PARAMETER );
session_set_option
};
+#ifdef __REACTOS__
+BOOL netconn_init_winsock();
+#endif /* __REACTOS__ */
/***********************************************************************
* WinHttpOpen (winhttp.@)
*/
session_t *session;
HINTERNET handle = NULL;
#ifdef __REACTOS__
- WSADATA wsaData;
- int error = WSAStartup(MAKEWORD(2, 2), &wsaData);
- if (error) ERR("WSAStartup failed: %d\n", error);
+ if (!netconn_init_winsock()) return NULL;
#endif
TRACE("%s, %u, %s, %s, 0x%08x\n", debugstr_w(agent), access, debugstr_w(proxy), debugstr_w(bypass), flags);
end:
release_object( &session->hdr );
TRACE("returning %p\n", handle);
+ if (handle) set_last_error( ERROR_SUCCESS );
return handle;
}
release_object( &connect->hdr );
release_object( &session->hdr );
TRACE("returning %p\n", hconnect);
+ if (hconnect) set_last_error( ERROR_SUCCESS );
return hconnect;
}
static void request_destroy( object_header_t *hdr )
{
request_t *request = (request_t *)hdr;
- unsigned int i;
+ unsigned int i, j;
TRACE("%p\n", request);
+ if (request->task_thread)
+ {
+ /* Signal to the task proc to quit. It will call
+ this again when it does. */
+ HANDLE thread = request->task_thread;
+ request->task_thread = 0;
+ SetEvent( request->task_cancel );
+ CloseHandle( thread );
+ return;
+ }
release_object( &request->connect->hdr );
destroy_authinfo( request->authinfo );
heap_free( request->headers );
for (i = 0; i < request->num_accept_types; i++) heap_free( request->accept_types[i] );
heap_free( request->accept_types );
+ for (i = 0; i < TARGET_MAX; i++)
+ {
+ for (j = 0; j < SCHEME_MAX; j++)
+ {
+ heap_free( request->creds[i][j].username );
+ heap_free( request->creds[i][j].password );
+ }
+ }
heap_free( request );
}
request->hdr.context = connect->hdr.context;
request->hdr.redirect_policy = connect->hdr.redirect_policy;
list_init( &request->hdr.children );
+ list_init( &request->task_queue );
addref_object( &connect->hdr );
request->connect = connect;
release_object( &request->hdr );
release_object( &connect->hdr );
TRACE("returning %p\n", hrequest);
+ if (hrequest) set_last_error( ERROR_SUCCESS );
return hrequest;
}
}
release_object( hdr );
free_handle( handle );
+ set_last_error( ERROR_SUCCESS );
return TRUE;
}
ret = query_option( hdr, option, buffer, buflen );
release_object( hdr );
+ if (ret) set_last_error( ERROR_SUCCESS );
return ret;
}
ret = set_option( hdr, option, buffer, buflen );
release_object( hdr );
+ if (ret) set_last_error( ERROR_SUCCESS );
return ret;
}
CFRelease( settings );
return ret;
#else
- FIXME( "no support on this platform\n" );
+ static int once;
+ if (!once++) FIXME( "no support on this platform\n" );
return FALSE;
#endif
}
if (!(urlW = strdupAW( system_url ))) return FALSE;
*url = urlW;
+ set_last_error( ERROR_SUCCESS );
return TRUE;
}
if (flags & WINHTTP_AUTO_DETECT_TYPE_DHCP)
set_last_error( ERROR_WINHTTP_AUTODETECTION_FAILED );
*url = NULL;
}
+ else set_last_error( ERROR_SUCCESS );
return ret;
}
info->lpszProxy = NULL;
info->lpszProxyBypass = NULL;
}
+ set_last_error( ERROR_SUCCESS );
return TRUE;
}
GlobalFree( config->lpszProxyBypass );
config->lpszProxyBypass = NULL;
}
+ else set_last_error( ERROR_SUCCESS );
return ret;
}
done:
GlobalFree( detected_pac_url );
release_object( &session->hdr );
+ if (ret) set_last_error( ERROR_SUCCESS );
return ret;
}
}
RegCloseKey( key );
}
+ if (ret) set_last_error( ERROR_SUCCESS );
return ret;
}
hdr->notify_mask = flags;
release_object( hdr );
+ set_last_error( ERROR_SUCCESS );
return ret;
}
if (netconn_set_timeout( &request->netconn, TRUE, send )) ret = FALSE;
if (netconn_set_timeout( &request->netconn, FALSE, receive )) ret = FALSE;
}
-
- release_object( &request->hdr );
break;
case WINHTTP_HANDLE_TYPE_SESSION:
break;
default:
- release_object( hdr );
set_last_error( ERROR_WINHTTP_INCORRECT_HANDLE_TYPE );
- return FALSE;
+ ret = FALSE;
}
+ release_object( hdr );
+ if (ret) set_last_error( ERROR_SUCCESS );
return ret;
}
TRACE("%p, %p\n", time, string);
- if (!time || !string) return FALSE;
+ if (!time || !string)
+ {
+ set_last_error( ERROR_INVALID_PARAMETER );
+ return FALSE;
+ }
sprintfW( string, format,
wkday[time->wDayOfWeek],
time->wMinute,
time->wSecond );
+ set_last_error( ERROR_SUCCESS );
return TRUE;
}
TRACE("%s, %p\n", debugstr_w(string), time);
- if (!string || !time) return FALSE;
+ if (!string || !time)
+ {
+ set_last_error( ERROR_INVALID_PARAMETER );
+ return FALSE;
+ }
/* Windows does this too */
GetSystemTime( time );
* a SYSTEMTIME structure.
*/
+ set_last_error( ERROR_SUCCESS );
+
while (*s && !isalphaW( *s )) s++;
if (s[0] == '\0' || s[1] == '\0' || s[2] == '\0') return TRUE;
time->wDayOfWeek = 7;