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


Every file type has an associated ID in the Glasswall Engine. This API provides the Glasswall file type ID in string format for the associated file extension supplied.

<Tabs>

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

```cpp

#include "glasswall.core2.api.h"

int GW2GetFileTypeID(
    Session session,
    const char *fileType,
    size_t *bufferLength,
    char **outputBuffer);

```

**Parameters**

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

&emsp; **fileType** A string containing the file extension. Eg `"bmp"`.

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

&emsp; **outputBuffer** A string pointer output parameter which is populated with the file type ID associated with the supplied extension. The memory used by this pointer does **not** need to be freed by the user.

**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 successful, the `outputBuffer` is populated with the file type ID.

**Example**

```cpp

#include "glasswall.core2.api.h"

char *outbuf = NULL;
size_t buflen = 0;

if (GW2OpenSession() < 0)
    /* error opening session */
else
{
    int status = GW2GetFileTypeID(session, fileType, &buflen, &outbuf);

    /* outbuf points to a buffer containing the XML file.
     * Either process the data pointed to, or copy the data and process it
     * after GW2CloseSession is called
     */

    if (GW2CloseSession() < 0)
        /* error closing session */
}

```

</TabItem>

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

**Synopsis**

```csharp
public int GetFileTypeID(
    int session,
    string fileType,
    ref UIntPtr bufferLength,
    out IntPtr outputBuffer)
```

**Returns**

Returns an integer `GW2_RetStatus` enum value. Negative numbers indicate a failure. If successful, the output buffer is
populated with the file type ID.

**Example**
```csharp
using glasswall_core2;

...

Glasswall glasswall = new Glasswall(); // Instance of the Glasswall wrapper

int session      = glasswall.OpenSession();
int returnStatus = glasswall.GetFileTypeID(session, "pdf", ref bufferLength, out buffer);

if (bufferLength >= 0)
{
    byte[] msgArray = glasswall.CreateArrayFromBuffer(buffer, bufferLength);
    // File type ID for PDF is now stored in a byte array
}

if (glasswall.CloseSession(session))
{
    // Error Handling
}

```

</TabItem>

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

**Synopsis**

**Not supported in Java**

</TabItem>

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

**Synopsis**

Retrieve information about a file type based on its identifier.

```py
def get_file_type_info(self, file_type: Union[str, int]):
    """ Retrieve information about a file type based on its identifier.

    Args:
        file_type (Union[str, int]): The file type identifier. This can be either a string representing a file
        extension (e.g. 'bmp') or an integer corresponding to a file type (e.g. 29).

    Returns:
        - file_type_info (Union[int, str]): Depending on the input 'file_type':
            - If `file_type` is a string (e.g. 'bmp'):
                - If the file type is recognised, returns an integer corresponding to that file type.
                - If the file type is not recognised, returns 0.
            - If `file_type` is an integer (e.g. 29):
                - If the integer corresponds to a recognised file type, returns a more detailed string description
                    of the file type (e.g. 'BMP Image').
                - If the integer does not match any recognised file type, returns an empty string.
    """
```

**Returns**

Returns an integer or string depending on the input 'file_type'. This value is either an integer of a recognised file type, a detailed string description of a recognised file type or if the input 'file_type' was not recognised, 0 or an empty string.

</TabItem>

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

**Synopsis**

This function places a pointer to a description of a specified fileType in a specified location.

```jsx
/**
*
* @param {number} session The ID of the session.
* @param {string} fileType The extension of the file type.
* @param {number} bufferLength The length of the buffer.
* @param {string} outputBuffer The location of the output buffer.
*/

GW2GetFileTypeID(
    session,
    fileType,
    bufferLength,
    outputBuffer)
```

**Returns**

Returns an integer `GW2_RetStatus` enum value. Negative numbers indicate a failure. If successful, the output buffer is populated with the file type ID.

**Example**
```jsx

const ref = require('ref-napi');

...

function buffer_to_string(buffer, buffer_size) {

    if (!buffer.isNull() && ref.deref(buffer_size) > 0) {
        return Buffer.from(ref.reinterpret(ref.deref(buffer), ref.deref(buffer_size), 0)).toString();
    }
    else {
        return "";
    }
}

...

output_file_buffer = ref.alloc(ref.refType(ref.types.CString));
output_buffer_size = ref.alloc(ref.types.size_t, 0);
return_status      = gw.GW2GetFileTypeID(session_id, "pdf", output_buffer_size, output_file_buffer);

let error_description = buffer_to_string(output_file_buffer, output_buffer_size);

...

```

</TabItem>

</Tabs>