Contents for Windows LUA Specification Help

  Using Help

  Microsoft Support Services

  Introduction

  Programming with Windows LUA

  Asynchronous Notification Via Messages

  Asynchronous Notification Via Events

  LUA RUI Verbs

  LUA SLI Verbs

  Verb Control Block

  Common Return Codes


Contents for Windows LUA Specification Help

  Using Help

  Microsoft Support Services

  Introduction

  Windows LUA Overview

  Microsoft Windows Graphical Environment and Windows-Specific Extensions

  Programming with Windows LUA

  Asynchronous Notification Via Messages

  Asynchronous Notification Via Events

  LUA RUI Verbs

  LUA SLI Verbs

  Verb Control Block

  Common Return Codes


Contents for Windows LUA Specification Help

  Using Help

  Microsoft Support Services

  Introduction

  Programming with Windows LUA

  Windows LUA Library Installation Checking

  Byte Ordering and Pointers

  Asynchronous Notification in the Windows Environment

  Multithreaded Processes

  Asynchronous Notification Via Messages

  Asynchronous Notification Via Events

  LUA RUI Verbs

  LUA SLI Verbs

  Verb Control Block

  Common Return Codes


Contents for Windows LUA Specification Help

  Using Help

  Microsoft Support Services

  Introduction

  Programming with Windows LUA

  Asynchronous Notification Via Messages

  Overview

  GetLuaReturnCode()

  WinRUI( )/WinSLI( )

  WinRUICleanup( )/WinSLICleanup( )

  WinRUIStartup( )/WinSLIStartup( )

  WinRUIGetLastInitStatus()

  Asynchronous Notification Via Events

  LUA RUI Verbs

  LUA SLI Verbs

  Verb Control Block

  Common Return Codes


Contents for Windows LUA Specification Help

  Using Help

  Microsoft Support Services

  Introduction

  Programming with Windows LUA

  Asynchronous Notification Via Messages

  Asynchronous Notification Via Events

  Overview

  RUI( )/SLI( )

  LUA RUI Verbs

  LUA SLI Verbs

  Verb Control Block

  Common Return Codes


Contents for Windows LUA Specification Help

  Using Help

  Microsoft Support Services

  Introduction

  Programming with Windows LUA

  Asynchronous Notification Via Messages

  Asynchronous Notification Via Events

  LUA RUI Verbs

  RUI_BID

  RUI_INIT

  RUI_PURGE

  RUI_READ

  RUI_TERM

  RUI_WRITE

  LUA SLI Verbs

  Verb Control Block

  Common Return Codes


Contents for Windows LUA Specification Help

  Using Help

  Microsoft Support Services

  Introduction

  Programming with Windows LUA

  Asynchronous Notification Via Messages

  Asynchronous Notification Via Events

  LUA RUI Verbs

  LUA SLI Verbs

  SLI_BID

  SLI_CLOSE

  SLI_OPEN: Description and Syntax

  SLI_OPEN: Remarks

  SLI_PURGE

  SLI_RECEIVE

  SLI_SEND

  SLI_BIND_ROUTINE

  SLI_STSN_ROUTINE

  Verb Control Block

  Common Return Codes


Contents for Windows LUA Specification Help

  Using Help

  Microsoft Support Services

  Introduction

  Programming with Windows LUA

  Asynchronous Notification Via Messages

  Asynchronous Notification Via Events

  LUA RUI Verbs

  LUA SLI Verbs

  Verb Control Block

  Common Structure of LUA VCBs

  Values for lua_message_type

  SLI_OPEN VCB Structure

  SLI_BID and RUI_BID VCB Structure

  SLI_SEND VCB Structure

  Common Return Codes


Contents for Windows LUA Specification Help

  Using Help

  Microsoft Support Services

  Introduction

  Programming with Windows LUA

  Asynchronous Notification Via Messages

  Asynchronous Notification Via Events

  LUA RUI Verbs

  LUA SLI Verbs

  Verb Control Block

  Common Return Codes

  Overview

  Primary Return Codes

  Secondary Return Codes


Using Help

You can find information in Help by choosing a Help topic or by using the Search feature. To return to the Help contents screen after you read the following instructions, click Back or press B.

For complete instructions on how to use Help, press F1 while Help is active.

To expand a topic list

Click a button showing a closed file folder  [image].

Or press TAB until the intended heading is highlighted, and press ENTER.

To collapse a topic list

Click a button showing an open file folder  [image].

Or press TAB until the intended heading is highlighted, and press ENTER.

To choose a Help topic

Click an underlined topic or a topic with a button  [image].

Or press TAB until the intended topic is highlighted, and then press ENTER.

To return to the previous topic

Click Back or press B.

To use the Search feature

Click Search or press S.

To close Help

From the File menu for Help, choose Exit (ALT, F, X).


Windows LUA Overview

Windows LUA defines a standard and consistent API for the 16- and 32-bit versions of the Microsoft® Windows™ graphical environment. It encompasses a set of Windows-specific asyncronous notification methods designed to allow the programmer to take advantage of the message-driven nature of the Windows graphical environment.

This API has been designed and specified to provide a standard to which application developers can program and network software vendors can conform. These API details constitute documentation for application software developers and a specification for network software vendors.

Network software that conforms to either the Windows LUA RUI or Windows LUA SLI specification will be considered "Windows LUA Compliant." To be Windows LUA Compliant, a vendor must implement 100% of the Windows LUA RUI or Windows LUA SLI specification. Suppliers of such interfaces shall be referred to as "Windows LUA Suppliers."

Applications that are capable of exploiting any Windows LUA implementation will be considered as having a "Windows LUA Interface" and will be referred to as "Windows LUA Applications."

While Windows LUA is one of the Windows SNA APIs to be standardized for the Windows environment, it is beyond the scope of this document to deal with other SNA APIs.


Microsoft Windows Graphical Environment and Windows-Specific Extensions

This API has been designed for all implementations and versions of the Windows environment from and including version 3.0. It thus provides for Windows LUA implementations and Windows LUA applications in both 16- and 32-bit operating environments.

Windows LUA makes provisions for multithreaded Windows-based processes. A process contains one or more threads of execution. In the Win16 nonmultithreaded world, a task corresponds to a process with a single thread. All references to threads in this document refer to actual "threads" in multithreaded Windows environments. In nonmultithreaded environments (such as version 3.0), use of the term thread refers to a Windows process.

The extensions to the Windows environment included in Windows LUA are provided for maximum programming compatibility and optimum application performance.


Windows LUA Library Installation Checking

To detect the presence of any Windows LUA implementations on a system, an application that has been linked with the Windows LUA import library can attempt to call the WinRUIStartup( ) or WinSLIStartup( ) routine. If you want your application to be a little more sophisticated, have it examine the $PATH environment variable to search for instances of Windows LUA API implementations (WINRUI.DLL or WINSLI.DLL). For each instance, it can issue a LoadLibrary( ) call and use the WinLUAStartup( ) routine to discover implementation specific data.

This version of the Windows LUA API specification does not attempt to explicitly address the issue of multiple library/multiple concurrent Windows LUA implementations. Nothing in the specification should be interpreted as restricting multiple Windows LUA DLLs from being present and from being used concurrently by one or more Windows LUA applications.


Byte Ordering and Pointers

Byte Ordering

The Intel byte ordering is like that of the DEC VAX, and so differs from the Internet and 68000-type processor byte ordering. Take care in your programming to ensure the correct orientation.

Pointers

All pointers used by applications with Windows LUA should be FAR.


Asynchronous Notification in the Windows Environment

This help describes the following two methods for asynchronous notification with Windows LUA in the Win16 and Win32 environment:

•	Message notification

•	Events

The message notification method has been designed for all implementations and versions of the Microsoft Windows graphical environment starting from Microsoft Windows version 3.0. They provide for Windows LUA implementations and applications in 16- and 32-bit operating environments.

A Windows handle has been added as the first parameter passed to the WinRUI and WinSLI entry point. This allows the Windows LUA implementation to distinguish between concurrent LUA sessions.

The Event method has been designed for the Win32 environment to allow for the porting of OS/2 semaphore-based applications to the Windows environment. Support for this will be provided by calling the RUI or SLI entry points. Using this method, the user application is notified of the completion of an asynchronous request via the signaling of an event.

The asynchronous notification methods included in Windows LUA are provided for maximum Microsoft Windows programming compatibility and optimum application performance.

Each of these function calls has corresponding prototypes in the WINLUA.H header file.


Multithreaded Processes

Windows LUA allows multithreaded Windows-based processes. A process contains one or more threads of execution. In the nonmultithreaded world of the 16-bit Windows environment, a task corresponds to a process with a single thread. All references to threads in this document refer to actual threads in multithreaded Windows environments. In nonmultithreaded environments, such as the Windows version 3.0 graphical environment, "thread" is synonymous with "process."


Asynchronous Notification Via Messages: Overview

The extensions for asynchronous notification have been designed for all implementations and versions of the Microsoft Windows graphical environment version 3.0 or later. They provide support for maximum Windows-based programming compatibility and optimum application performance in both 16-bit and 32-bit operating environments.


WinRUI( ) / WinSLI( )

Provides asynchronous message notification for all Windows-based RUI and SLI verbs.

Syntax

int WINAPI WinRUI (hWnd, lpVCB);

int WINAPI WinSLI (hWnd, 1pVCB);

Returns

The function returns a value indicating whether the request was accepted by the Windows-based RUI or SLI for processing. A returned value of 0 indicates that the request was accepted and will be processed. A value other than 0 indicates an error. Possible error codes are as follows:

WLUAINVALIDHANDLE

The window handle provided is invalid.

WLUASTARTUPNOTCALLED

The application has not initiated a session using WinRUIStartup / WinSLIStartup.

The value returned in lua_flag2.async indicates whether asyncronous notification will occur. If the flag is set (nonzero), asynchronous notification will occur via a message posted to the application's message queue. If the flag is not set, the request completed synchronously. Examine the primary return code and secondary return code for any error conditions.

Remarks

When the asynchronous operation is complete, the application's window hWnd receives the message returned by RegisterWindowMessage with "WinRUI" or "WinSLI" as the input string. The lParam argument contains the address of the VCB being posted as complete. The wParam argument is undefined.

Note  It is possible for the request to be accepted for processing (the function call returns 0) but rejected later with a primary return code and secondary return code set in the VCB. Examine the primary return code and secondary return code for any error conditions.

If the application calls WinRUI( ) / WinSLI( ) without first initializing the session using WinRUIStartup / WinSLIStartup, an error is returned.

See Also

RUI( )/SLI( )


WinRUICleanup( ) / WinSLICleanup( )

Terminates and deregisters an application from a Windows LUA implementation.

Syntax

BOOL WINAPI WinRUICleanup(void);

BOOL WINAPI WinSLICleanup(void);

Returns

The return value specifies whether the deregistration was successful. If the value is not 0, the application was successfully deregistered. If the value is 0, the application was not deregistered.

Remarks

Use WinRUICleanup / WinSLICleanup to indicate deregistration of a Windows LUA application from a Windows LUA implementation. This function can be used, for example, to free up resources allocated to the specific application.

If WinRUICleanup( ) / WinSLICleanup( ) is called while LUs are in session (RUI_TERM or SLI_CLOSE not issued), the cleanup code should issue an RUI_TERM or SLI_CLOSE close type ABEND for the application for all open sessions.

See Also

WinRUIStartup( )/WinSLIStartup( )


WinRUIStartup( ) / WinSLIStartup( )

Allows an application to specify the version of Windows LUA required and to retrieve details of the specific Windows LUA implementation. This function must be called by an application before issuing any further Windows LUA calls to register itself with a Windows LUA implementation.

Syntax

int WINAPI WinRUIStartup (WORD wVersionRequired, LPLUADATA);

int WINAPI WinSLIStartup (WORD wVersionRequired, LPLUADATA);

Parameter	Description
wVersionRequired	Specifies the version of Windows LUA support required. The high-order byte specifies the minor version (revision) number; the low-order byte specifies the major version number. For this release of Windows LUA, 1.0 is the correct version number.
Returns

The return value specifies whether the application was registered successfully and whether the Windows LUA implementation can support the specified version number. If the value is 0, it was registered successfully and the specified version can be supported. Otherwise, the return value is one of the following:

WLUASYSNOTRERADY

The underlying network subsystem is not ready for network communication.

WLUAVERNOTSUPPORTED

The version of Windows LUA support requested is not provided by this particular Windows LUA implementation.

WLUAINVALID

The Windows LUA version specified by the application is not supported by this DLL.

WLUAFAILURE

A failure occurred while the Windows LUA DLL was initializing. This usually occurs because an operating system call failed.

WLUAINITREJECT

WinRUIStartup or WinSLIStartup was called multiple times.

Remarks

For this release of Windows LUA, 1.0 is the correct version number.

