CInternetSession Class

Creates and initializes a single or several simultaneous Internet sessions and, if necessary, describes your connection to a proxy server.

Syntax

class CInternetSession : public CObject

Members

Public Constructors

Name Description
CInternetSession::CInternetSession Constructs a CInternetSession object.

Public Methods

Name Description
CInternetSession::Close Closes the Internet connection when the Internet session is terminated.
CInternetSession::EnableStatusCallback Establishes a status callback routine.
CInternetSession::GetContext Closes the Internet connection when the Internet session is terminated.
CInternetSession::GetCookie Returns cookies for the specified URL and all its parent URLs.
CInternetSession::GetCookieLength Retrieves the variable specifying the length of the cookie stored in the buffer.
CInternetSession::GetFtpConnection Opens an FTP session with a server. Logs on the user.
CInternetSession::GetGopherConnection Opens a gopher server for an application that is trying to open a connection.
CInternetSession::GetHttpConnection Opens an HTTP server for an application that is trying to open a connection.
CInternetSession::OnStatusCallback Updates the status of an operation when status callback is enabled.
CInternetSession::OpenURL Parses and opens a URL.
CInternetSession::SetCookie Sets a cookie for the specified URL.
CInternetSession::SetOption Sets options for the Internet session.

Public Operators

Name Description
CInternetSession::operator HINTERNET A handle to the current Internet session.

Remarks

If your Internet connection must be maintained for the duration of an application, you can create a CInternetSession member of the class CWinApp.

Once you've established an Internet session, you can call OpenURL. CInternetSession then parses the URL for you by calling the global function AfxParseURL. Regardless of its protocol type, CInternetSession interprets the URL and manages it for you. It can handle requests for local files identified with the URL resource "file://". OpenURL will return a pointer to a CStdioFile object if the name you pass it is a local file.

If you open a URL on an Internet server using OpenURL, you can read information from the site. If you want to perform service-specific (for example, HTTP, FTP, or gopher) actions on files located on a server, you must establish the appropriate connection with that server. To open a particular kind of connection directly to a particular service, use one of the following member functions:

SetOption allows you to set the query options of your session, such as time-out values, number of retries, and so on.

CInternetSession member functions SetCookie, GetCookie, and GetCookieLength provide the means to manage a Win32 cookie database, through which servers and scripts maintain state information about the client workstation.

For more information about basic Internet programming tasks, see the article Internet First Steps: WinInet. For general information about using the MFC WinInet classes, see the article Internet Programming with WinInet.

Note

CInternetSession will throw an AfxThrowNotSupportedException for unsupported service types. Only the following service types are currently supported: FTP, HTTP, gopher, and file.

Inheritance Hierarchy

CObject
CInternetSession

Requirements

Header: afxinet.h

CInternetSession::CInternetSession

This member function is called when a CInternetSession object is created.

CInternetSession(
    LPCTSTR pstrAgent = NULL,
    DWORD_PTR dwContext = 1,
    DWORD dwAccessType = PRE_CONFIG_INTERNET_ACCESS,
    LPCTSTR pstrProxyName = NULL,
    LPCTSTR pstrProxyBypass = NULL,
    DWORD dwFlags = 0);

Parameters

pstrAgent
A pointer to a string that identifies the name of the application or entity calling the Internet functions (for example, "Microsoft Internet Browser"). If pstrAgent is NULL (the default), the framework calls the global function AfxGetAppName, which returns a null-terminated string containing an application's name. Some protocols use this string to identify your application to the server.

dwContext
The context identifier for the operation. dwContext identifies the operation's status information returned by CInternetSession::OnStatusCallback. The default is set to 1; however, you can explicitly assign a specific context ID for the operation. The object and any work it does will be associated with that context ID.

dwAccessType
The type of access required. The following are valid values, exactly one of which may be supplied:

  • INTERNET_OPEN_TYPE_PRECONFIG Connect using preconfigured settings in the registry. This access type is set as the default. To connect through a TIS proxy, set dwAccessType to this value; you then set the registry appropriately.

  • INTERNET_OPEN_TYPE_DIRECT Connect directly to Internet.

  • INTERNET_OPEN_TYPE_PROXY Connect through a CERN proxy.

For information on connecting with different types of proxies, see Steps in a Typical FTP Client Application.

pstrProxyName
The name of the preferred CERN proxy if dwAccessType is set as INTERNET_OPEN_TYPE_PROXY. The default is NULL.

