core/ari/pjsip: Add refer mechanism

This change adds support for refers that are not session based. It
includes a refer implementation for the PJSIP technology which results
in out-of-dialog REFERs being sent to a PJSIP endpoint. These can be
triggered using the new ARI endpoint `/endpoints/refer`.

Resolves: #71

UserNote: There is a new ARI endpoint `/endpoints/refer` for referring
an endpoint to some URI or endpoint.
This commit is contained in:
Maximilian Fridrich
2023-05-10 15:53:33 +02:00
parent c16cc93a4b
commit 8824b845c4
13 changed files with 2813 additions and 734 deletions

View File

@@ -75,6 +75,71 @@
}
]
},
{
"path": "/endpoints/refer",
"description": "Refer an endpoint or technology URI to some technology URI or endpoint.",
"operations": [
{
"httpMethod": "POST",
"summary": "Refer an endpoint or technology URI to some technology URI or endpoint.",
"nickname": "refer",
"responseClass": "void",
"parameters": [
{
"name": "to",
"description": "The endpoint resource or technology specific URI that should be referred to somewhere. Valid resource is pjsip.",
"paramType": "query",
"required": true,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "from",
"description": "The endpoint resource or technology specific identity to refer from.",
"paramType": "query",
"required": true,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "refer_to",
"description": "The endpoint resource or technology specific URI to refer to.",
"paramType": "query",
"required": true,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "to_self",
"description": "If true and \"refer_to\" refers to an Asterisk endpoint, the \"refer_to\" value is set to point to this Asterisk endpoint - so the referee is referred to Asterisk. Otherwise, use the contact URI associated with the endpoint.",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "boolean",
"defaultValue": false
},
{
"name": "variables",
"description": "The \"variables\" key in the body object holds technology specific key/value pairs to append to the message. These can be interpreted and used by the various resource types; for example, the pjsip resource type will add the key/value pairs as SIP headers. The \"display_name\" key is used by the PJSIP technology. Its value will be prepended as a display name to the Refer-To URI.",
"paramType": "body",
"required": false,
"dataType": "containers",
"allowMultiple": false
}
],
"errorResponses": [
{
"code": 400,
"reason": "Invalid parameters for referring."
},
{
"code": 404,
"reason": "Endpoint not found"
}
]
}
]
},
{
"path": "/endpoints/{tech}",
"description": "Asterisk endpoints",
@@ -196,6 +261,75 @@
]
}
]
},
{
"path": "/endpoints/{tech}/{resource}/refer",
"description": "Refer an endpoint in a technology to some technology URI or endpoint..",
"operations": [
{
"httpMethod": "POST",
"summary": "Refer an endpoint or technology URI to some technology URI or endpoint.",
"nickname": "referToEndpoint",
"responseClass": "void",
"parameters": [
{
"name": "tech",
"description": "Technology of the endpoint",
"paramType": "path",
"dataType": "string"
},
{
"name": "resource",
"description": "ID of the endpoint",
"paramType": "path",
"dataType": "string"
},
{
"name": "from",
"description": "The endpoint resource or technology specific identity to refer from.",
"paramType": "query",
"required": true,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "refer_to",
"description": "The endpoint resource or technology specific URI to refer to.",
"paramType": "query",
"required": true,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "to_self",
"description": "If true and \"refer_to\" refers to an Asterisk endpoint, the \"refer_to\" value is set to point to this Asterisk endpoint - so the referee is referred to Asterisk. Otherwise, use the contact URI associated with the endpoint.",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "boolean",
"defaultValue": false
},
{
"name": "variables",
"description": "The \"variables\" key in the body object holds technology specific key/value pairs to append to the message. These can be interpreted and used by the various resource types; for example, the pjsip resource type will add the key/value pairs as SIP headers,",
"paramType": "body",
"required": false,
"dataType": "containers",
"allowMultiple": false
}
],
"errorResponses": [
{
"code": 400,
"reason": "Invalid parameters for referring."
},
{
"code": 404,
"reason": "Endpoint not found"
}
]
}
]
}
],
"models": {