In order to support future Windows LUA implementations and applications that may have functionality differences, a negotiation takes place in WinRUIStartup( )/WinSLIStartup( ). An application passes to WinRUIStartup( )/WinSLIStartup( ) the Windows LUA version that it can use. If this version is lower than the lowest version supported by the Windows LUA DLL, the DLL cannot support the application and WinRUIStartup( )/WinSLIStartup( ) fails. If the version is not lower, however, the call succeeds and returns the highest version of Windows LUA supported by the DLL. If this version is lower than the lowest version supported by the application, the application either fails its initialization or attempts to find another Windows LUA DLL on the system.

This negotiation allows both a Windows LUA DLL and a Windows LUA application to support a range of Windows LUA versions. An application can successfully use a DLL if there is any overlap in the versions. The following table illustrates how WinRUIStartup( )/WinSLIStartup( ) works in conjunction with different application and DLL versions:

App  versions	DLL versions	To WinRUIStartup( )/ WinSLIStartup( )	From WinRUIStartup( )/ WinSLIStartup( )	Result
1.0	1.0	1.0	1.0	Use 1.0
1.0, 2.0	1.0	2.0	1.0	Use 1.0
1.0	1.0, 2.0	1.0	2.0	Use 1.0
1.0	2.0, 3.0	1.0	WLUAINVALID	Fail
2.0, 3.0	1.0	3.0	1.0	App Fails
1.0, 2.0, 3.0	1.0, 2.0, 3.0	3.0	3.0	Use 3.0
Note  The application must call WinRUIStartup( ) / WinSLIStartup( ) prior to issuing any other LUA commands. However, WinRUIStartup( ) / WinSLIStartup( ) needs to be called only once per application. If it is called multiple times, the subsequent calls will be rejected.

Details of the actual LUA implementation are described in the WLUADATA structure, defined as follows:

typedef struct tagWLUADATA {

WORD wVersion;

char szDescription[WLUADESCRIPTION_LEN+1];

} WLUADATA, FAR *LPWLUADDATA;

Having made its last Windows LUA call, an application should call the WinRUICleanup/WinSLICleanup routine.

Each LUA implementation must make a WinRUIStartup( )/WinSLIStartup( ) call before issuing any other LUA calls.

See Also

WinRUICleanup( )/WinSLICleanup( )


WinRUIGetLastInitStatus( )

Enables an application to query the status of an RUI_INIT, to determine whether the RUI_INIT should be timed out.

Syntax

int WINAPI WinRUIGetLastInitStatus (DWORD  dwSid, HANDLE hStatusHandle, DWORD  dwNotifyType, BOOL  bClearPrevious);

Parameter	Description
dwSid	Specifies the RUI session ID of the session for which status will be determined. If dwSid is 0, hStatusHandle is used to report status on all sessions. Note that the lua_sid parameter in the RUI_INIT VCB is valid as soon as the call to RUI() or WinRUI() for the RUI_INIT returns.
hStatusHandle	Specifies a handle used for signaling the application that the status for the session (specified by dwSid) has changed. Can be a window handle, an event handle, or NULL; dwNotifyType must be set accordingly: • If hStatusHandle is a window handle, status is sent to the application via a window message. The message is obtained from RegisterWindowMessage using the string WinRUI. The parameter wParam contains the session status (see return codes). Depending on the value of dwNotifyType, lParam contains either the RUI session ID of the session, or the value of lua_correlator from the RUI_INIT verb. • If hStatusHandle is an event handle, when the status for the session specified by dwSid changes, the event is put into the signaled state. The application must then make a further call to WinRUIGetLastInitStatus() to find out the new status. Note that the event should not be the same as one used for signaling completion of any RUI verb. • If hStatusHandle is NULL, the status of the session specified by dwSid is returned in the return code. In this case, dwSid must not be 0 unless bClearPrevious is TRUE. If hStatusHandle is NULL, dwNotifyType is ignored.
dwNotifyType	Specifies the type of indication required. This determines the contents of the lParam of the window message, and how WinRUIGetLastInitStatus() interprets hStatusHandle. Allowed values are: WLUA_NTFY_EVENT The hStatusHandle parameter contains an event handle. WLUA_NTFY_MSG_CORRELATOR The hStatusHandle parameter contains a window handle, and lParam contains the value of the lua_correlator field on the RUI_INIT. WLUA_NTFY_MSG_SID The hStatusHandle parameter contains a window handle, and lParam contains the LUA session identifier.
bClearPrevious	If TRUE, status messages are no longer sent for the session identified by dwSid. If dwSid is 0, status messages are no longer sent for any session. If bClearPrevious is TRUE, hStatusHandle and dwNotifyType are ignored.
Return Codes

WLUAINVALIDHANDLE

The hStatusHandle parameter does not contain a valid handle.

WLUASTARTUPNOTCALLED

WinRUIStartup has not been called.

WLUALINKACTIVATING

The link to the host is not yet active.

WLUAINACTIVE

The link is active, but no ACTPU has yet been received.

WLUAPUACTIVE

An ACTPU has been received.

WLUALUINACTIVE

The link is active, and an ACTPU has been received, but no ACTLU has been received.

WLUASIDINVALID

The SID specified does not match any known by the RUI.

WLUAHANDLENOTWINDOW

The value for dwNotifyType is WLUA_NTFY_MSG_CORRELATOR or WLUA_NTFY_MSG_SID, but hStatusHandle is not a window handle.

WLUASIDZERO

The hStatusHandle parameter is NULL and bClearPrevious is FALSE, but dwSid is zero.

WLUAALREADYACTIVE

The session specified by dwSid is already active (that is, RUI_INIT has already completed).


GetLuaReturnCode( )

Converts the primary and secondary return codes in the VCB to a printable string. This function provides a standard set of error strings for use by LUA applications.

Syntax

int WINAPI GetLuaReturnCode (struct lua_hdr FAR * vpb, UINT buffer_length, unsigned char FAR * buffer_addr)

Parameter	Description
vpb	Supplied parameter; specifies the address of the verb parameter block.
buffer_length	Supplied parameter; specifies the length of the buffer pointed to by buffer_addr. The recommended length is 256.
buffer_addr	Supplied/returned parameter; specifies the address of the buffer that will hold the formatted, null-terminated string.
Return Codes

This function either returns the length of the returned string (not including terminating zero) or, for failure, returns 0. In the Windows NT (Win32) environment, when 0 is returned, the Win32 function GetLastError can be called, to obtain one of the following secondary return codes:

0x20000001

The parameters are invalid; the function could not read from the specified verb parameter block or could not write to the specified buffer.

0x20000002

The specified buffer is too small; the buffer contains a truncated version of the error string.

0x20000003

The LUA string library LUAST32.DLL could not be loaded.

Remarks

The descriptive error string returned in buffer_addr does not terminate with a new line character (\n).

The descriptive error strings are contained in LUASTR.DLL (for Windows) or LUAST32.DLL (for Windows NT) and can be customized for different languages.


Asynchronous Notification Via Events: Overview

The Event method has been designed for the Win32 environment to allow for the porting of OS/2 semaphore based applications to the Windows environment.  Support for this will be provided by calling the RUI or SLI entry points.  Using this method, the user application is notified of the completion of an asynchronous request via the signaling of an event.


RUI( ) / SLI( )

Provides event notification for all RUI and SLI verbs.

Syntax

void WINAPI RUI (lpVCB);

void WINAPI SLI (1pVCB);

Returns

The value returned in lua_prim_rc indicates whether asynchronous notification will occur. If the field is set to LUA_IN_PROGRESS, asynchronous notification will occur via event signaling. If the flag is not LUA_IN_PROGRESS, the request completed synchronously. Examine the primary return code and secondary return code for any errors.

Remarks

The application must provide a handle to an event in the lua_post_handle parameter of the verb control block. The event must be in the not-signaled state.

When the asynchronous operation is complete, the application is notified via the signaling of the event. Upon signaling of the event, examine the primary return code and secondary return code for any error conditions.

See Also

WinRUI( )/WinSLI( )


RUI_BID

Notifies the RUI application that a message is waiting to be read using RUI_READ.

Syntax

lua_opcode	unsigned short int
lua_prim_rc	unsigned short int
lua_sec_rc	unsigned long int
lua_verb	unsigned short int
lua_verb_length	unsigned short int
lua_luname	unsigned char
lua_post_handle	unsigned long int
lua_correlator	unsigned long int
lua_sid	unsigned long int
lua_data_length	unsigned int
lua_peek_data	unsigned char[12]
lua_th	struct (unsigned) char
lua_rh	struct (unsigned) char
lua_message_type	unsigned char
lua_flag2.async	struct (unsigned) char
lua_flag2.sscp_exp	struct member (unsigned) char
lua_flag2.sscp_norm	struct member (unsigned) char
lua_flag2.lu_exp	struct member (unsigned) char
lua_flag2.lu_norm	struct member (unsigned) char
Remarks

RUI_BID is used by applications that require notification that a message is waiting to be read. This allows the application to determine how it will handle the message before issuing RUI_READ.

When a message is available, RUI_BID returns with details of the message flow on which it was received, the message type, the TH and RH of the message, and up to 12 bytes of message data.

The main difference between RUI_BID and RUI_READ is that RUI_BID allows the application to check the data without removing it from the incoming message queue, so it can be left and accessed at a later stage. RUI_READ removes the message from the queue, so once the application has read the data it must process it.


RUI_INIT

RUI_INIT establishes a session between the SSCP and the specified LU.

Note  For 3270 emulator users, an SNA Server extension has been added that allows you to use 3270 LUs, rather than the LUA LUs.

Syntax

lua_opcode	unsigned short int
lua_prim_rc	unsigned short int
lua_sec_rc	unsigned long int
lua_verb	unsigned short int
lua_verb_length	unsigned short int
lua_luname	unsigned char
lua_encr_decr_option	unsigned char
lua_post_handle	unsigned long int
lua_correlator	unsigned long int
lua_sid	unsigned long int
lua_flag2.async	struct member (unsigned) char


RUI_PURGE

Cancels a previous RUI_READ.

Syntax

lua_opcode	unsigned short int
lua_prim_rc	unsigned short int
lua_sec_rc	unsigned long int
lua_verb	unsigned short int
lua_verb_length	unsigned short int
lua_luname	unsigned char
lua_sid	unsigned long int
lua_data_ptr	char far *
lua_post_handle	unsigned long int
lua_correlator	unsigned long int
lua_flag2.async	struct member (unsigned) char


RUI_READ

Receives responses, SNA commands, and data into a Windows LUA application's buffer.

Syntax

lua_opcode	unsigned short int
lua_prim_rc	unsigned short int
lua_sec_rc	unsigned long int
lua_verb	unsigned short int
lua_verb_length	unsigned short int
lua_luname	unsigned char
lua_sid	unsigned long int
lua_max_length	unsigned int
lua_data_length	unsigned int
lua_data_ptr	char far *
lua_post_handle	unsigned long int
lua_flag1.bid_enable	struct member (unsigned) char
lua_flag1.nowait	struct member (unsigned) char
lua_flag1.sscp_exp	struct member (unsigned) char
lua_flag1.sscp_norm	struct member (unsigned) char
lua_flag1.lu_exp	struct member (unsigned) char
lua_flag1.lu_norm	struct member (unsigned) char
lua_correlator	unsigned long int
lua_th	struct (unsigned) char
lua_rh	struct (unsigned) char
lua_message_type	unsigned char
lua_flag2.async	struct member (unsigned) char
lua_flag2.bid_enable	struct member (unsigned) char
lua_flag2.sscp_exp	struct member (unsigned) char
lua_flag2.sscp_norm	struct member (unsigned) char
lua_flag2.lu_exp	struct member (unsigned) char
lua_flag2.lu_norm	struct member (unsigned) char
You can specify a particular message flow (LU normal, LU expedited, SSCP normal, or SSCP expedited) from which to read data, or you can specify more than one message flow. You can have multiple RUI_READ verbs outstanding, provided that no two of them specify the same flow.

Data is received by the application on one of four session flows. The four session flows, from highest to lowest priority are:

•	SSCP expedited

•	LU expedited

•	SSCP normal

•	LU normal

The data flow type that RUI_READ is to process is specified in the lua_flag1 parameter. The application can also specify whether it wants to look at more than one type of data flow. When multiple flow bits are set, the highest priority is received first. When RUI_READ completes processing, lua_flag2 indicates the specific type of flow for which data has been received by the Windows LUA application.

If RUI_BID successfully completes before an RUI_READ is issued, the Windows LUA interface can be instructed to reuse the last RUI_BID verb's VCB. To do this, issue the RUI_READ with lua_flag1.bid_enable set.

When using lua_flag1.bid_enable, the RUI_BID storage must not be freed since the last RUI_BID verb's VCB is used. Also, when using lua_flag1.bid_enable, the successful completion of RUI_BID will be posted.

If RUI_READ is issued with lua_flag1.nowait when no data is available to receive, LUA_NO_DATA will be the secondary return code set by the Windows LUA interface.