pstrProxyBypass
A pointer to a string containing an optional list of server addresses. These addresses may be bypassed when using proxy access. If a NULL value is supplied, the bypass list will be read from the registry. This parameter is meaningful only if dwAccessType is set to INTERNET_OPEN_TYPE_PROXY.

dwFlags
Indicates various caching options. The default is set to 0. The possible values include:

  • INTERNET_FLAG_DONT_CACHE Don't cache the data, either locally or in any gateway servers.

  • INTERNET_FLAG_OFFLINE Download operations are satisfied through the persistent cache only. If the item doesn't exist in the cache, an appropriate error code is returned. This flag may be combined with the bitwise "or" (|) operator.

Remarks

CInternetSession is the first Internet function called by an application. It initializes internal data structures and prepares for future calls from the application.

If no Internet connection can be opened, CInternetSession throws an AfxThrowInternetException.

Example

See the example for CFtpFileFind.

CInternetSession::Close

Call this member function when your application has finished using the CInternetSession object.

virtual void Close();

Example

See the example for CFtpFileFind.

CInternetSession::EnableStatusCallback

Call this member function to enable status callback.

BOOL EnableStatusCallback(BOOL bEnable = TRUE);

Parameters

bEnable
Specifies whether callback is enabled or disabled. The default is TRUE.

Return Value

Nonzero if successful; otherwise 0. If the call fails, determine the cause of the failure by examining the thrown CInternetException object.

Remarks

When handling status callback, you can provide status about the progress of the operation (such as resolving name, connecting to server, and so on) in the status bar of the application. Displaying operation status is especially desirable during a long-term operation.

Because callbacks occur during the request's processing, the application should spend as little time as possible in the callback to prevent degradation of data throughput to the network. For example, putting up a dialog box in a callback may be such a lengthy operation that the server terminates the request.

The status callback can't be removed as long as any callbacks are pending.

To handle any operations asynchronously, you must either create your own thread or use the WinInet functions without MFC.

CInternetSession::GetContext

Call this member function to get the context value for a particular application session.

DWORD_PTR GetContext() const;

Return Value

The application-defined context Identifier.

Remarks

OnStatusCallback uses the context ID returned by GetContext to report the status of a particular application. For example, when a user activates an Internet request that involves returning status information, the status callback uses the context ID to report status on that particular request. If the user activates two separate Internet requests that both involve returning status information, OnStatusCallback uses the context identifiers to return status about their corresponding requests. Consequently, the context identifier is used for all status callback operations, and it's associated with the session until the session is ended.

For more information about asynchronous operations, see the article Internet First Steps: WinInet.

CInternetSession::GetCookie

This member function implements the behavior of the Win32 function InternetGetCookie, as described in the Windows SDK.

static BOOL GetCookie(
    LPCTSTR pstrUrl,
    LPCTSTR pstrCookieName,
    LPTSTR pstrCookieData,
    DWORD dwBufLen);

static BOOL GetCookie(
    LPCTSTR pstrUrl,
    LPCTSTR pstrCookieName,
    CString& strCookieData);

Parameters

pstrUrl
A pointer to a string containing the URL.

pstrCookieName
A pointer to a string containing the name of the cookie to get for the specified URL.

pstrCookieData
In the first overload, a pointer to a string containing the address of the buffer that receives the cookie data. This value can be NULL. In the second overload, a reference to a CString object to receive the cookie data.

dwBufLen
The variable specifying the size of the pstrCookieData buffer. If the function succeeds, the buffer receives the amount of data copied to the pstrCookieData buffer. If pstrCookieData is NULL, this parameter receives a value that specifies the size of the buffer necessary to copy all the cookie data.

Return Value

Returns TRUE if successful, or FALSE otherwise. If the call fails, call the Win32 function GetLastError to determine the cause of the error. The following error values apply:

  • ERROR_NO_MORE_ITEMS There's no cookie for the specified URL and all its parents.

  • ERROR_INSUFFICIENT_BUFFER The value passed in dwBufLen is insufficient to copy all the cookie data. The value returned in dwBufLen is the size of the buffer necessary to get all the data.

Remarks

In the second overload, MFC retrieves the cookie data into the supplied CString object.

CInternetSession::GetCookieLength

Call this member function to get the length of the cookie stored in the buffer.

static DWORD GetCookieLength(
    LPCTSTR pstrUrl,
    LPCTSTR pstrCookieName);

