import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'


The **GW2FileSessionStatus** function provides a string that describes, at a high level, the processing carried out on the last file processed in the supplied session.

<Tabs>

<TabItem value="C++" label="C++" default>

```cpp

#include "glasswall.core2.api.h"

int GW2FileSessionStatus(
    Session session,
    int *glasswallSessionStatus,
    char **statusMsgBuffer,
    size_t *statusBufferLength);

```

**Parameters**

&emsp; **session** The ID of the session as returned by `GW2OpenSession`

&emsp; **glasswallSessionStatus** An integer output parameter describing the return status of the session as it relates to the last file that was processed. See the [Return Types](/embedded-engine/embedded-engine-api-overview#return-types) table for an explanation of `glasswallSessionStatus`.

&emsp; **statusMsgBuffer** A string pointer output parameter which is populated with a high level description of the processing carried out on the last file processed by the session. Eg `"Sanitisation Applied, Remedies Applied"`. The memory used by this pointer does **not** need to be freed by the user. 

&emsp; **statusBufferLength** An output parameter which is populated with the size in bytes of the memory pointed to by `statusMsgBuffer`.

**Returns**

&emsp; Returns an integer indicating whether the function call was successful. Negative numbers indicate a failure. See the [Return Types](/embedded-engine/embedded-engine-api-overview#return-types) table for an explanation of the return codes. If `session` is invalid `glasswallSessionStatus`, `statusMsgBuffer` and `statusBufferLength` will be undefined.

</TabItem>

<TabItem value="C#" label="C#">

**Synopsis**

```csharp
/// <param name="session">Current open Glasswall session</param>
/// <param name="gwSessionStatus">Session status value</param>
/// <param name="outputBuffer">String that describes, at a high level, the processing carried out on the last document </param>
/// <param name="bufferLength">Size of the outputBuffer</param>
public int FileSessionStatus(
    int session,
    out IntPtr gwSessionStatus,
    out IntPtr outputBuffer,
    ref UIntPtr bufferLength)

```

**Returns**

If **session** is invalid, it will return -1. If session is valid, the function returns 0 and **gwSessionStatus**, **outputBuffer** and **bufferLength** will be populated.

</TabItem>

<TabItem value="Java" label="Java">

**Synopsis**

```java
import com.glasswall.core2javabridge.*;

public FileSessionStatus GW2FileSessionStatusResult(int session) throws GlasswallException
```

**Note**

This functionality previously required three separate function calls to retrieve the ID data. This has now been streamlined to return the settings as a `FileSessionStatus` object. The three original functions have been deprecated.

**Returns**

The **GW2FileSessionStatusResult** function returns a `FileSessionStatus` object containing the `session` summary status, and the `session` summary description.

The `FileSessionStatus` object contains two variables that describe the status of `session` at the time the function is called. These are:

| Variable                      | Description                                    |
|-------------------------------|------------------------------------------------|
|```int summaryStatus```        | Status indicating the overall work carried out |
|```String summaryDescription```| Description of the overall work carried out    |

A **GlasswallException** exception will be thrown if ```session``` is invalid, or if the session status information could not be retrieved.

**Synopsis - Deprecated Functions**

```java
import com.glasswall.core2javabridge.*;

(Deprecated)
public int GW2FileSessionStatus(int session) throws GlasswallException
public int GetFileSessionStatusInt(int session) throws GlasswallException
public byte[] GetStatusBuffer(int session) throws GlasswallException
```

**Description**

The **GW2FileSessionStatus** function returns a status indicating whether the session status information could be retrieved for the session specified by `session`.

Retrieve the session summary status through use of the **GetFileSessionStatusInt** function. 

Retrieve the session summary status data through use of the **GetStatusBuffer** function. 

**Returns - Deprecated Functions**

The **GW2FileSessionStatus** function returns a **GW2_RetStatus** enumeration converted to `int`. The value will be negative if an error occurred. `0` indicates success. Refer to the API Overview/Return types for details. 

The **GetStatusBuffer** function returns a byte array buffer containing a summary description about the given session. This will be null if **GW2FileSessionStatus** has not been called.

The **GetFileSessionStatusInt** function returns a status indicating the overall work carried out.

A **GlasswallException** exception will be thrown if `session` is invalid, or if `session` status information could not be retrieved.

</TabItem>

<TabItem value="Python" label="Python">

**Synopsis**

Retrieves the Glasswall session status message. Gives a high level indication of the processing that was carried out.

```py
def file_session_status_message(self, session: int, raise_unsupported: bool = True) -> str:
    """ Retrieves the Glasswall session status message. Gives a high level indication of the processing that was carried out.

    Args:
        session (int): The session integer.
        raise_unsupported (bool, optional): Default True. Raise exceptions when Glasswall encounters an error. Fail silently if False.

    Returns:
        result.message (str):The file session status message.
    """
```

**Returns**

A file session status message as a string.

</TabItem>

<TabItem value="JavaScript" label="JavaScript">

**Synopsis**

```jsx

/**
* This function retrieves the Glasswall Session Status. This status gives a high level indication of the processing
* that was carried out on the last document processed by the library
*/

GW2FileSessionStatus(session,
    glasswallSessionStatus,
    statusMsgBuffer,
    statusBufferLength)
```

**Returns**

If **session** is invalid, it will return -1 and **glasswallSessionStatus**, **statusMsgBuffer** and **statusBufferLength** will be undefined. If session is valid, the function returns 0 and **glasswallSessionStatus**, **statusMsgBuffer** and **statusBufferLength** will be populated.

**Example**
```jsx

function getFileSessionStatus(session_id, gw) {
    /*
        Glasswall API signature:
        int GW2FileSessionStatus(
            Session session,
            int *glasswallSessionStatus,
            char **statusMsgBuffer,
            size_t *statusBufferLength
        );
    */

    // allocate space to store the session status; use .deref() to extract it
    let glasswallSessionStatus = ref.alloc('int');

    let CString_ptr = ref.refType(ref.types.CString);
    let statusMsgBuffer = ref.alloc(CString_ptr);

    // allocate space to store the buffer length; use .deref() to extract it
    let statusBufferLength = ref.alloc('size_t');

    let rv = gw.GW2FileSessionStatus(session_id, glasswallSessionStatus, statusMsgBuffer, statusBufferLength);

    arr_buf = buffer_to_array(statusMsgBuffer, statusBufferLength)
    // console.log(arr_buf.toString());

    let message = `\n  GW2FileSessionStatus:return=${rv}`;
    message += "\n    glasswallSessionStatus = " + glasswallSessionStatus.deref();
    message += "\n    statusMsgBuffer = \"" + arr_buf.toString() + '"';
    message += "\n    statusBufferLength = " + statusBufferLength.deref();

    return message;
}

```

</TabItem>

</Tabs>