Skip to content

Commit

Permalink
Add partial wininet bindings.
Browse files Browse the repository at this point in the history
Includes what *should* be all the types and constants from wininet.h,
and some of the functions.

Note that, unlike other header bindings, the `wininet` module is *not*
re-exported in the root `winapi` module.  This is because `wininet.h`
and `winhttp.h` define the same constants/enums with *different values.*

Also, due to wininet.dll exporting stdcall functions using cdecl mangling,
this commit uses the MinGW import libraries, and as such has to exclude
some functions when built using a GNU toolchain.  This is because creating
a more complete import library for the GNU toolchain would require
*actually writing* a dummy shared library in C, and I can't be bothered.
  • Loading branch information
DanielKeep committed Jul 16, 2016
1 parent 1026160 commit 151dae4
Show file tree
Hide file tree
Showing 9 changed files with 1,913 additions and 5 deletions.
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ uuid-sys = { version = "0", path = "lib/uuid" }
vssapi-sys = { version = "0", path = "lib/vssapi" }
wevtapi-sys = { version = "0", path = "lib/wevtapi" }
winhttp-sys = { version = "0", path = "lib/winhttp" }
wininet-sys = { version = "0", path = "lib/wininet" }
winmm-sys = { version = "0", path = "lib/winmm" }
winscard-sys = { version = "0", path = "lib/winscard" }
winspool-sys = { version = "0", path = "lib/winspool" }
Expand Down
2 changes: 1 addition & 1 deletion lib/wininet/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "wininet-sys"
version = "0.0.1"
version = "0.1.0"
authors = ["Peter Atashian <[email protected]>"]
description = "Contains function definitions for the Windows API library wininet. See winapi for types and constants."
documentation = "https://retep998.github.io/doc/wininet/"
Expand Down
Binary file added lib/wininet/i686/libwininet.a
Binary file not shown.
329 changes: 325 additions & 4 deletions lib/wininet/src/lib.rs

Large diffs are not rendered by default.

Binary file added lib/wininet/x86_64/libwininet.a
Binary file not shown.
2 changes: 2 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ pub use winerror::*;
pub use winevt::*;
pub use wingdi::*;
pub use winhttp::*;
// pub use wininet::*; // deliberately excluded; see `src/wininet.rs`
pub use winioctl::*;
pub use winnetwk::*;
pub use winnls::*;
Expand Down Expand Up @@ -329,6 +330,7 @@ pub mod winerror;
pub mod winevt;
pub mod wingdi;
pub mod winhttp;
pub mod wininet;
pub mod winioctl;
pub mod winnetwk;
pub mod winnls;
Expand Down
1,205 changes: 1,205 additions & 0 deletions src/wininet.rs

Large diffs are not rendered by default.