RUI_TERM

Ends both the LU session and the SSCP session for a given LUA LU.

Syntax

lua_opcode	unsigned short int
lua_prim_rc	unsigned short int
lua_sec_rc	unsigned long int
lua_verb	unsigned short int
lua_verb_length	unsigned short int
lua_luname	unsigned char
lua_sid	unsigned long int
lua_post_handle	unsigned long int
lua_correlator	unsigned long int
lua_flag2.async	struct member (unsigned) char


RUI_WRITE

Sends an SNA request or response unit from the LUA application to the host, over either the LU session or the SSCP session.

Syntax

lua_opcode	unsigned short int
lua_prim_rc	unsigned short int
lua_sec_rc	unsigned long int
lua_verb	unsigned short int
lua_verb_length	unsigned short int
lua_luname	unsigned char
lua_sid	unsigned long int
lua_data_length	unsigned int
lua_data_ptr	char far *
lua_post_handle	unsigned long int
lua_th.snf	struct member (unsigned) char
lua_rh	struct (unsigned) char
lua_flag1.sscp_exp	struct member (unsigned) char
lua_flag1.sscp_norm	struct member (unsigned) char
lua_flag1.lu_exp	struct member (unsigned) char
lua_flag1.lu_norm	struct member (unsigned) char
lua_correlator	unsigned long int
lua_th	struct (unsigned) char
lua_flag2.async	struct member (unsigned) char
lua_flag2.sscp_exp	struct member (unsigned) char
lua_flag2.sscp_norm	struct member (unsigned) char
lua_flag2.lu_exp	struct member (unsigned) char
lua_flag2.lu_norm	struct member (unsigned) char
Remarks

When sending an SNA request, all applicable values in the lua_rh must be set. Chaining and bracketing are the responsibility of the application.

When sending a response, the type of response determines the RUI_WRITE information required. For all responses, you must:

•	Set the selected lua_rh.rri flag to 1.

•	Provide the sequence number in lua_th.snf for the request to which you are responding.

For multichain message responses, the sequence number of the last received chain element must be used. For a response to a multichain message ending with a CANCEL command, the CANCEL command sequence number is used.

For positive responses that only require the request code, set lua_rh.ri to 0 (indicating that the response is positive) and lua_data_length to 0 (indicating that no data is provided). The request code is filled in by the RUI, using the sequence number provided.

For negative responses, set lua_rh.ri to 1, lua_data_ptr to the SNA sense code address, and lua_data_length to the SNA sense code length (4 bytes). The sequence number is used by the RUI to fill in the request code.

For positive responses to the BIND and STSN commands which require data in the responses, set lua_data_ptr to point to the response and set lua_data_length to the length of the data provided in lua_data_ptr.


SLI_BID

Notifies the SLI application that a message is waiting to be read using SLI_RECEIVE. SLI_BID also provides the current status of the session to the Windows LUA application.

Syntax

lua_verb	unsigned short int
lua_verb_length	unsigned short int
lua_opcode	unsigned short int
lua_correlator	unsigned long int
lua_luname	unsigned char
lua_sid	unsigned long int
lua_post_handle	unsigned long int
lua_prim_rc	unsigned short int
lua_sec_rc	unsigned long int
lua_data_length	unsigned long int
lua_peek_data	unsigned char (up to 12 bytes)
lua_th	struct (unsigned char)
lua_rh	struct (unsigned char)
lua_message_type	unsigned char
lua_flag2	struct (unsigned char)
Remarks

If both SLI_BID and SLI_RECEIVE are active when session status is obtainable, the status is posted to SLI_BID only.

SLI_BID:

•	Notifies a Windows LUA application that a message is waiting to be read.

•	Provides the current session status.

•	Provides a preview of the next message that will be read by SLI_RECEIVE.

This preview contains a maximum of 12 bytes of information (peek data) that enables the Windows LUA application to define its processing strategy for the data.

To use SLI_BID within a Windows LUA application, issue SLI_BID. When the verb completes, it may be reactivated in the following two ways:

•	Reissue SLI_BID.

•	Issue SLI_RECEIVE with lua_flag1_bid_enable set to 1. This issues an SLI_BID that uses the most recently accepted address for the VCB and establishes the active bid.

Each session can have only one SLI_BID at a time.

If multiple messages are available when a Windows LUA application issues SLI_BID, the data flow with the highest priority is returned. The order in which the data can be returned is as follows:

•	SSCP expedited

•	LU expedited

•	SSCP normal

•	LU normal

If SLI_RECEIVE has flags set to read more than one type of message flow, the data actually returned by SLI_BID might be for a flow different than the one for which you actually receive data via SLI_RECEIVE. This situation occurs when higher priority data arrives from the host after SLI_BID completes processing, but before SLI_RECEIVE is issued.

To ensure that SLI_RECEIVE reads the data, the SLI_BID returned specifies the flow that matches lua_flag2 returned by the completed SLI_BID.

Session Status Return Codes

If LUA_STATUS is the primary return code, the secondary return code may be LUA_READY, LUA_NOT_READY, LUA_SESSION_END_REQUESTED, or LUA_INIT_COMPLETE. In addition, if LUA_STATUS is the primary return code, the following parameters are used:

•	lua_sec_rc

•	lua_sid

LUA_READY is returned after LUA_NOT_READY status and indicates that the SLI is again ready to perform all commands.

LUA_NOT_READY indicates that the SLI session is suspended because the SLI has received either an SNA CLEAR command or an SNA UNBIND command with an X'02' UNBIND type (UNBIND with BIND forthcoming). Depending on what caused the suspension, the session can be reactivated as follows:

•	When the suspension is caused by an SNA CLEAR, receiving an SNA SDT reactivates the session.

•	When an SNA UNBIND type BIND forthcoming causes suspension of the session and the SLI_OPEN that opened the session is completed, the session is suspended until the SLI receives a BIND and SDT command. The session can also optionally receive an STSN command. As a result, user-supplied routines issued with the initial SLI_OPEN must be re-entered because they will be recalled.

The application can send SSCP data after a CLEAR or UNBIND type BIND forthcoming arrives and before the NOT READY status is read. The application can send and receive SSCP data after reading a NOT READY.

When an SNA UNBIND type BIND forthcoming arrives before completion of the SLI_OPEN that opened the session, LUA_SESSION_FAILURE (not LUA_STATUS) is the primary return code.

LUA_SESSION_END_REQUESTED indicates that the application received an SNA SHUTD from the host. The Windows LUA application should issue SLI_CLOSE to close the session when convenient.

LUA_INIT_COMPLETE is returned only when lua_init_type for SLI_OPEN is LUA_INIT_TYPE_PRIM_SSCP. The status means that SLI_OPEN has been processed sufficiently to allow SSCP data to now be sent or received.

Exception Requests

If a host application request unit is converted into an EXR, sense data will be returned. When an SLI_BID completes with the following returned verb parameters set as shown, an EXR conversion occurs:

Parameter	Set to
lua_prim_rc	OK (X'0000')
lua_sec_rc	OK (X'00000000')
lua_rh.rri	bit off (request unit)
lua_rh.sdi	bit on (includes sense data)
Of the seven bytes of data in lua_peek_data, bytes 0 through 3 define the error detected. The following table indicates possible sense data and the values of bytes 0 through 3.

Sense data	Value of bytes 0-3
LUA_MODE_INCONSISTENCY	X08090000
LUA_BRACKET_RACE_ERROR	X080B0000
LUA_BB_REJECT_NO_RTR	X08130000
LUA_RECEIVER_IN_TRANSMIT_MODE	X081B0000
LUA_CRYPTOGRAPHY_FUNCTION_INOP	X08480000
LUA_SYNC_EVENT_RESPONSE	X10010000
LUA_RU_DATA_ERROR	X10020000
LUA_RU_LENGTH_ERROR	X10020000
LUA_INCORRECT_SEQUENCE_NUMBER	X20010000
The information returned to bytes 3 through 6 in lua_peek_data is determined by the first 3 bytes of the initial request unit that caused the error.


SLI_CLOSE

Ends a session opened with SLI_OPEN. The LU-LU and LU-SSCP resources are released.

Syntax

lua_verb	unsigned short int
lua_verb_length	unsigned short int
lua_opcode	unsigned short int
lua_correlator	unsigned long int
lua_luname	unsigned char
lua_sid	unsigned long int
lua_post_handle	unsigned long int
lua_flag1.close_abend	struct (unsigned char)
lua_prim_rc	unsigned short int
lua_sec_rc	unsigned long int
lua_flag2.async	struct (unsigned char)
Remarks

There are two types of SLI_CLOSE: normal and ABEND. For a normal close, lua_flag1.close_abend is set to 0. The sequence for a normal close can be initiated either as primary (host-initiated) or secondary (requested by a Windows LUA application). During a primary normal close, the Windows LUA interface:

•	Reads the SHUTD command and posts the SESSION_END REQUESTED status to the application.

•	Writes the CHASE command (if necessary).

•	Reads and processes the CHASE command response (if necessary).

•	Writes the shutdown complete (SHUTC) command.

•	Reads and processes the SHUTC command response.

•	Reads and processes the CLEAR command (if necessary).

•	Writes the CLEAR command response (if necessary).

•	Reads and processes the UNBIND command.

•	Writes the UNBIND command response.

•	Stops the session.

During a secondary normal close, the Windows LUA interface:

•	Writes the RSHUTD command.

•	Reads and processes the RSHUTD command response.

•	Reads and processes the CLEAR command (if necessary).

•	Writes the CLEAR command response (if necessary).

•	Reads and processes the UNBIND command.

•	Writes the UNBIND command response.

•	Stops the session.

For an ABEND close, lua_flag1.close_abend is set to 1, which directs the Windows LUA interface to close the session immediately. After SLI_CLOSE starts processing, the LU-LU connection is terminated and the SSCP is informed that the LU is not capable of sustaining a session.


SLI_OPEN: Description and Syntax

Transfers control of the specified LU to the Windows LUA application. SLI_OPEN establishes a session between the SSCP and the specified LU, as well as an LU-LU session.

Syntax

lua_verb	unsigned short int
lua_verb_length	unsigned short int
lua_opcode	unsigned short int
lua_correlator	unsigned long int
lua_luname	unsigned char
lua_data_length	unsigned int
lua_data_ptr	char far *
lua_post_handle	unsigned long int
lua_encr_decr_option	unsigned char
lua_init_type	unsigned char
lua_wait	unsigned short int
lua_extension_list_offset	unsigned short int
lua_routine_type	unsigned char
lua_module_name	unsigned char
lua_procedure_name	unsigned char
lua_prim_rc	unsigned short int
lua_sec_rc	unsigned long int
lua_sid	unsigned long int
lua_flag2.async	struct (unsigned char)
See Also

SLI_OPEN: Remarks


SLI_OPEN: Remarks

For each SLI_OPEN, the Windows LUA interface:

•	Starts the communication session.

•	Reads and verifies a BIND command from the host, and passes it to the application if a BIND extension routine is supplied.

•	Writes a BIND response.

•	Reads and processes the STSN command and passes it to the application if a BIND extension is supplied (if necessary).

•	Writes the STSN response (if necessary).

•	Reads the CRV command (if necessary).

•	Writes the CRV response (if necessary).

•	Reads and processes the SDT command.

•	Writes the SDT response.

The Windows LUA interface does the following additional functions for sessions that issue SLI_OPEN with the open type set to LUA_INIT_TYPE_SEC_IS or LUA_INIT_TYPE_SEC_LOG:

•	Writes an INITSELF or an unformatted LOGON message

•	Reads and processes an INITSELF response or LOGON message response

All SNA message traffic is administered by SLI_OPEN through the SDT command response.

To choose a certain LU configured for Windows LUA, the application sets lua_luname to the LU name in ASCII, padded with trailing spaces if necessary.

When SLI_OPEN is posted with LUA_OK in the lua_prim_rc parameter, SLI_OPEN successfully completed and the LU-LU data-flow session was established. The application can now issue SLI_BID, SLI_CLOSE, SLI_PURGE, SLI_RECEIVE, and SLI_SEND.

When SLI_OPEN is posted with a primary return code other than LUA_OK or LUA_IN_PROGRESS, the command did not successfully establish a session.

When using SLI_OPEN, a Windows LUA application must provide a session initialization type. Valid types are:

•	Secondary with INITSELF

•	Secondary with an unformatted LOGON message

•	Primary waiting for a BIND command

•	Primary with SSCP access

Each of these session initialization types is described in the following sections.

Secondary with INITSELF

To initialize a session by having the secondary issue an INITSELF command, set lua_init_type to LUA_INIT_TYPE_SEC_IS. When this type of session initialization is chosen, the application has to format and provide the INITSELF command. The address of the INITSELF command is specified by lua_data_ptr. The actual length of the INITSELF command is specified by lua_data_length.

Secondary with an Unformatted LOGON Message