Parameters

pstrUrl
A pointer to a string containing the URL

pstrCookieName
A pointer to a string containing the name of the cookie.

Return Value

A DWORD value indicating the length of the cookie, stored in the buffer. Zero if no cookie with the name indicated by pstrCookieName exists.

Remarks

This value is used by GetCookie.

CInternetSession::GetFtpConnection

Call this member function to establish an FTP connection and get a pointer to a CFtpConnection object.

CFtpConnection* GetFtpConnection(
    LPCTSTR pstrServer,
    LPCTSTR pstrUserName = NULL,
    LPCTSTR pstrPassword = NULL,
    INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER,
    BOOL bPassive = FALSE);

Parameters

pstrServer
A pointer to a string containing the FTP server name.

pstrUserName
Pointer to a null-terminated string that specifies the name of the user to log in. If NULL, the default is anonymous.

pstrPassword
A pointer to a null-terminated string that specifies the password to use to log in. If both pstrPassword and pstrUserName are NULL, the default anonymous password is the user's email name. If pstrPassword is NULL (or an empty string) but pstrUserName isn't NULL, a blank password is used. The following table describes the behavior for the four possible settings of pstrUserName and pstrPassword:

pstrUserName pstrPassword Username sent to FTP server Password sent to FTP server
NULL or " " NULL or " " "anonymous" User's email name
Non-NULL String NULL or " " pstrUserName " "
NULL Non-NULL String ERROR ERROR
Non-NULL String Non-NULL String pstrUserName pstrPassword

nPort
A number that identifies the TCP/IP port to use on the server.

bPassive
Specifies passive or active mode for this FTP session. If set to TRUE, it sets the Win32 API dwFlag to INTERNET_FLAG_PASSIVE.

Return Value

A pointer to a CFtpConnection object. If the call fails, determine the cause of the failure by examining the thrown CInternetException object.

Remarks

GetFtpConnection connects to an FTP server, and creates and returns a pointer to a CFTPConnection object. It doesn't perform any specific operation on the server. If you intend to read or write to files, for example, you must perform those operations as separate steps. See the classes CFtpConnection and CFtpFileFind for information about searching for files, opening files, and reading or writing to files. See the article Internet Programming with WinInet for steps in performing common FTP connection tasks.

Example

See the example for CFtpFileFind.

CInternetSession::GetGopherConnection

Call this member function to establish a new gopher connection and get a pointer to a CGopherConnection object.

CGopherConnection* GetGopherConnection(
    LPCTSTR pstrServer,
    LPCTSTR pstrUserName = NULL,
    LPCTSTR pstrPassword = NULL,
    INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER);

Parameters

pstrServer
A pointer to a string containing the gopher server name.

pstrUserName
A pointer to a string containing the user name.

pstrPassword
A pointer to a string containing the access password.

nPort
A number that identifies the TCP/IP port to use on the server.

Return Value

A pointer to a CGopherConnection object. If the call fails, determine the cause of the failure by examining the thrown CInternetException object.

Remarks

GetGopherConnection connects to a gopher server, and creates and returns a pointer to a CGopherConnection object. It doesn't perform any specific operation on the server. If you intend to read or write data, for example, you must perform those operations as separate steps. See the classes CGopherConnection, CGopherFile, and CGopherFileFind for information about searching for files, opening files, and reading or writing to files. For information about browsing an FTP site, see the member function OpenURL. See the article Internet Programming with WinInet for steps in performing common gopher connection tasks.

CInternetSession::GetHttpConnection

Call this member function to establish an HTTP connection and get a pointer to a CHttpConnection object.

CHttpConnection* GetHttpConnection(
    LPCTSTR pstrServer,
    INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER,
    LPCTSTR pstrUserName = NULL,
    LPCTSTR pstrPassword = NULL);

CHttpConnection* GetHttpConnection(
    LPCTSTR pstrServer,
    DWORD dwFlags,
    INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER,
    LPCTSTR pstrUserName = NULL,
    LPCTSTR pstrPassword = NULL);

Parameters

pstrServer
A pointer to a string containing the HTTP server name.

nPort
A number that identifies the TCP/IP port to use on the server.

pstrUserName
A pointer to a string containing the user name.

pstrPassword
A pointer to a string containing the access password.

