### Function

# Soup websocket_server_check_handshake

#### Declaration [src]

    gboolean
    soup_websocket_server_check_handshake (
      SoupServerMessage* msg,
      const char* origin,
      char** protocols,
      GPtrArray* supported_extensions,
      GError** error
    )

#### Description [src]

Examines the method and request headers in `msg` and determines whether `msg` contains a valid handshake request.

If `origin` is non-`NULL`, then only requests containing a matching “Origin” header will be accepted. If `protocols` is non-`NULL`, then only requests containing a compatible “Sec-WebSocket-Protocols” header will be accepted. If `supported_extensions` is non-`NULL`, then only requests containing valid supported extensions in “Sec-WebSocket-Extensions” header will be accepted.

Normally `soup_websocket_server_process_handshake()` will take care of this for you, and if you use `soup_server_add_websocket_handler()` to handle accepting WebSocket connections, it will call that for you. However, this function may be useful if you need to perform more complicated validation; eg, accepting multiple different Origins, or handling different protocols depending on the path.

#### Parameters

`msg`

  Type: `SoupServerMessage`

  `SoupServerMessage` containing the client side of a WebSocket handshake.

  The data is owned by the caller of the function.

`origin`

  Type: `const char*`

  Expected Origin header.

  The argument can be `NULL`.
  The data is owned by the caller of the function.
  The value is a NUL terminated UTF-8 string.

`protocols`

  Type: An array of `char*`

  Allowed WebSocket protocols.

  The argument can be `NULL`.
  The array must be `NULL`-terminated.
  The data is owned by the caller of the function.
  Each element is a NUL terminated UTF-8 string.

`supported_extensions`

  Type: An array of `None`

  List of supported extension types.

  The argument can be `NULL`.
  The data is owned by the caller of the function.

`error`

  Type: `GError **`

  The return location for a recoverable error.

  The argument can be `NULL`.
  If the return location is not `NULL`, then you must initialize it to a `NULL` `GError*`.
  The argument will be left initialized to `NULL` by the function if there are no errors.
  In case of error, the argument will be set to a newly allocated `GError`; the caller will take ownership of the data, and be responsible for freeing it.

#### Return value

Type: `gboolean`

`TRUE` if `msg` contained a valid WebSocket handshake, `FALSE` and an error if not.