To initialize a session by having the secondary issue an unformatted LOGON message, set lua_init_type to LUA_INIT_TYPE_SEC_LOG. The length of the user's EBCDIC LOGON message is then specified in lua_data_length. The address of the user's EBCDIC LOGON message length is specified by lua_data_ptr.

Primary Waiting for a BIND Command

To initialize a session by having the secondary wait for the primary to issue a BIND and SDT, set lua_init_type to LUA_INIT_TYPE_PRIM. Until the host begins a session with the Windows LUA application using the BIND command followed by an SDT command, the SLI_OPEN issued stays IN_PROGRESS.

Primary with SSCP Access

To initialize a session by having the SLI wait for a BIND and SDT but allow SSCP access, set lua_init_type to LUA_INIT_TYPE_PRIM_SSCP. Rather than sending commands to the host to begin a session, the SLI allows the Windows LUA application to issue SLI_SEND and SLI_RECEIVE for the SSCP normal flow only. This allows the INITSELF commands or LOGON messages and responses to be transmitted between the Windows LUA application and the host. The application can have more than one INITSELF and LOGON message. For this type of session only, other SLI verbs can be issued before SLI_OPEN completes. To obtain the INIT_COMPLETE status, the application must first issue SLI_OPEN, and then issue either SLI_BID or SLI_RECEIVE. The INIT_COMPLETE status notifies the application that the SLI_SEND and SLI_RECEIVE verbs for SSCP normal flow data can be issued.

BIND, CRV, and STSN Routines

For BIND and STSN routines supplied by the application, the names of DLLs and the entry points for procedures are passed in the SLI_OPEN verb's VCB. During SLI_OPEN, the BIND and STSN routines are called if the appropriate SNA request is received. When a BIND routine is not supplied by the application, the SLI performs a minimal check of the BIND commands and responds as necessary. If no STSN routine is supplied and an STSN request arrives, a positive response is issued by the SLI. If a CRV request arrives, a negative response is issued by the SLI.

Names for BIND and STSN routines are provided as extensions of the SLI_OPEN verb's VCB. The lua_extension_list_offset parameter provides the offset from the start of the VCB to the first name in the extension list.

Recovering from SESSION_FAILURE

If the SLI_OPEN completes with the primary return code of SESSION_FAILURE, the Windows LUA interface allows you to reissue SLI_OPEN without issuing SLI_CLOSE.

Ending a Pending SLI_OPEN

To end a pending SLI_OPEN, issue SLI_CLOSE with lua_flag2.close_abend set to on.

The lua_wait Parameter

Supplied parameter; provides the number of seconds the Windows LUA interface is to wait before retrying the transmission of the INITSELF or the LOGON message after the host sends any one of these messages:

•	A negative response and the secondary return code is one of the following:

RESOURCE_NOT_AVAILABLE (X'08010000')

SESSION_LIMIT_EXCEEDED (X'08050000')

SESSION_SERVICE_PATH_ERROR (X'087D0000')

Note that SLI_OPEN terminates with error if lua_wait is set to 0 and one of the above occurs.

•	A network services procedure error (NSPE) message.

•	A NOTIFY command, which indicates a procedure error.

See Also

SLI_OPEN: Description and Syntax


SLI_PURGE

Cancels SLI_RECEIVE verbs issued with a wait condition.

Syntax

lua_verb	unsigned short int
lua_verb_length	unsigned short int
lua_opcode	unsigned short int
lua_correlator	unsigned long int
lua_luname	unsigned char
lua_sid	unsigned long int
lua_data_ptr	char far *
lua_post_handle	unsigned long int
lua_prim_rc	unsigned short int
lua_sec_rc	unsigned long int
lua_flag2.async	struct (unsigned char)
Remarks

SLI_PURGE cancels SLI_RECEIVE commands with a wait condition.

Typically, SLI_PURGE is issued if SLI_RECEIVE takes too long to complete. To cancel an SLI_RECEIVE, lua_data_ptr has to point to the SLI_RECEIVE VCB to cancel. The primary return code of the SLI_RECEIVE will be set to LUA_CANCELED when SLI_PURGE succeeds in canceling SLI_RECEIVE.


SLI_RECEIVE

Receives responses, SNA commands, and data into a Windows LUA application's buffer. SLI_RECEIVE also provides the current status of the session to the Windows LUA application.

Syntax

lua_verb	unsigned short int
lua_verb_length	unsigned short int
lua_opcode	unsigned short int
lua_correlator	unsigned long int
lua_luname	unsigned char
lua_sid	unsigned long int
lua_max_length	unsigned int
lua_data_ptr	char far *
lua_post_handle	unsigned long int
lua_flag1.bid_enable	struct (unsigned char)
lua_flag1.nowait	struct (unsigned char)
lua_flag1.sscp_exp	struct (unsigned char)
lua_flag1.sscp_norm	struct (unsigned char)
lua_flag1.lu_exp	struct (unsigned char)
lua_flag1.lu_norm	struct (unsigned char)
lua_prim_rc	unsigned short int
lua_sec_rc	unsigned long int
lua_data_length	unsigned long int
lua_th	struct (unsigned char)
lua_rh	struct (unsigned char)
lua_message_type	unsigned char
lua_flag2.async	struct (unsigned char)
lua_flag2.sscp_exp	struct (unsigned char)
lua_flag2.sscp_norm	struct (unsigned char)
lua_flag2.lu_exp	struct (unsigned char)
lua_flag2.lu_norm	struct (unsigned char)
Parameter	Description
lua_data_ptr	Supplied parameter; points to the application data buffer.
lua_data_length	Returned parameter; specifies the length of the data being sent or received.
Remarks

SLI_RECEIVE receives responses, SNA commands, and request unit data from the host. SLI_RECEIVE also provides the status of the session to the Windows LUA application. An SLI_OPEN request must complete before SLI_RECEIVE can be issued. However, if SLI_OPEN is issued with lua_init_type set to LUA_INIT_TYPE_PRIM_SSCP, an SLI_RECEIVE over the SSCP normal flow may be issued as soon as SLI_OPEN returns an IN_PROGRESS.

Data is received by the application in one of four session flows. The four session flows, from highest to lowest priority are:

•	SSCP expedited

•	LU expedited

•	SSCP normal

•	LU normal

The data flow type that SLI_RECEIVE will process is specified in lua_flag1. The application can also specify whether it wants to look at more than one type of data flow. When multiple flow bits are set, the highest priority is received first. When SLI_RECEIVE completes processing, lua_flag2 indicates the specific type of flow for which data has been received by the Windows LUA application.

If SLI_BID successfully completes before SLI_RECEIVE is issued, the Windows LUA interface can be instructed to reuse the last SLI_BID verb's VCB. To do this, issue SLI_RECEIVE with lua_flag1.bid_enable set.

When using lua_flag1.bid_enable, the SLI_BID storage must not be freed since the last SLI_BID verb's VCB is used. Also, when using lua_flag1.bid_enable, the successful completion of SLI_BID will be posted.

If SLI_RECEIVE is issued with lua_flag1.nowait when no data is available to receive, LUA_NO_DATA will be the secondary return code set by the Windows LUA interface.

Session Status Return Codes

If LUA_STATUS is the primary return code, the secondary return code may be LUA_READY, LUA_NOT_READY, LUA_SESSION_END_REQUESTED, or LUA_INIT_COMPLETE. In addition, if LUA_STATUS is the primary return code, the following parameters are used:

•	lua_sec_rc

•	lua_sid

LUA_READY is returned after an LUA_NOT_READY status and indicates that the SLI is again ready to perform all commands.

LUA_NOT_READY indicates that the SLI session is suspended because the SLI has received either an SNA CLEAR command or an SNA UNBIND command with an X'02' UNBIND type (UNBIND with BIND forthcoming). Depending on what caused the suspension, the session can be reactivated as follows:

•	When the suspension is caused by an SNA CLEAR, receiving an SNA SDT reactivates the session.

•	When an SNA UNBIND type BIND forthcoming causes suspension of the session and the SLI_OPEN that opened the session is completed, the session is suspended until the SLI receives a BIND and SDT command. The session can also optionally receive an STSN command. As a result, user-supplied routines issued with the initial SLI_OPEN must be re-entered because they will be recalled.

The application can send SSCP data after a CLEAR or UNBIND type BIND forthcoming arrives and before the NOT READY status is read. The application can send and receive SSCP data after reading a NOT READY.

When an SNA UNBIND type BIND forthcoming arrives before completion of the SLI_OPEN that opened the session, LUA_SESSION_FAILURE (not LUA_STATUS) is the primary return code.

LUA_SESSION_END_REQUESTED indicates that the application received an SNA SHUTD from the host. The Windows LUA application should issue SLI_CLOSE to close the session when convenient.

LUA_INIT_COMPLETE is returned only when lua_init_type for SLI_OPEN is LUA_INIT_TYPE_PRIM_SSCP. The status means that the SLI_OPEN has been processed sufficiently to allow SSCP data to now be sent or received.

Exception Requests

If a host application request unit is converted into an EXR, sense data will be returned. When SLI_BID completes with the following returned verb parameters set as shown, an EXR conversion occurs:

Parameter	Set to
lua_prim_rc	OK (X'0000')
lua_sec_rc	OK (X'00000000')
lua_rh.rri	bit off (request unit)
lua_rh.sdi	bit on (includes sense data)
Of the 7 bytes of data in lua_peek_data, bytes 0 through 3 define the error detected. The following table indicates possible sense data and the values of bytes 0 through 3.

Sense data	Value of bytes 0-3
LUA_MODE_INCONSISTENCY	X08090000
LUA_BRACKET_RACE_ERROR	X080B0000
LUA_BB_REJECT_NO_RTR	X08130000
LUA_RECEIVER_IN_TRANSMIT_MODE	X081B0000
LUA_CRYPTOGRAPHY_FUNCTION_INOP	X08480000
LUA_SYNC_EVENT_RESPONSE	X10010000
LUA_RU_DATA_ERROR	X10020000
LUA_RU_LENGTH_ERROR	X10020000
LUA_INCORRECT_SEQUENCE_NUMBER	X20010000
The information returned to bytes 3 through 6 in lua_peek_data is determined by the first 3 bytes of the initial request unit that caused the error.


SLI_SEND

Sends responses, SNA commands, and data from a Windows LUA application to a host LU.

Syntax

lua_verb	unsigned short int
lua_verb_length	unsigned short int
lua_opcode	unsigned short int
lua_correlator	unsigned long int
lua_luname	unsigned char
lua_sid	unsigned long int
lua_data_length	unsigned int
lua_data_ptr	char far *
lua_post_handle	unsigned long int
lua_th.snf	struct (unsigned char)
lua_rh	unsigned char
lua_message_type	unsigned char
lua_flag1.sscp_exp	struct (unsigned char)
lua_flag1.sscp_norm	struct (unsigned char)
lua_flag1.lu_exp	struct (unsigned char)
lua_flag1.lu_norm	struct (unsigned char)
lua_data_length	unsigned long int
lua_prim_rc	unsigned short int
lua_sec_rc	unsigned long int
lua_th	struct (unsigned char)
lua_flag2.async	struct (unsigned char)
lua_flag2.sscp_exp	struct (unsigned char)
lua_flag2.sscp_norm	struct (unsigned char)
lua_flag2.lu_exp	struct (unsigned char)
lua_flag2.lu_norm	struct (unsigned char)
lua_sequence_number	unsigned char
Parameter	Description
lua_flag1.sscp_exp	Supplied parameter; flag indicates SSCP expedited flow.
lua_flag1.sscp_norm	Supplied parameter; flag indicates SSCP normal flow.
lua_flag1.lu_exp	Supplied parameter; flag indicates LU expedited flow.
lua_flag1.lu_norm	Supplied parameter; flag indicates LU normal flow.
Remarks

SLI_SEND sends responses, SNA commands, and data from the Windows LUA application to a host LU. A session must already be open to issue SLI_SEND for a particular LU-LU session flow. To send data on the SSCP normal flow prior to the completion of SLI_OPEN, the session must have been initialized as primary with SSCP access. In addition, the session status must be INIT_COMPLETE.

The settings for lua_message_type determine the type of processing that will be done by SLI_SEND. The following table indicates the parameters to set based on the value of lua_message_type.

The location provided in lua_data_ptr and the length provided in lua_data_length determines the data that the SLI sends. The data will be chained by the SLI verbs if necessary.

When sending a response, the type of response determines the SLI_SEND information required. For all responses, you must:

•	Set the selected lua_flag1 flow flag.

•	Provide the sequence number in lua_th.snf for the request to which you are responding.

•	Set lua_message_type to LUA_MESSAGE_TYPE_RSP.

For multichain message responses, the sequence number of the last received chain element must be used. For a response to a multichain message ending with a CANCEL command, the CANCEL command sequence number is used.