dwflags
Any combination of the INTERNET_FLAG_* flags. See the table in the Remarks section of CHttpConnection::OpenRequest for a description of dwFlags values.

Return Value

A pointer to a CHttpConnection object. If the call fails, determine the cause of the failure by examining the thrown CInternetException object.

Remarks

GetHttpConnection connects to an HTTP server, and creates and returns a pointer to a CHttpConnection object. It doesn't perform any specific operation on the server. If you intend to query an HTTP header, for example, you must perform this operation as a separate step. See the classes CHttpConnection and CHttpFile for information about operations you can perform by using a connection to an HTTP server. For information about browsing an HTTP site, see the member function OpenURL. See the article Internet Programming with WinInet for steps in performing common HTTP connection tasks.

CInternetSession::OnStatusCallback

This member function is called by the framework to update the status when status callback is enabled and an operation is pending.

virtual void OnStatusCallback(
    DWORD_PTR dwContext,
    DWORD dwInternetStatus,
    LPVOID lpvStatusInformation,
    DWORD dwStatusInformationLength);

Parameters

dwContext
The context value supplied by the application.

dwInternetStatus
A status code that indicates why the callback is being made. See Remarks for a table of possible values.

lpvStatusInformation
A pointer to a buffer containing information pertinent to this callback.

dwStatusInformationLength
The size of lpvStatusInformation.

Remarks

You must first call EnableStatusCallback to take advantage of status callback.

The dwInternetStatus parameter indicates the operation being performed and determines what the contents of lpvStatusInformation will be. dwStatusInformationLength indicates the length of the data included in lpvStatusInformation. The following status values for dwInternetStatus are defined as follows:

Value Meaning
INTERNET_STATUS_RESOLVING_NAME Looking up the IP address of the name contained in lpvStatusInformation.
INTERNET_STATUS_NAME_RESOLVED Successfully found the IP address of the name contained in lpvStatusInformation.
INTERNET_STATUS_CONNECTING_TO_SERVER Connecting to the socket address (SOCKADDR) pointed to by lpvStatusInformation.
INTERNET_STATUS_CONNECTED_TO_SERVER Successfully connected to the socket address (SOCKADDR) pointed to by lpvStatusInformation.
INTERNET_STATUS_SENDING_REQUEST Sending the information request to the server. The lpvStatusInformation parameter is NULL.
INTERNET_STATUS_REQUEST_SENT Successfully sent the information request to the server. The lpvStatusInformation parameter is NULL.
INTERNET_STATUS_RECEIVING_RESPONSE Waiting for the server to respond to a request. The lpvStatusInformation parameter is NULL.
INTERNET_STATUS_RESPONSE_RECEIVED Successfully received a response from the server. The lpvStatusInformation parameter is NULL.
INTERNET_STATUS_CLOSING_CONNECTION Closing the connection to the server. The lpvStatusInformation parameter is NULL.
INTERNET_STATUS_CONNECTION_CLOSED Successfully closed the connection to the server. The lpvStatusInformation parameter is NULL.
INTERNET_STATUS_HANDLE_CREATED Used by the Win32 API function InternetConnect to indicate that it has created the new handle. This lets the application call the Win32 function InternetCloseHandle from another thread if the connect is taking too long. See the Windows SDKfor more information about these functions.
INTERNET_STATUS_HANDLE_CLOSING Successfully terminated this handle value.

Override this member function to require some action before a status callback routine is performed.

Note

Status callbacks need thread-state protection. If you are using MFC in a shared library, add the following line to the beginning of your override:

AFX_MANAGE_STATE(AfxGetAppModuleState());

For more information about asynchronous operations, see the article Internet First Steps: WinInet.

CInternetSession::OpenURL

Call this member function to send the specified request to the HTTP server and allow the client to specify additional RFC822, MIME, or HTTP headers to send along with the request.

CStdioFile* OpenURL(
    LPCTSTR pstrURL,
    DWORD_PTR dwContext = 1,
    DWORD dwFlags = INTERNET_FLAG_TRANSFER_ASCII,
    LPCTSTR pstrHeaders = NULL,
    DWORD dwHeadersLength = 0);

Parameters

pstrURL
A pointer to the name of the URL to begin reading. Only URLs beginning with file:, ftp:, gopher:, or http: are supported. Asserts if pstrURL is NULL.

dwContext
An application-defined value passed with the returned handle in callback.