210 changes: 210 additions & 0 deletions tests/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -610,3 +610,213 @@ fn hidsdi() {
assert_eq!(size_of::<HIDD_ATTRIBUTES>(), 12);
assert_eq!(align_of::<HIDD_ATTRIBUTES>(), 4);
}
#[test] #[cfg(target_arch = "x86")]
fn wininet() {
assert_eq!(size_of::<wininet::INTERNET_ASYNC_RESULT>(), 8);
assert_eq!(align_of::<wininet::INTERNET_ASYNC_RESULT>(), 4);
assert_eq!(size_of::<wininet::INTERNET_DIAGNOSTIC_SOCKET_INFO>(), 16);
assert_eq!(align_of::<wininet::INTERNET_DIAGNOSTIC_SOCKET_INFO>(), 4);
assert_eq!(size_of::<wininet::INTERNET_PROXY_INFO>(), 12);
assert_eq!(align_of::<wininet::INTERNET_PROXY_INFO>(), 4);
assert_eq!(size_of::<wininet::INTERNET_PER_CONN_OPTIONA>(), 12);
assert_eq!(align_of::<wininet::INTERNET_PER_CONN_OPTIONA>(), 4);
assert_eq!(size_of::<wininet::INTERNET_PER_CONN_OPTIONA>(), 12);
assert_eq!(align_of::<wininet::INTERNET_PER_CONN_OPTIONA>(), 4);
assert_eq!(size_of::<wininet::INTERNET_PER_CONN_OPTIONW>(), 12);
assert_eq!(align_of::<wininet::INTERNET_PER_CONN_OPTIONW>(), 4);
assert_eq!(size_of::<wininet::INTERNET_PER_CONN_OPTIONW>(), 12);
assert_eq!(align_of::<wininet::INTERNET_PER_CONN_OPTIONW>(), 4);
assert_eq!(size_of::<wininet::INTERNET_PER_CONN_OPTION_LISTA>(), 20);
assert_eq!(align_of::<wininet::INTERNET_PER_CONN_OPTION_LISTA>(), 4);
assert_eq!(size_of::<wininet::INTERNET_PER_CONN_OPTION_LISTW>(), 20);
assert_eq!(align_of::<wininet::INTERNET_PER_CONN_OPTION_LISTW>(), 4);
assert_eq!(size_of::<wininet::INTERNET_VERSION_INFO>(), 8);
assert_eq!(align_of::<wininet::INTERNET_VERSION_INFO>(), 4);
assert_eq!(size_of::<wininet::HTTP_VERSION_INFO>(), 8);
assert_eq!(align_of::<wininet::HTTP_VERSION_INFO>(), 4);
assert_eq!(size_of::<wininet::INTERNET_CONNECTED_INFO>(), 8);
assert_eq!(align_of::<wininet::INTERNET_CONNECTED_INFO>(), 4);
assert_eq!(size_of::<wininet::URL_COMPONENTSA>(), 60);
assert_eq!(align_of::<wininet::URL_COMPONENTSA>(), 4);
assert_eq!(size_of::<wininet::URL_COMPONENTSW>(), 60);
assert_eq!(align_of::<wininet::URL_COMPONENTSW>(), 4);
assert_eq!(size_of::<wininet::INTERNET_CERTIFICATE_INFO>(), 40);
assert_eq!(align_of::<wininet::INTERNET_CERTIFICATE_INFO>(), 4);
assert_eq!(size_of::<wininet::INTERNET_BUFFERSA>(), 40);
assert_eq!(align_of::<wininet::INTERNET_BUFFERSA>(), 4);
assert_eq!(size_of::<wininet::INTERNET_BUFFERSW>(), 40);
assert_eq!(align_of::<wininet::INTERNET_BUFFERSW>(), 4);
assert_eq!(size_of::<wininet::IncomingCookieState>(), 28);
assert_eq!(align_of::<wininet::IncomingCookieState>(), 4);
assert_eq!(size_of::<wininet::OutgoingCookieState>(), 12);
assert_eq!(align_of::<wininet::OutgoingCookieState>(), 4);
assert_eq!(size_of::<wininet::InternetCookieHistory>(), 16);
assert_eq!(align_of::<wininet::InternetCookieHistory>(), 4);
assert_eq!(size_of::<wininet::CookieDecision>(), 8);
assert_eq!(align_of::<wininet::CookieDecision>(), 4);
assert_eq!(size_of::<wininet::GOPHER_FIND_DATAA>(), 808);
assert_eq!(align_of::<wininet::GOPHER_FIND_DATAA>(), 4);
assert_eq!(size_of::<wininet::GOPHER_FIND_DATAW>(), 1588);
assert_eq!(align_of::<wininet::GOPHER_FIND_DATAW>(), 4);
assert_eq!(size_of::<wininet::GOPHER_ADMIN_ATTRIBUTE_TYPE>(), 8);
assert_eq!(align_of::<wininet::GOPHER_ADMIN_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_MOD_DATE_ATTRIBUTE_TYPE>(), 8);
assert_eq!(align_of::<wininet::GOPHER_MOD_DATE_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_TTL_ATTRIBUTE_TYPE>(), 4);
assert_eq!(align_of::<wininet::GOPHER_TTL_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_SCORE_ATTRIBUTE_TYPE>(), 4);
assert_eq!(align_of::<wininet::GOPHER_SCORE_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE>(), 8);
assert_eq!(align_of::<wininet::GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_SITE_ATTRIBUTE_TYPE>(), 4);
assert_eq!(align_of::<wininet::GOPHER_SITE_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_ORGANIZATION_ATTRIBUTE_TYPE>(), 4);
assert_eq!(align_of::<wininet::GOPHER_ORGANIZATION_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_LOCATION_ATTRIBUTE_TYPE>(), 4);
assert_eq!(align_of::<wininet::GOPHER_LOCATION_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE>(), 24);
assert_eq!(align_of::<wininet::GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_TIMEZONE_ATTRIBUTE_TYPE>(), 4);
assert_eq!(align_of::<wininet::GOPHER_TIMEZONE_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_PROVIDER_ATTRIBUTE_TYPE>(), 4);
assert_eq!(align_of::<wininet::GOPHER_PROVIDER_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_VERSION_ATTRIBUTE_TYPE>(), 4);
assert_eq!(align_of::<wininet::GOPHER_VERSION_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_ABSTRACT_ATTRIBUTE_TYPE>(), 8);
assert_eq!(align_of::<wininet::GOPHER_ABSTRACT_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_VIEW_ATTRIBUTE_TYPE>(), 12);
assert_eq!(align_of::<wininet::GOPHER_VIEW_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_VERONICA_ATTRIBUTE_TYPE>(), 4);
assert_eq!(align_of::<wininet::GOPHER_VERONICA_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_ASK_ATTRIBUTE_TYPE>(), 8);
assert_eq!(align_of::<wininet::GOPHER_ASK_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_UNKNOWN_ATTRIBUTE_TYPE>(), 4);
assert_eq!(align_of::<wininet::GOPHER_UNKNOWN_ATTRIBUTE_TYPE>(), 4);
// assert_eq!(size_of::<wininet::GOPHER_ATTRIBUTE_TYPE>(), 32); // FIXME
// assert_eq!(align_of::<wininet::GOPHER_ATTRIBUTE_TYPE>(), 4); // FIXME
assert_eq!(size_of::<wininet::INTERNET_COOKIE2>(), 32);
assert_eq!(align_of::<wininet::INTERNET_COOKIE2>(), 4);
assert_eq!(size_of::<wininet::INTERNET_AUTH_NOTIFY_DATA>(), 16);
assert_eq!(align_of::<wininet::INTERNET_AUTH_NOTIFY_DATA>(), 4);
assert_eq!(size_of::<wininet::INTERNET_CACHE_ENTRY_INFOA>(), 80);
assert_eq!(align_of::<wininet::INTERNET_CACHE_ENTRY_INFOA>(), 4);
assert_eq!(size_of::<wininet::INTERNET_CACHE_ENTRY_INFOW>(), 80);
assert_eq!(align_of::<wininet::INTERNET_CACHE_ENTRY_INFOW>(), 4);
assert_eq!(size_of::<wininet::INTERNET_CACHE_TIMESTAMPS>(), 16);
assert_eq!(align_of::<wininet::INTERNET_CACHE_TIMESTAMPS>(), 4);
assert_eq!(size_of::<wininet::INTERNET_CACHE_GROUP_INFOA>(), 156);
assert_eq!(align_of::<wininet::INTERNET_CACHE_GROUP_INFOA>(), 4);
assert_eq!(size_of::<wininet::INTERNET_CACHE_GROUP_INFOW>(), 276);
assert_eq!(align_of::<wininet::INTERNET_CACHE_GROUP_INFOW>(), 4);
assert_eq!(size_of::<wininet::AutoProxyHelperVtbl>(), 36);
assert_eq!(align_of::<wininet::AutoProxyHelperVtbl>(), 4);
assert_eq!(size_of::<wininet::AUTO_PROXY_SCRIPT_BUFFER>(), 12);
assert_eq!(align_of::<wininet::AUTO_PROXY_SCRIPT_BUFFER>(), 4);
assert_eq!(size_of::<wininet::AutoProxyHelperFunctions>(), 4);
assert_eq!(align_of::<wininet::AutoProxyHelperFunctions>(), 4);
}
#[test] #[cfg(target_arch = "x86_64")]
fn wininet() {
assert_eq!(size_of::<wininet::INTERNET_ASYNC_RESULT>(), 16);
assert_eq!(align_of::<wininet::INTERNET_ASYNC_RESULT>(), 8);
assert_eq!(size_of::<wininet::INTERNET_DIAGNOSTIC_SOCKET_INFO>(), 24);
assert_eq!(align_of::<wininet::INTERNET_DIAGNOSTIC_SOCKET_INFO>(), 8);
assert_eq!(size_of::<wininet::INTERNET_PROXY_INFO>(), 24);
assert_eq!(align_of::<wininet::INTERNET_PROXY_INFO>(), 8);
assert_eq!(size_of::<wininet::INTERNET_PER_CONN_OPTIONA>(), 16);
assert_eq!(align_of::<wininet::INTERNET_PER_CONN_OPTIONA>(), 8);
assert_eq!(size_of::<wininet::INTERNET_PER_CONN_OPTIONA>(), 16);
assert_eq!(align_of::<wininet::INTERNET_PER_CONN_OPTIONA>(), 8);
assert_eq!(size_of::<wininet::INTERNET_PER_CONN_OPTIONW>(), 16);
assert_eq!(align_of::<wininet::INTERNET_PER_CONN_OPTIONW>(), 8);
assert_eq!(size_of::<wininet::INTERNET_PER_CONN_OPTIONW>(), 16);
assert_eq!(align_of::<wininet::INTERNET_PER_CONN_OPTIONW>(), 8);
assert_eq!(size_of::<wininet::INTERNET_PER_CONN_OPTION_LISTA>(), 32);
assert_eq!(align_of::<wininet::INTERNET_PER_CONN_OPTION_LISTA>(), 8);
assert_eq!(size_of::<wininet::INTERNET_PER_CONN_OPTION_LISTW>(), 32);
assert_eq!(align_of::<wininet::INTERNET_PER_CONN_OPTION_LISTW>(), 8);
assert_eq!(size_of::<wininet::INTERNET_VERSION_INFO>(), 8);
assert_eq!(align_of::<wininet::INTERNET_VERSION_INFO>(), 4);
assert_eq!(size_of::<wininet::HTTP_VERSION_INFO>(), 8);
assert_eq!(align_of::<wininet::HTTP_VERSION_INFO>(), 4);
assert_eq!(size_of::<wininet::INTERNET_CONNECTED_INFO>(), 8);
assert_eq!(align_of::<wininet::INTERNET_CONNECTED_INFO>(), 4);
assert_eq!(size_of::<wininet::URL_COMPONENTSA>(), 104);
assert_eq!(align_of::<wininet::URL_COMPONENTSA>(), 8);
assert_eq!(size_of::<wininet::URL_COMPONENTSW>(), 104);
assert_eq!(align_of::<wininet::URL_COMPONENTSW>(), 8);
assert_eq!(size_of::<wininet::INTERNET_CERTIFICATE_INFO>(), 64);
assert_eq!(align_of::<wininet::INTERNET_CERTIFICATE_INFO>(), 8);
assert_eq!(size_of::<wininet::INTERNET_BUFFERSA>(), 56);
assert_eq!(align_of::<wininet::INTERNET_BUFFERSA>(), 8);
assert_eq!(size_of::<wininet::INTERNET_BUFFERSW>(), 56);
assert_eq!(align_of::<wininet::INTERNET_BUFFERSW>(), 8);
assert_eq!(size_of::<wininet::IncomingCookieState>(), 32);
assert_eq!(align_of::<wininet::IncomingCookieState>(), 8);
assert_eq!(size_of::<wininet::OutgoingCookieState>(), 16);
assert_eq!(align_of::<wininet::OutgoingCookieState>(), 8);
assert_eq!(size_of::<wininet::InternetCookieHistory>(), 16);
assert_eq!(align_of::<wininet::InternetCookieHistory>(), 4);
assert_eq!(size_of::<wininet::CookieDecision>(), 8);
assert_eq!(align_of::<wininet::CookieDecision>(), 4);
assert_eq!(size_of::<wininet::GOPHER_FIND_DATAA>(), 808);
assert_eq!(align_of::<wininet::GOPHER_FIND_DATAA>(), 4);
assert_eq!(size_of::<wininet::GOPHER_FIND_DATAW>(), 1588);
assert_eq!(align_of::<wininet::GOPHER_FIND_DATAW>(), 4);
assert_eq!(size_of::<wininet::GOPHER_ADMIN_ATTRIBUTE_TYPE>(), 16);
assert_eq!(align_of::<wininet::GOPHER_ADMIN_ATTRIBUTE_TYPE>(), 8);
assert_eq!(size_of::<wininet::GOPHER_MOD_DATE_ATTRIBUTE_TYPE>(), 8);
assert_eq!(align_of::<wininet::GOPHER_MOD_DATE_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_TTL_ATTRIBUTE_TYPE>(), 4);
assert_eq!(align_of::<wininet::GOPHER_TTL_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_SCORE_ATTRIBUTE_TYPE>(), 4);
assert_eq!(align_of::<wininet::GOPHER_SCORE_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE>(), 8);
assert_eq!(align_of::<wininet::GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_SITE_ATTRIBUTE_TYPE>(), 8);
assert_eq!(align_of::<wininet::GOPHER_SITE_ATTRIBUTE_TYPE>(), 8);
assert_eq!(size_of::<wininet::GOPHER_ORGANIZATION_ATTRIBUTE_TYPE>(), 8);
assert_eq!(align_of::<wininet::GOPHER_ORGANIZATION_ATTRIBUTE_TYPE>(), 8);
assert_eq!(size_of::<wininet::GOPHER_LOCATION_ATTRIBUTE_TYPE>(), 8);
assert_eq!(align_of::<wininet::GOPHER_LOCATION_ATTRIBUTE_TYPE>(), 8);
assert_eq!(size_of::<wininet::GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE>(), 24);
assert_eq!(align_of::<wininet::GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_TIMEZONE_ATTRIBUTE_TYPE>(), 4);
assert_eq!(align_of::<wininet::GOPHER_TIMEZONE_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_PROVIDER_ATTRIBUTE_TYPE>(), 8);
assert_eq!(align_of::<wininet::GOPHER_PROVIDER_ATTRIBUTE_TYPE>(), 8);
assert_eq!(size_of::<wininet::GOPHER_VERSION_ATTRIBUTE_TYPE>(), 8);
assert_eq!(align_of::<wininet::GOPHER_VERSION_ATTRIBUTE_TYPE>(), 8);
assert_eq!(size_of::<wininet::GOPHER_ABSTRACT_ATTRIBUTE_TYPE>(), 16);
assert_eq!(align_of::<wininet::GOPHER_ABSTRACT_ATTRIBUTE_TYPE>(), 8);
assert_eq!(size_of::<wininet::GOPHER_VIEW_ATTRIBUTE_TYPE>(), 24);
assert_eq!(align_of::<wininet::GOPHER_VIEW_ATTRIBUTE_TYPE>(), 8);
assert_eq!(size_of::<wininet::GOPHER_VERONICA_ATTRIBUTE_TYPE>(), 4);
assert_eq!(align_of::<wininet::GOPHER_VERONICA_ATTRIBUTE_TYPE>(), 4);
assert_eq!(size_of::<wininet::GOPHER_ASK_ATTRIBUTE_TYPE>(), 16);
assert_eq!(align_of::<wininet::GOPHER_ASK_ATTRIBUTE_TYPE>(), 8);
assert_eq!(size_of::<wininet::GOPHER_UNKNOWN_ATTRIBUTE_TYPE>(), 8);
assert_eq!(align_of::<wininet::GOPHER_UNKNOWN_ATTRIBUTE_TYPE>(), 8);
// assert_eq!(size_of::<wininet::GOPHER_ATTRIBUTE_TYPE>(), 32); // FIXME
// assert_eq!(align_of::<wininet::GOPHER_ATTRIBUTE_TYPE>(), 8); // FIXME
assert_eq!(size_of::<wininet::INTERNET_COOKIE2>(), 48);
assert_eq!(align_of::<wininet::INTERNET_COOKIE2>(), 8);
assert_eq!(size_of::<wininet::INTERNET_AUTH_NOTIFY_DATA>(), 24);
assert_eq!(align_of::<wininet::INTERNET_AUTH_NOTIFY_DATA>(), 8);
assert_eq!(size_of::<wininet::INTERNET_CACHE_ENTRY_INFOA>(), 112);
assert_eq!(align_of::<wininet::INTERNET_CACHE_ENTRY_INFOA>(), 8);
assert_eq!(size_of::<wininet::INTERNET_CACHE_ENTRY_INFOW>(), 112);
assert_eq!(align_of::<wininet::INTERNET_CACHE_ENTRY_INFOW>(), 8);
assert_eq!(size_of::<wininet::INTERNET_CACHE_TIMESTAMPS>(), 16);
assert_eq!(align_of::<wininet::INTERNET_CACHE_TIMESTAMPS>(), 4);
assert_eq!(size_of::<wininet::INTERNET_CACHE_GROUP_INFOA>(), 156);
assert_eq!(align_of::<wininet::INTERNET_CACHE_GROUP_INFOA>(), 4);
assert_eq!(size_of::<wininet::INTERNET_CACHE_GROUP_INFOW>(), 276);
assert_eq!(align_of::<wininet::INTERNET_CACHE_GROUP_INFOW>(), 4);
assert_eq!(size_of::<wininet::AutoProxyHelperVtbl>(), 72);
assert_eq!(align_of::<wininet::AutoProxyHelperVtbl>(), 8);
assert_eq!(size_of::<wininet::AUTO_PROXY_SCRIPT_BUFFER>(), 24);
assert_eq!(align_of::<wininet::AUTO_PROXY_SCRIPT_BUFFER>(), 8);
assert_eq!(size_of::<wininet::AutoProxyHelperFunctions>(), 8);
assert_eq!(align_of::<wininet::AutoProxyHelperFunctions>(), 8);
}
Loading

0 comments on commit 151dae4

Please sign in to comment.