For positive responses that only require the request code, set lua_rh.ri to 0 (indicating that the response is positive) and lua_data_length to 0 (indicating no data is provided). The request code is filled in by the SLI, using the sequence number provided.

For negative responses in which lua_rh.ri is set to 1, set the lua_data_ptr to the SNA sense code address and the lua_data_length to the SNA sense code length (4 bytes). The sequence number is used by the SLI to fill in the request code.


SLI_BIND_ROUTINE

Notifies the Windows LUA application that a BIND request has come from the host and allows the user-supplied routine to examine the request and formulate a response.

Syntax

lua_verb	unsigned short int
lua_verb_length	unsigned short int
lua_opcode	unsigned short int
lua_luname	unsigned char
lua_sid	unsigned long int
lua_data_length	unsigned int
lua_data_ptr	char far *
lua_th	struct (unsigned char)
lua_rh	unsigned char
lua_sec_rc	unsigned long int
lua_prim_rc	unsigned short int
lua_message_type	unsigned short int
Remarks

SLI_BIND_ROUTINE provides a mechanism for the Windows LUA application to examine BIND requests that are received from the host. The Windows LUA uses a user-supplied DLL to notify the Windows LUA application that a BIND request has been received. The user-supplied DLL routine then examines the contents of the BIND and formulates a response for the request.

The DLL name for the routine is provided as extensions of the SLI_OPEN verb's VCB. The lua_extension_list_offset parameter provides the offset from the start of the VCB to the first name in the extension list.

The Windows LUA interface assigns storage space where the VCB is structured. The VCB of SLI_BIND_ROUTINE contains lua_th and lua_rh. The address of the BIND RU is specified in lua_data_ptr and the length of the RU is specified in lua_data_length.

When SLI_BIND_ROUTINE returns to the Windows LUA, processing of SLI_BIND_ROUTINE is completed. The BIND response should overwrite the BIND RU. When the BIND is accepted, the primary return code should be set to LUA_OK. If the BIND is rejected, the primary return code should be set to LUA_NEGATIVE_RSP and the BIND buffer contains the negative sense code. The lua_data_ptr parameter should not be modified.

If a negative response is returned from SLI_BIND_ROUTINE, SLI_OPEN is canceled. The lua_prim_rc of the SLI_OPEN is set to LUA_SESSION_FAILURE, and the lua_sec_rc is set to LUA_NEG_RSP_FROM_BIND_ROUTINE.


SLI_STSN_ROUTINE

Notifies the Windows LUA application that an STSN command has come from the host and allows the user-supplied routine to examine the request and formulate a response.

Syntax

lua_verb	unsigned short int
lua_verb_length	unsigned short int
lua_opcode	unsigned short int
lua_luname	unsigned char
lua_sid	unsigned long int
lua_data_length	unsigned int
lua_data_ptr	char far *
lua_th	struct (unsigned char)
lua_rh	unsigned char
lua_message_type	unsigned short int
lua_prim_rc	unsigned short int
lua_sec_rc	unsigned long int
Remarks

SLI_STSN_ROUTINE provides a mechanism for the Windows LUA application to examine and respond to STSN commands. The Windows LUA notifies the Windows LUA application that an STSN command has been received from the host. This is done through a user-supplied DLL. The user's DLL examines the STSN request and formulates a response to the request.

The DLL name for the routine is provided as extensions of the SLI_OPEN verb's VCB. The lua_extension_list_offset parameter provides the offset from the start of the VCB to the first name in the extension list.

The Windows LUA interface assigns storage space where the VCB is structured. The VCB of the SLI_STSN_ROUTINE contains lua_th and lua_rh. The address of the STSN RU is specified in lua_data_ptr and the length of the RU is specified in lua_data_length.

When SLI_STSN_ROUTINE returns to the Windows LUA, processing of the SLI_STSN_ROUTINE is completed. The STSN response should overwrite the STSN RU. When the STSN is accepted, the primary return code should be set to LUA_OK. If the STSN is rejected, the primary return code should be set to LUA_NEGATIVE_RSP and the STSN buffer contains the negative sense code. The lua_data_ptr parameter should not be modified.

If a negative response is returned from SLI_STSN_ROUTINE, SLI_OPEN is canceled. The lua_prim_rc of the SLI_OPEN is set to LUA_SESSION_FAILURE, and the lua_sec_rc is set to LUA_NEG_RSP_FROM_STSN_ROUTINE.


Common Structure of LUA VCBs

When an application issues a Windows LUA verb, the verb is coded within the application as a precisely defined VCB. The total length of this VCB is variable and is defined by lua_verb_length.

The following table gives the length and offset into the VCB of each parameter that is common to all Windows LUA verbs.

Common VCB Structure

Type	Parameter
unsigned short	lua_verb Specifies the Windows LUA verb code. It must always contain a value of X'5200'.
unsigned short	lua_verb_length Specifies the VCB length. It must contain the length of the verb being issued.
unsigned short	lua_prim_rc Provides the primary return code, which is set by the Windows LUA when the verb completes.
unsigned long	lua_sec_rc Provides the secondary return code, which is set by the Windows LUA when the verb completes.
unsigned short	lua_opcode This parameter specifies the Windows LUA command to be executed. Valid values are as follows: X'0100' LUA_OPCODE_SLI_OPEN X'0200' LUA_OPCODE_SLI_CLOSE X'0300' LUA_OPCODE_SLI_RECEIVE X'0400' LUA_OPCODE_SLI_SEND X'0500' LUA_OPCODE_SLI_PURGE X'0600' LUA_OPCODE_SLI_BID X'1100' LUA_OPCODE_SLI_BIND_ROUTINE X'1200' LUA_OPCODE_SLI_STSN_ROUTINE X'1300' LUA_OPCODE_SLI_CRV_ROUTINE X'0180' LUA_OPCODE_RUI_INIT X'0280' LUA_OPCODE_RUI_TERM X'0380' LUA_OPCODE_RUI_READ X'0480' LUA_OPCODE_RUI_WRITE X'0580' LUA_OPCODE_RUI_PURGE X'0680' LUA_OPCODE_RUI_BID
unsigned long	lua_correlator Specifies the user-supplied value that links the verb with other user-supplied information. This parameter is neither examined nor modified by the Windows LUA interface.
unsigned char   (8 bytes)	lua_luname Specifies the ASCII name for the local LU to be used for the Windows LUA session. The name must be 8 characters in length and should be padded with spaces (on the right) if the name is less than 8 characters long. SLI_OPEN and RUI_INIT require this parameter. Other Windows LUA verbs require this parameter only if lua_sid is 0.
unsigned short	lua_extension_list_offset Specifies the offset from the start of the VCB to the extension list of user-supplied DLLs. The value must be the beginning of a word boundary unless there is no extension list. In this case, the value must be set to 0.
unsigned short	lua_cobol_offset Not defined in the Windows LUA standard. Set to 0.
unsigned short	lua_sid Identifies the session and is returned by SLI_OPEN and RUI_INIT. Other verbs use this parameter to identify the session used for the command. If other verbs use lua_luname to identify sessions, set lua_sid to 0.
unsigned int	lua_max_length Specifies the length of the buffer that is used to receive data.
unsigned int	lua_data_length This parameter specifies the length of the data being sent or received.
char   far *	lua_data_ptr Points to the application data buffer. Both SNA commands and data are placed in this buffer and they can be in an EBCDIC format. When SLI_RECEIVE or RUI_READ is issued, this parameter points to the location to receive the data from the host. When SLI_SEND or RUI_WRITE is issued, this parameter points to the location of the application's data to be sent to the host. When SLI_PURGE or RUI_PURGE is issued, this parameter points to the location of the SLI_RECEIVE or RUI_READ verb's VCB that is to be canceled.
	When SLI_OPEN is issued, this parameter can be one of the following: • The logon message for the SSCP normal flow when the initialization type is secondary with an unformatted logon message. • The RU for INITSELF. When the initialization type is secondary with INITSELF, the necessary data for the application is provided. • For all other open types, this field should be set to 0. This information is provided by the Windows LUA application.
unsigned long	lua_post_handle For the Windows NT environment, if asyncronous notification is to be accomplished via events, lua_post_handle contains the handle of the event to be signaled. For all other environments, this parameter is reserved and should be set to 0.
struct	lua_th Provides the SNA TH for the message. Various subparameters are to be set for write functions and returned for read functions. See the appropriate verb for details. The following are the subparameters: The first 2 bytes of lua_th. The following list gives the bit mask for bits that are not reserved and can be some value other than 0:
	X'2000' lua_th.flags_fid Identifies the format (FID) type 2.
	X'0C00' lua_th.mpf Defines the type of data segment. The following values are valid: X'00' Middle segment X'04' Last segment X'08' First segment X'0C' Only segment
	X'0200' lua_th.odai Contains the origin-address-field/data-field assignor indicator.
	X'0100' lua_th.efi Contains the expedited-flow indicator.
	lua_th.daf The third byte of lua_th. Contains the destination-address field.
	lua_th.oaf The fourth byte of lua_th. Contains the origin-address field.
	lua_th.snf The fifth and sixth bytes of lua_th. Contains the RU sequence number.
struct	lua_rh Specifies the SNA RH for the message. It is set for the write function and returned by the read and bid functions. The following list gives the bit mask for bits that are not reserved and can be set to a value other than 0:
	X'800000' lua_rh.rri The request/response indicator.
	X'600000' lua_rh.ruc The RU category. The following values are valid: LUA_RH_FMD X'00' FM data segment LUA_RH_NC  X'20' Network control LUA_RH_DFC X'40' Data flow control LUA_RH_SC  X'60' Session control
	X'080000' lua_rh.fi The format indicator.
	X'040000' lua_rh.sdi Indicates that the response has sense data included.
	X'020000' lua_rh.bci Indicates the beginning of a chain.
	X'010000' lua_rh.eci Indicates the end of a chain.
	X'008000' lua_rh.dr1i Indicates a definite-response 1.
	X'002000' lua_rh.dr2i Indicates a definite-response 2.
	X'001000' lua_rh.ri Indicates the exception-response for requests and the type of response for responses.
	X'000200' lua_rh.qri Indicates a queued-response.
	X'000100' lua_rh.pi Indicates pacing.
	X'000080' lua_rh.bbi Indicates the beginning of a bracket.
	X'000040' lua_rh.ebi Indicates the end of a bracket.
	X'000020' lua_rh.cdi Indicates a change of direction.
	X'000008' lua_rh.csi Indicates the code selection.
	X'000004' lua_rh.edi Indicates enciphered data.
	X'000002' lua_rh.pdi Indicates padded data.
struct	lua_flag1 Composed of bits that are used as input for some verbs. The following list gives the bit mask for bits that are not reserved and can be set to a value other than 0:
	High-order half-byte:
	X'80' lua_flag1.bid_enable Used by SLI_RECEIVE and RUI_READ to indicate that the previous SLI_BID or RUI_BID is to be reused and reactivated. For verbs other than SLI_RECEIVE and RUI_READ, this flag must be set to off.
	X'20' lua_flag1.close_abend Used by SLI_CLOSE to specify whether the session is to be closed immediately (ON) or closed normally (OFF). For verbs other than SLI_CLOSE, this flag has to be off.
	X'10' lua_flag1.nowait Used by SLI_RECEIVE and RUI_READ to specify that the verbs should be posted with the NO_DATA return code when no data is available to read. For verbs other than SLI_RECEIVE and RUI_READ, this flag has to be off.
	Low-order half-byte:
	X'08' lua_flag1.sscp_exp Indicates SSCP expedited flow.
	X'04' lua_flag1.sscp_norm Indicates SSCP normal flow.
	X'02' lua_flag1.lu_exp Indicates LU expedited flow.
	X'01' lua_flag1.lu_norm Indicates LU normal flow.
	Note that the low-order half-byte flags, when used for SLI_RECEIVE or RUI_READ, indicate the flows on which a message can be received. At least one of the flags has to be set, but they cannot overlap with flags set for outstanding SLI_RECEIVE or RUI_READ verbs. Also note that one and only one of these flags should be set for RUI_WRITE and SLI_SEND (lua_message_type of response only). For verbs other than SLI_RECEIVE, SLI_SEND, RUI_READ, and RUI_WRITE, these flags must be set to 0.
char (1 byte)	lua_message_type Specifies the type of the inbound or outbound SNA commands and data. For SLI_BID, SLI_RECEIVE, RUI_BID, and RUI_READ, the parameter is filled in. For SLI_SEND, this parameter must be set. For possible values of lua_message_type, see Values for lua_message_type.
struct	lua_flag2 The bits of this parameter are used as output flags for specified verbs. When the verb is initiated, the parameter should be 0. When the verb completes, bits with no specified value are reserved and set to 0. The following list gives the mask for the bits:
	X'80' lua_flag2.bid_enable Specifies successful completion of the requested bid_enable function for SLI_RECEIVE or RUI_READ, even if the SLI_RECEIVE or RUI_READ failed.
	X'40' lua_flag2.async Specifies that the LUA interface verb completes asynchronously if set.
	The following list gives the bit mask for bits that indicate the processed message session and flow:
	X'08' lua_flag2.sscp_exp Specifies SSCP expedited flow.
	X'04' lua_flag2.sscp_norm Specifies SSCP normal flow.
	X'02' lua_flag2.lu_exp Specifies LU expedited flow.
	X'01' lua_flag2.lu_norm Specifies LU normal flow.