dwFlags
The flags describing how to handle this connection. See Remarks for more information about the valid flags. The valid flags are:

  • INTERNET_FLAG_TRANSFER_ASCII The default. Transfer the file as ASCII text.

  • INTERNET_FLAG_TRANSFER_BINARY Transfer the file as a binary file.

  • INTERNET_FLAG_RELOAD Get the data from the wire even if it's locally cached.

  • INTERNET_FLAG_DONT_CACHE Don't cache the data, either locally or in any gateways.

  • INTERNET_FLAG_SECURE This flag is applicable to HTTP requests only. It requests secure transactions on the wire with Secure Sockets Layer or PCT.

  • INTERNET_OPEN_FLAG_USE_EXISTING_CONNECT If possible, reuse the existing connections to the server for new requests generated by OpenUrl instead of creating a new session for each connection request.

  • INTERNET_FLAG_PASSIVE Used for an FTP site. Uses passive FTP semantics. Used with CInternetConnection of OpenURL.

pstrHeaders
A pointer to a string containing the headers to be sent to the HTTP server.

dwHeadersLength
The length, in characters, of the additional headers. If this is -1L and pstrHeaders is non-NULL, then pstrHeaders is assumed to be zero terminated and the length is calculated.

Return Value

Returns a file handle for FTP, GOPHER, HTTP, and FILE-type Internet services only. Returns NULL if parsing was unsuccessful.

The pointer that OpenURL returns depends on pstrURL's type of service. The table below illustrates the possible pointers OpenURL can return.

URL type Returns
file:// CStdioFile*
http:// CHttpFile*
gopher:// CGopherFile*
ftp:// CInternetFile*

Remarks

The parameter dwFlags must include either INTERNET_FLAG_TRANSFER_ASCII or INTERNET_FLAG_TRANSFER_BINARY, but not both. The remaining flags can be combined with the bitwise "or" (|) operator.

OpenURL, which wraps the Win32 function InternetOpenURL, allows only downloading, retrieving, and reading the data from an Internet server. OpenURL allows no file manipulation on a remote location, so it requires no CInternetConnection object.

To use connection-specific (that is, protocol-specific) functions, such as writing to a file, you must open a session, then open a particular kind of connection, then use that connection to open a file in the desired mode. See CInternetConnection for more information about connection-specific functions.

CInternetSession::operator HINTERNET

Use this operator to get the Windows handle for the current Internet session.

operator HINTERNET() const;

CInternetSession::SetCookie

Sets a cookie for the specified URL.

static BOOL SetCookie(
    LPCTSTR pstrUrl,
    LPCTSTR pstrCookieName,
    LPCTSTR pstrCookieData);

Parameters

pstrUrl
A pointer to a null-terminated string that specifies the URL for which the cookie should be set.

pstrCookieName
A pointer to a string containing the name of the cookie.

pstrCookieData
A pointer to a string containing the actual string data to associate with the URL.

Return Value

Returns TRUE if successful, or FALSE otherwise. To get the specific error code, call GetLastError.

Remarks

This member function implements the behavior of the Win32 message InternetSetCookie, as described in the Windows SDK.

CInternetSession::SetOption

Call this member function to set options for the Internet session.

BOOL SetOption(
    DWORD dwOption,
    LPVOID lpBuffer,
    DWORD dwBufferLength,
    DWORD dwFlags = 0);

BOOL SetOption(
    DWORD dwOption,
    DWORD dwValue,
    DWORD dwFlags = 0);

Parameters

dwOption
The Internet option to set. See Option Flags in the Windows SDK for a list of the possible options.

lpBuffer
A buffer that contains the option setting.

dwBufferLength
The length of lpBuffer or the size of dwValue.

dwValue
A DWORD that contains the option setting.

dwFlags
Indicates various caching options. The default is set to 0. The possible values include:

  • INTERNET_FLAG_DONT_CACHE Don't cache the data, either locally or in any gateway servers.

  • INTERNET_FLAG_OFFLINE Download operations are satisfied through the persistent cache only. If the item doesn't exist in the cache, an appropriate error code is returned. This flag may be combined with the bitwise "or" (|) operator.

Return Value

If the operation was successful, a value of TRUE is returned. If an error occurred, a value of FALSE is returned. If the call fails, the Win32 function GetLastError may be called to determine the cause of the error.

See also

CObject Class
Hierarchy Chart
CInternetConnection Class
CHttpConnection Class
CFtpConnection Class
CGopherConnection Class