= cowboy_sub_protocol(3)

== Name

cowboy_sub_protocol - sub protocol

== Description

The `cowboy_sub_protocol` behaviour defines the interface used
by modules that implement a protocol on top of HTTP.

== Callbacks

=== upgrade(Req, Env, Handler, HandlerOpts) -> {ok, Req, Env} | {suspend, Module, Function, Args} | {stop, Req}

Req = cowboy_req:req():: The Req object.
Env = env():: The request environment.
Handler = module():: Handler module.
Opts = any():: Handler options.
Module = module():: MFA to call when resuming the process.
Function = atom():: MFA to call when resuming the process.
Args = [any()]:: MFA to call when resuming the process.

Upgrade the protocol.

Please refer to the `cowboy_middleware` manual for a
description of the return values.