char (7 bytes)	lua_resv56 This parameter is reserved and must be set to 0.
char (1 byte)	lua_encr_decr_option Cryptography is not supported in the Windows LUA standard.


Values for lua_message_type

Message	SLI_BID	RUI_BID
type	SNA data	SLI_SEND	SLI_RECEIVE	RUI_READ

X'31'	BIND		Extension*	X
X'70'	BIS	X	X	X
X'83'	CANCEL	X	X	X
X'84'	CHASE	X	X	X
X'A1'	CLEAR			X
X'D0'	CRV			X
X'01'	LU_DATA**	X	X	X
X'04'	LUSTAT_LU**	X	X	X
X'14'	LUSTAT_SSCP**	X	X	X
X'81'	QC	X	X	X
X'80'	QEC	X	X	X
X'82'	RELQ	X	X	X
X'A3'	RQR	X		X
X'02'	RSP	X	X
X'05'	RTR	X	X	X
X'71'	SBI	X	X	X
X'C0'	SHUTD			X
X'C9'	SIGNAL	X	X	X
X'A0'	SDT			X
X'11'	SSCP_DATA**	X	X	X
X'A2'	STSN		Extension*	X
X'32'	UNBIND			X
* The SLI receives and responds to the BIND, CRV, and STSN requests through the LUA interface extension routines. ** Not an SNA command.


SLI_OPEN VCB Structure

When an application issues a Windows LUA verb, the verb is coded within the application as a precisely defined VCB. The total length of this VCB is variable and is defined by lua_verb_length.

SLI_OPEN VCB Structure

Type	Parameter
char (1 byte)	lua_init_type Determines how the LU-LU session is initialized by the Windows LUA interface. The following values are valid: X'01' lua_init_type_sec_is Secondary-initiated and sends the INITSELF command supplied in the OPEN data buffer. X'02' lua_init_type_sec_log Secondary-initiated with an unformatted LOGON message in the OPEN data buffer. X'03' lua_init_type_prim Primary-initiated and waits on the BIND command. X'04' lua_init_type_prim_sscp Primary-initiated with SSCP access.
char (1 byte)	lua_resv65 Reserved and must be set to 0.
2	lua_wait Specifies how many seconds the Windows LUA interface is to wait before retransmitting the INITSELF or the LOGON message after receiving one of the following: • A NOTIFY command (indicating a procedure error) • A network services procedure error message • A negative response with one of the following secondary return codes: RESOURCE_NOT_AVAILABLE X'08010000' SESSION_LIMIT_EXCEEDED X'08050000' SESSION_SERVICE_PATH_ERROR X'087D0000'
n	This offset length is given in lua_extension_list_offset. For BIND and STSN, the names of DLL modules and procedure entry points must be supplied to SLI_OPEN by the Windows LUA application. Each of these routines includes an entry of fixed length that defines the DLL and procedure names. The length of the list depends on the number of extension routines. The end of the list is marked by the lua_routine_type_end parameter. The following list provides the routine type, module name, and procedure name parameters.
char (1 byte)	lua_routine_type Specifies the type of routine for the noted routine. The following values are valid: X'01' LUA_ROUTINE_TYPE_BIND Specifies a bind routine. X'03' LUA_ROUTINE_TYPE_STSN Specifies the STSN routine. X'00' LUA_ROUTINE_TYPE_END Specifies the end of the extension routine list.
char (9 bytes)	Note SLI_OPEN terminates with an error if lua_wait is set to 0 and one of the preceding routine types for lua_routine_type occurs. lua_module_name The user-supplied module name in ASCII. It can be a variable length of up to 8 characters. Remaining bytes should be set to X'00'.
char (9 bytes)	lua_module_name The user-supplied module name in ASCII. It can be a variable length of up to 8 characters. Remaining bytes should be set to X'00'.
char (33 bytes)	lua_procedure_name The user-supplied DLL procedure name in ASCIIZ (a null terminated string). It can be a variable length of up to 32 characters. Remaining bytes should be set to X'00'.


SLI_BID and RUI_BID VCB Structure

When an application issues a Windows LUA verb, the verb is coded within the application as a precisely defined VCB. The total length of this VCB is variable and is defined by lua_verb_length.

SLI_BID and RUI_BID VCB Structure

Type	Parameter
char (12 bytes)	lua_peek_data For SLI_BID, this parameter is a preview (up to 12 bytes) of the RU data waiting to be read. The lua_data_length parameter contains the exact length of the data peeked.


SLI_SEND VCB Structure

When an application issues a Windows LUA verb, the verb is coded within the application as a precisely defined VCB. The total length of this VCB is variable and is defined by lua_verb_length.

SLI_SEND VCB Structure

Type	Parameter
char (2 bytes)	lua_sequence_number For SLI_SEND, this parameter contains the sequence number for either the first in the chain request unit or the only segment in the chain request unit. Note that this parameter is not byte-reversed.


Common Return Codes: Overview

When a Windows LUA verb is issued, it returns information to the application in return codes. This information includes:

•	A primary return code (2 bytes), which indicates the current status of the verb or whether it has completed successfully.

•	A secondary return code (4 bytes), which provides more detailed information.

This help lists the Windows LUA primary and secondary return codes in hexadecimal order and provides the cause for each code.

Windows LUA applications can also return SNA sense codes to indicate error conditions. It is outside the scope of this specification to define all of the possible SNA sense codes. For a list of the SNA sense codes, see the IBM SNA Formats documentation.


Primary Return Codes

0x0000

LUA_OK

The verb executed successfully.

0x0001

LUA_PARAMETER_CHECK

The verb did not execute because of a parameter error.

0x0002

LUA_STATE_CHECK

The verb did not execute because it was issued in an invalid state.

0x000F

LUA_SESSION_FAILURE

A required SNA Server component (such as the local node) has terminated.

0x0014

LUA_UNSUCCESSFUL

The verb record supplied was valid, but the verb did not complete successfully.

0x0018

LUA_NEGATIVE_RESPONSE

Either LUA sent a negative response to a message received from the primary LU because an error was found in the message, or the application responded negatively to a chain for which the end-of-chain has arrived.

0x0021

LUA_CANCELED

The secondary return code gives the reason for canceling the command.

0x0030

LUA_IN_PROGRESS

An asynchronous command was received but is not completed.

0x0040

LUA_STATUS

The secondary return code contains SLI status information for the application.

0xF003

LUA_COMM_SUBSYSTEM_ABENDED

Indicates one of the following conditions:

•	The node used by this conversation encountered an ABEND.

•	The connection between the TP and the PU 2.1 node has been broken (a LAN error).

•	The SnaBase at the TP's computer encountered an ABEND.

0xF004

LUA_COMM_SUBSYSTEM_NOT_LOADED

A required component could not be loaded or has terminated while processing the verb. Thus, communication could not take place. Contact the system administrator for corrective action.

0xF008

LUA_INVALID_VERB_SEGMENT

The VCB extended beyond the end of the data segment.

0xF011

LUA_UNEXPECTED_DOS_ERROR

After issuing an operating system call, an unexpected operating system return code was received and is specified in the secondary return code.

0xF015

LUA_STACK_TOO_SMALL

The stack size of the application is too small to execute the verb. Increase the stack size of your application.

0xFFFF

LUA_INVALID_VERB

Either the verb code or the operation code, or both, is invalid. The verb did not execute.


Secondary Return Codes

The associated secondary return codes are as follows:

0x00000000

LUA_SEC_RC_OK

No additional information exists for LUA_OK.

0x00000001

LUA_INVALID_LUNAME

An invalid lua_luname name was specified.

0x00000002

LUA_BAD_SESSION_ID

An invalid value for lua_sid was specified in the VCB.

0x00000003

LUA_DATA_TRUNCATED

The data was truncated because the data received was longer than the buffer length specified in lua_max_length.

0x00000004

LUA_BAD_DATA_PTR

The lua_data_ptr parameter either does not contain a valid pointer or does not point to a read/write segment and supplied data is required.

0x00000005

LUA_DATA_SEG_LENGTH_ERROR

One of the following occurred:

•	The supplied data segment for SLI_RECEIVE or SLI_SEND is not a read/write data segment as required.

•	The supplied data segment for SLI_RECEIVE is not as long as that provided in lua_max_length.

•	The supplied data segment for SLI_SEND is not as long as that provided in lua_data_length.

0x00000006

LUA_RESERVED_FIELD_NOT_ZERO

A reserved parameter for the verb just issued is not set to 0.

0x00000007

LUA_INVALID_POST_HANDLE

For a Windows NT system using events as the asynchronous posting method, the Windows-based LUA VCB does not contain a valid event handle.

For the Windows version 3.x system, the LUA VCB does not contain the valid procedure address returned by the MakeProcInstance command.

0x0000000C

LUA_PURGED

SLI_PURGE was issued and canceled SLI_RECEIVE.

0x0000000F

LUA_BID_VERB_SEG_ERROR

The buffer with the SLI_BID VCB was released before the SLI_RECEIVE with lua_flag1.bid_enable set to 1 was issued.

0x00000010

LUA_NO_PREVIOUS_BID_ENABLED

SLI_BID was not issued prior to issuing SLI_RECEIVE with bid_enable.

0x00000011

LUA_NO_DATA

No data was available to read when SLI_RECEIVE containing a no wait parameter was issued.

0x00000012

LUA_BID_ALREADY_ENABLED

SLI_RECEIVE was issued with bid_enable when SLI_BID was already active.

0x00000013

LUA_VERB_RECORD_SPANS_SEGMENTS

The LUA VCB length parameter plus the segment offset is beyond the segment end.

0x00000014

LUA_INVALID_FLOW

The lua_flag1 flow flags were set incorrectly when a verb was issued as follows:

•	When issuing SLI_SEND to send an SNA response, set only one lua_flag1 flow flag.

•	When issuing SLI_RECEIVE, set at least one lua_flag1 flow flag.

0x00000015

LUA_NOT_ACTIVE

LUA was not active within SNA Server when an LUA verb was issued.

0x00000016

LUA_VERB_LENGTH_INVALID

An LUA verb was issued with the value of lua_verb_length unexpected by the LUA.

0x00000019

LUA_REQUIRED_FIELD_MISSING

The verb that was issued either did not include a data pointer (if the data count was not 0) or did not include an lua_flag1 flow flag.

0x00000030

LUA_READY

Following a NOT_READY status, this status is issued to notify you that the SLI is ready to process commands.

0x00000031

LUA_NOT_READY

One of the following caused the SLI session to be temporarily suspended:

•	An SNA UNBIND type X'02' command was received, indicating a new BIND is coming.

If the UNBIND type X'02' is received after the beginning SLI_OPEN is complete, the session is suspended until a BIND, optional CRV and STSN, and SDT flows are received. These routines are re-entrant because they have to be called again. The session resumes after the SLI processes the SDT command. If the UNBIND type X'02' is received while SLI_OPEN is still processing, the primary return code is session-failure, not status.

•	The receipt of an SNA CLEAR caused the suspension.

Receipt of an SNA SDT will cause the session to resume.

0x00000032

LUA_INIT_COMPLETE

The LUA interface initialized the session while SLI_OPEN was processing. LUA applications that issue SLI_OPEN with lua_open_type_prim_sscp receive this status on SLI_RECEIVE or SLI_BID.

0x00000033

LUA_SESSION_END_REQUESTED

The LUA interface received an SNA shutdown command (SHUTD) from the host, indicating the host is ready to shut down the session.

0x00000034

LUA_NO_SLI_SESSION

A session was not open or was down due to an SLI_CLOSE or session failure when a command was issued.

0x00000035

LUA_SESSION_ALREADY_OPEN

A session is already open for the LU name specified in SLI_OPEN.

0x00000036

LUA_INVALID_OPEN_INIT_TYPE

The value in the lua_init_type contained in SLI_OPEN is invalid.

0x00000037

LUA_INVALID_OPEN_DATA

The lua_init_type for the SLI_OPEN issued is set to LUA_INIT_TYPE_SEC_IS when the buffer for data does not have a valid INITSELF command.

0x00000038

LUA_UNEXPECTED_SNA_SEQUENCE

Unexpected data or commands were received from the host while SLI_OPEN was processing.

0x00000039

LUA_NEG_RSP_FROM_BIND_ROUTINE

The user-supplied SLI_BIND routine responded negatively to the BIND. SLI_OPEN ended unsuccessfully.

0x0000003B

LUA_NEG_RSP_FROM_STSN_ROUTINE

The user-supplied SLI STSN routine responded negatively to the STSN. SLI_OPEN ended unsuccessfully.

0x0000003E

LUA_INVALID_OPEN_ROUTINE_TYPE

The lua_open_routine_type for the SLI_OPEN list of extension routines is invalid.

0x0000003F

LUA_MAX_NUMBER_OF_SENDS

The application issued a third SLI_SEND before one completed.

0x00000040

LUA_SEND_ON_FLOW_PENDING

An SLI_SEND was still outstanding when the application issued another SLI_SEND for an SNA flow.

0x00000041

LUA_INVALID_MESSAGE_TYPE

The lua_message_type parameter is not recognized by the LUA interface.

0x00000042

LUA_RECEIVE_ON_FLOW_PENDING

An SLI_RECEIVE was still outstanding when this application issued another SLI_RECEIVE for an SNA flow.

0x00000043

LUA_DATA_LENGTH_ERROR

The application did not provide user-supplied data required by the verb issued. Note that when SLI_SEND is issued for an SNA LUSTAT command, status (in 4 bytes) is required, and that when SLI_OPEN is issued with secondary initialization, data is required.

0x00000044

LUA_CLOSE_PENDING

One of the following has occurred:

•	A CLOSE_ABEND was still pending when another CLOSE_ABEND was issued. You can issue a CLOSE_ABEND if a CLOSE_NORMAL is pending.

•	Either a CLOSE_ABEND or a CLOSE_NORMAL was still pending when a CLOSE_NORMAL was issued.

0x00000046

LUA_NEGATIVE_RSP_CHASE

A negative response to an SNA CHASE command from the host was received by the LUA interface while SLI_CLOSE was being processed. SLI_CLOSE continued processing to stop the session.

0x00000047

LUA_NEGATIVE_RSP_SHUTC

A negative response to an SNA SHUTC command from the host was received by the SLI while SLI_CLOSE was still being processed. SLI_CLOSE continued processing to stop the session.

0x00000048

LUA_NEGATIVE_RSP_RSHUTD

A negative response to an SNA RSHUTD command from the host was received by the LUA interface while SLI_CLOSE was still being processed. SLI_CLOSE continued processing to stop the session.

0x0000004A

LUA_NO_RECEIVE_TO_PURGE

No SLI_RECEIVE was outstanding when you issued SLI_PURGE. One of two situations caused the problem:

•	SLI_RECEIVE completed before SLI_PURGE finished processing.

You can change the application to take care of this problem because it is not an error condition.

•	The lua_data_ptr parameter does not correctly point to the SLI_RECEIVE you want to purge.

0x0000004D

LUA_CANCEL_COMMAND_RECEIVED

The host sent an SNA CANCEL command to cancel the data chain currently being received by SLI_RECEIVE.

0x0000004E

LUA_RUI_WRITE_FAILURE

An unexpected error was posted to the SLI by RUI_WRITE.

0x00000051

LUA_SLI_BID_PENDING

An SLI verb was still active when another SLI_BID was issued. Only one SLI_BID can be active at a time.

0x00000052

LUA_SLI_PURGE_PENDING

An SLI_PURGE was still active when another SLI_PURGE was issued. Only one SLI_PURGE can be active at a time.

0x00000053

LUA_PROCEDURE_ERROR

A host procedure error is indicated by the receipt of an NSPE or NOTIFY message. The return code is posted to SLI_OPEN when the retry option is not used. To use the reset option, set lua_wait to a value other than 0. The LOGON or INITSELF command will be retried until the host is ready or until you issue SLI_CLOSE.

0x00000055

LUA_RECEIVED_UNBIND

The primary LU sent an SNA UNBIND command to the LUA interface when a session was active. As a result, the session was stopped.

0x0000007F

LUA_SLI_LOGIC_ERROR

The LUA interface found an internal error in logic.

0x00000080

LUA_TERMINATED

The session was terminated when a verb was pending. The verb process has been canceled.

0x00000081

LUA_NO_RUI_SESSION

No session has been initialized for the LUA verb issued, or some verb other than SLI_OPEN was issued before the session was initialized.

0x00000082

LUA_DUPLICATE_RUI_INIT

An RUI_INIT was issued for a session already in progress or that already has a RUI_INIT outstanding.

0x00000083

LUA_INVALID_PROCESS

The session for which an RUI verb was issued is unavailable because another process owns the session.

0x00000085

LUA_API_MODE_CHANGE

A request other than an SLI request was issued to the RUI for a session the SLI established.

0x00000087

LUA_COMMAND_COUNT_ERROR

An RUI_READ or RUI_WRITE was issued when the maximum are already outstanding, or an RUI_BID or RUI_TERM was issued with one already outstanding.

0x00000088

LUA_NO_READ_TO_PURGE

No RUI_READ was outstanding when an RUI_PURGE was issued. One of two situations caused the problem:

•	RUI_READ completed before RUI_PURGE finished processing.

•	The lua_data_ptr parameter does not correctly point to the RUI_READ verb to purge.

0x00000089

LUA_MULTIPLE_WRITE_FLOWS

An RUI_WRITE verb issued has more than one lua_flag1 flow flag set.

0x0000008A

LUA_DUPLICATE_READ_FLOW

An RUI_READ was issued for a flow that already has an RUI_READ outstanding.

0x0000008B

LUA_DUPLICATE_WRITE_FLOW

An RUI_WRITE was issued for a flow that already has an RUI_WRITE outstanding.

0x0000008C

LUA_LINK_NOT_STARTED

The Windows LUA was not able to activate the data link during initialization of the session.

0x0000008D

LUA_INVALID_ADAPTER

The configuration for the DLC is in error, or the configuration file is corrupted.

0x000000BE

LUA_NEG_NOTIFY_RSP

The SSCP responded negatively to a NOTIFY request issued indicating that the secondary LU was capable of a session. The half-session component that received the request understood and supported the request but could not execute it.

0x000000BF

LUA_RUI_LOGIC_ERROR

The Windows LUA interface found an internal error in the logic of the RUI.

0x000000FF

LUA_LU_INOPERATIVE

A severe error occurred while the RUI was attempting to stop the session. This LU is unavailable for any LUA requests until an ACTLU is received from the host.

0x08010000

LUA_RESOURCE_NOT_AVAILABLE

The logical unit, physical unit, link, or link station specified in the request unit is unavailable. This return code is posted to SLI_OPEN when a resource is unavailable unless you use the retry option.

To use the retry option, set lua_wait to a value other than 0. The LOGON or INITSELF command will be retried until the host is ready or until you issue SLI_CLOSE.

0x08050000

LUA_SESSION_LIMIT_EXCEEDED

The session requested was not activated because an NAU is at its session limit.

This SNA sense code applies to the following requests: BID, CINIT, INIT, and ACTDRM. The code will be posted to SLI_OPEN when an NAU is at its limit, unless you use the retry option.

To use the retry option, set lua_wait to a value other than 0. The LOGON or INITSELF command will be retried until the host is ready or until you issue SLI_CLOSE.

0x08090000

LUA_MODE_INCONSISTENCY

Performing this function is not allowed by the current status. The request sent to the half-session component was not executed even though it was understood and supported. This SNA sense code is also an exception request sense code.

0x08120000

LUA_INSUFFICIENT_RESOURCES

A temporary condition of insufficient resources caused the request receiver to be unable to perform. The request sent to the half-session component was not executed, even though it was understood and supported.

0x081B0000

LUA_RECEIVER_IN_TRANSMIT_MODE

Either resources needed to handle normal flow data were not available or the state of the half-duplex contention was not received when a normal-flow request was received. The result is a race condition. This SNA sense code is also an exception request sense code.

0x08310000

LUA_LU_COMPONENT_DISCONNECTED

An LU component is unavailable because it is not connected properly. Make sure that the power is on.

0x08350001

LUA_NEGOTIABLE_BIND_ERROR

A negotiable BIND was received, which is only allowed by the SLI when a user-supplied SLI_BIND routine is provided with SLI_OPEN.

0x08350002

LUA_BIND_FM_PROFILE_ERROR

Only file management header profiles 3 and 4 are supported by the LUA interface. A file management profile other than 3 or 4 was found on the BIND.

0x08350003

LUA_BIND_TS_PROFILE_ERROR

Only TS profile 3 and 4 are supported by the LUA interface. A TS other than 3 or 4 was found on the BIND.

0x0835000E

LUA_BIND_LU_TYPE_ERROR

Only LU 0, LU 1, LU 2, and LU 3 are supported by LUA. An LU other than 0, 1, 2, or 3 was found.

0x08570000

LUA_SSCP_LU_SESSION_NOT_ACTIVE

The required SSCP-LU is inactive. Specific sense code information is in bytes 2 and 3. Valid settings are X'0000', X'0001', X'0002', X'0003', and X'0004'.

0x08780001

LUA_RECEIVE_CORRELATION_TABLE_FULL

The session receive correlation table for the flow requested reached its capacity.

0x08780002

LUA_SEND_CORR_TABLE_FULL

The session send correlation table for the flow requested reached its capacity.

0x087D0000

LUA_SESSION_SERVICE_PATH_ERROR

A request for session services cannot be rerouted to an SSCP-SSCP session path. Specific sense code information in bytes 2 and 3 gives more information about why the request cannot be rerouted.

0x10020000

LUA_RU_LENGTH_ERROR

The RU request was an incorrect length (either too short or too long). The request unit was not interpreted or processed even though it was delivered to the half-session component. The half-session capabilities do not match. This SNA sense code is also an exception request sense code.

0x10030000

LUA_FUNCTION_NOT_SUPPORTED

The LUA does not support the requested function. A control character, an RU parameter, or a formatted request code may have specified the function. Specific sense code information is in bytes 2 and 3.

0x10050121

LUA_HDX_BRACKET_STATE_ERROR

The existing state error prevented the current request from being sent. The determination was made by a protocol computer.

0x10050122

LUA_RESPONSE_ALREADY_SENT

A response for the chain was already sent so that the current request was not sent. The determination was made by a protocol computer.

0x10050123

LUA_EXR_SENSE_INCORRECT

The application responded negatively to an exception request. The sense code was unacceptable.

0x10050124

LUA_RESPONSE_OUT_OF_ORDER

The current response was not for the oldest request. The determination was made by a protocol computer.

0x10050125

LUA_CHASE_RESPONSE_REQUIRED

A CHASE response was still outstanding when a more recent request was attempted. The determination was made by a protocol computer.

0x20020000

LUA_CHAINING_ERROR

The sequence of the chain indicator settings is in error. An invalid request header or request unit for the receiver's current session control or data flow control state was found. Delivery to the half-session component was prevented.

0x20030000

LUA_BRACKET

The sender failed to enforce the session bracket rules. Note that contention and race conditions are exempt from this error. An invalid request header or request unit for the receiver's current session control or data flow control state was found. Delivery to the half-session component was prevented.

0x20040000

LUA_DIRECTION

While the half-duplex flip-flop state was NOT_RECEIVE, a request for normal flow was received. An invalid request header or request unit for the receiver's current session control or data flow control state was found. Delivery to the half-session component was prevented.

0x20050000

LUA_DATA_TRAFFIC_RESET

A half-session of an active session with inactive data traffic received a normal flow DFC or FMD request. An invalid request header or request unit for the receiver's current session control or data flow control state was found. Delivery to the half-session component was prevented.

0x20060000

LUA_DATA_TRAFFIC_QUIESCED

A DFC or FMD request was received from a half-session that sent either a SHUTC command or QC command, and the DFC or FMD request has not responded to a RELQ command. An invalid request header or request unit for the receiver's current session control or data flow control state was found. Delivery to the half-session component was prevented.

0x20070000

LUA_DATA_TRAFFIC_NOT_RESET

While the data traffic state was not reset, the session control request was received. An invalid request header or request unit for the received current session control or data flow control state was found. Delivery to the half-session component was prevented.

0x20080000

LUA_NO_BEGIN_BRACKET

The receiver has already sent a positive response to a BIS command when a BID or an FMD request specifying BBI=BB was received. An invalid request header or request unit for the received current session control or data flow control state was found. Delivery to the half-session component was prevented.

0x20090000

LUA_SC_PROTOCOL_VIOLATION

A violation of the SC protocol occurred. A request (that is permitted only after an SC request and a positive response to that request have been successfully exchanged) was received before the required exchange. Byte 4 of the sense data contains the request code. No user data exists for this sense code. An invalid header request or request unit for the received current session control or data flow control state was found. Delivery to the half-session component was prevented.

0x200A0000

LUA_IMMEDIATE_REQUEST_MODE_ERROR

The request violated the immediate request mode protocol. An invalid header request or request unit for the received current session control or data flow control state was found. Delivery to the half-session component was prevented.

0x200B0000

LUA_QUEUED_RESPONSE_ERROR

The request violated the queued response protocol. An invalid header request or request unit for the received current session control or data flow control state was found. Delivery to the half-session component was prevented.

0x200C0000

LUA_ERP_SYNC_EVENT_ERROR

A violation of the ERP synchronous event protocol occurred. An invalid header request or request unit for the received current session control or data flow control state was found. Delivery to the half-session component was prevented.

0x200D0000

LUA_RSP_BEFORE_SENDING_REQ

A previously received request has not been responded to yet and an attempt was made in half-duplex send/receive mode to send a normal flow request. An invalid header request or request unit for the received current session control or data flow control state was found. Delivery to the half-session component was prevented.

0x200E0000

LUA_RSP_CORRELATION_ERROR

A response was sent that does not correspond to a previously received request or a response was received that does not correspond to a request sent previously.

0x200F0000

LUA_RSP_PROTOCOL_ERROR

A violation of the response protocol was found in the response received from the primary half-session.

0x40010000

LUA_INVALID_SC_OR_NC_RH

The RH of an SC or NC request was invalid.

0x40030000

LUA_BB_NOT_ALLOWED

The begin bracket indicator was incorrectly specified. The BIND options chosen previously or the architectural rules were violated by the request header parameter values. Delivery to the half-session component was prevented. The errors are not dependent on the current session state. The sender's failure to enforce session rules may have caused the errors.

0x40040000

LUA_EB_NOT ALLOWED

The end bracket indicator was incorrectly specified. The BIND options chosen previously or the architectural rules were violated by the request header parameter values. Delivery to the half-session component was prevented. The errors are not dependent on the current session state. The sender's failure to enforce session rules may have caused the errors.

0x40060000

LUA_EXCEPTION_RSP_NOT_ALLOWED

When an exception response was not allowed, one was requested. The BIND options chosen previously or the architectural rules were violated by the request header parameter values. Delivery to the half-session component was prevented. The errors are not dependent on the current session state. The sender's failure to enforce session rules may have caused the errors.

0x40070000

LUA_DEFINITE_RSP_NOT_ALLOWED

When a definite response was not allowed, one was requested. The BIND options chosen previously or the architectural rules were violated by the request header parameter values. Delivery to the half-session component was prevented. The errors are not dependent on the current session state. The sender's failure to enforce session rules may have caused the errors.

0x40080000

LUA_PACING_NOT_SUPPORTED

The request contained a pacing indicator when support of pacing for this session does not exist for the receiving half-session or boundary function half-session. The BIND options chosen previously or the architectural rules were violated by the request header parameter values. Delivery to the half-session component was prevented. The errors are not dependent on the current session state. The sender's failure to enforce session rules may have caused the errors.

0x40090000

LUA_CD_NOT_ALLOWED

The change-direction indicator was incorrectly specified. The BIND options chosen previously or the architectural rules were violated by the request header parameter values. Delivery to the half-session component was prevented. The errors are not dependent on the current session state. The sender's failure to enforce session rules may have caused the errors.

0x400A0000

LUA_NO_RESPONSE_NOT_ALLOWED

A request other than an EXR contained a NO RESPONSE. The BIND options chosen previously or the architectural rules were violated by the request header parameter values. Delivery to the half-session component was prevented. The errors are not dependent on the current session state. The sender's failure to enforce session rules may have caused the errors.

0x400B0000

LUA_CHAINING_NOT_SUPPORTED

The chaining indicators were incorrectly specified. The BIND options chosen previously or the architectural rules were violated by the request header parameter values. Delivery to the half-session component was prevented. The errors are not dependent on the current session state. The sender's failure to enforce session rules may have caused the errors.

0x400C0000

LUA_BRACKETS_NOT_SUPPORTED

The bracket indicators were incorrectly specified. The BIND options chosen previously or the architectural rules were violated by the request header parameter values. Delivery to the half-session component was prevented. The errors are not dependent on the current session state. The sender's failure to enforce session rules may have caused the errors.

0x400D0000

LUA_CD_NOT_SUPPORTED

The change-direction indicator was set, but LUA does not support change-direction for this situation. The BIND options chosen previously or the architectural rules were violated by the request header parameter values. Delivery to the half-session component was prevented. The errors are not dependent on the current session state. The sender's failure to enforce session rules may have caused the errors.

0x400F0000

LUA_INCORRECT_USE_OF_FI

The format indicator was incorrectly specified. The BIND options chosen previously or the architectural rules were violated by the request header parameter values. Delivery to the half-session component was prevented. The errors are not dependent on the current session state. The sender's failure to enforce session rules may have caused the errors.

0x40100000

LUA_ALTERNATE_CODE_NOT_SUPPORTED

The code selection indicator was set, but LUA does not support code selection for this session. The BIND options chosen previously or the architectural rules were violated by the request header parameter values. Delivery to the half-session component was prevented. The errors are not dependent on the current session state. The sender's failure to enforce session rules may have caused the errors.

0x40110000

LUA_INCORRECT_RU_CATEGORY

The request unit category indicator was incorrectly specified. The BIND options chosen previously or the architectural rules were violated by the request header parameter values. Delivery to the half-session component was prevented. The errors are not dependent on the current session state. The sender's failure to enforce session rules may have caused the errors.

0x40120000

LUA_INCORRECT_REQUEST_CODE

The request code was incorrectly specified. The BIND options chosen previously or the architectural rules were violated by the request header parameter values. Delivery to the half-session component was prevented. The errors are not dependent on the current session state. The sender's failure to enforce session rules may have caused the errors.

0x40130000

LUA_INCORRECT_SPEC_OF_SDI_RTI

The SDI and the RTI were not specified correctly on a response. The BIND options chosen previously or the architectural rules were violated by the request header parameter values. Delivery to the half-session component was prevented. The errors are not dependent on the current session state. The sender's failure to enforce session rules may have caused the errors.

0x40140000

LUA_INCORRECT_DR1I_DR2I_ERI

The DR1I, the DR2I, and the ERI were specified incorrectly. The BIND options chosen previously or the architectural rules were violated by the request header parameter values. Delivery to the half-session component was prevented. The errors are not dependent on the current session state. The sender's failure to enforce session rules may have caused the errors.

0x40150000

LUA_INCORRECT_USE_OF_QRI

The QRI was incorrectly specified. The BIND options chosen previously or the architectural rules were violated by the request header parameter values. Delivery to the half-session component was prevented. The errors are not dependent on the current session state. The sender's failure to enforce session rules may have caused the errors.

0x40160000

LUA_INCORRECT_USE_OF_EDI

The EDI was incorrectly specified. The BIND options chosen previously or the architectural rules were violated by the request header parameter values. Delivery to the half-session component was prevented. The errors are not dependent on the current session state. The sender's failure to enforce session rules may have caused the errors.

0x40170000

LUA_INCORRECT_USE_OF_PDI

The PDI was incorrectly specified. The BIND options chosen previously or the architectural rules were violated by the request header parameter values. Delivery to the half-session component was prevented. The errors are not dependent on the current session state. The sender's failure to enforce session rules may have caused the errors.

0x80030000

LUA_NAU_INOPERATIVE

The NAU is not able to process responses or requests. Delivery to the receiver could not take place for one of the following reasons:

•	A path information unit error

•	A path outage

•	An invalid sequence of requests for activation

If a path error is received during an active session, that usually means there is no longer a valid path to the session partner.

0x80050000

LUA_NO_SESSION

A request to activate a session is required because no active half-session in the receiving end node for the origination-destination pair exists, or no active boundary function half-session component for the origination-destination pair in a node that supplies the boundary function exists. Delivery of the request could not take place for one of the following reasons:

•	A path information unit error

•	A path outage

•	An invalid sequence of requests for activation

If a path error is received during an active session, that usually indicates there is no longer a valid path to the session partner.


Microsoft Support Services Contents
Microsoft Support Services

  When You Have a Question

  Product Support Within the United States and Canada


When You Have a Question

If you have a question about SNA Server, first look in the product documentation or consult online Help. You can also find late-breaking updates and technical information in the README file that came with your SNA Server disks. If you cannot find the answer, contact the Microsoft Support Network.

Outside the United States, contact Microsoft Product Support Services at the Microsoft subsidiary office that serves your area.

The Microsoft Support Network

The Microsoft Support Network offers you a wide range of choices and access to high-quality, responsive technical support. Microsoft recognizes that support needs vary from user to user; the Microsoft Support Network allows you to choose the type of support that best meets your needs, with options ranging from electronic bulletin boards to annual support programs. For information about support services in the United States and Canada, see Product Support Within the United States and Canada.

Services vary outside the United States and Canada. In other locations, contact a local Microsoft subsidiary for information. The Microsoft Support Network is subject to Microsoft's then-current prices, terms, and conditions, and is subject to change without notice.


Product Support Within the United States and Canada

In the United States and Canada, the following support services are available through the Microsoft Support Network:

Electronic Services

Priority Support

Text Telephone

Other Support Options

Other Microsoft Services


Electronic Services

These services are available 24 hours a day, 7 days a week, including holidays.

Microsoft FastTips

(800) 936-4400 on a touch-tone telephone. Receive automated answers to common questions, and access a library of technical notes, all delivered by recording or fax. You can use the following keys on your touch-tone telephone after you reach FastTips:

To	Press
Advance to the next message	*
Repeat the current message	7
Return to the beginning of FastTips	#
CompuServe

Interact with other users and Microsoft support engineers, or access the Microsoft Knowledge Base to get product information. At any ! prompt, type go microsoft to access Microsoft forums, type go mskb to access the Microsoft Knowledge Base, or type go mssna to access the Microsoft SNA forum. For an introductory CompuServe membership kit, call (800) 848-8199, operator 524.

Microsoft Download Service

Access, via modem, the Driver Library and the most current technical notes (1200, 2400, or 9600 baud; no parity; 8 data bits; 1 stop bit). In the United States, call (206) 936-6735. In Canada, call (905) 507-3022.

Internet

Access the Driver Library and the Microsoft Knowledge Base. The Microsoft Internet FTP archive host, ftp.microsoft.com, supports anonymous login. When logging in as anonymous, you should type your complete electronic mail name as your password.

See also

Priority Support

Text Telephone

Other Support Options

Other Microsoft Services


Priority Support

The Microsoft Support Network offers priority telephone access to Microsoft support engineers 24 hours a day, 7 days a week, except holidays.

In the United States, call (900) 555-2100; $150 (U.S.) per incident. Charges appear on your telephone bill.

In the United States, call (800) 936-5900; $150 (U.S.) per incident, billed to your VISA card, MasterCard, or American Express card.

In Canada, call (800) 668-7975 for more information.

See also

Electronic Services

Text Telephone

Other Support Options

Other Microsoft Services


Text Telephone

Microsoft text telephone (TT/TDD) services are available for the deaf or hard-of-hearing. In the United States, using a TT/TDD modem, dial (206) 635-4948 between 6:00 A.M. and 6:00 P.M. Pacific time, Monday through Friday, excluding holidays. In Canada, using a TT/TDD modem, dial (905) 568-9641 between 8:00 A.M. and 8:00 P.M. Eastern time, Monday through Friday, excluding holidays.

See also

Electronic Services

Priority Support

Other Support Options

Other Microsoft Services


Other Support Options

The Microsoft Support Network offers annual and multiple incident support plans. For information, in the United States, contact the Microsoft Support Network Sales and Information group at (800) 936-3500 between 6:00 A.M. and 6:00 P.M. Pacific time, Monday through Friday, excluding holidays. In Canada, call (800) 668-7975 between 8:00 A.M. and 8:00 P.M. Eastern time, Monday through Friday, excluding holidays.

Electronic Services

Priority Support

Text Telephone

Other Microsoft Services


Other Microsoft Services

Microsoft Solution Providers Program

Microsoft Solution Providers are independent organizations that provide consulting, integration, customization, development, technical support and training, and other services for Microsoft products. These companies are called Solution Providers because they apply technology and provide services to help solve real-world problems.

In the United States, for more information about the Microsoft Solution Providers program or the Microsoft Solution Provider nearest to you, please call (800) 426-9400 between 6:30 A.M. and 5:30 P.M. Pacific time, Monday through Friday, excluding holidays. In Canada, call (800) 563-9048 between 8:00 A.M. and 8:00 P.M. Eastern time, Monday through Friday, excluding holidays.

Microsoft TechNet

Microsoft TechNet is an annual information service created for those who support or educate end users, administer networks or databases, create automated solutions and recommend or evaluate information technology solutions.  Microsoft TechNet gives you the answers you need, when you need them by providing timely, comprehensive and in-depth information on Microsoft products and on supporting and administering Microsoft-based solutions via the monthly Microsoft TechNet CD and monthly TechNet Supplemental (Drivers & Patches) CD.

For more information about Microsoft TechNet, in the United States and Canada, call (800) 344-2121, dept. 3013, between 7:00 A.M. and 7:00 P.M. Central time, Monday through Friday.

See also

Electronic Services

Priority Support

Text Telephone

Other Support Options