[Index]
Model ref.: device/cucm/SIPNormalizationScript
The full URL would include the host-proxy name: https://[host-proxy].
Variables are enclosed in square brackets.
{ "$schema": "http://json-schema.org/draft-03/schema", "type": "object", "properties": { "name": { "minItems": 1, "required": true, "type": "string", "maxItems": 1, "title": "Name" }, "maxMemoryThreshold": { "title": "Max Memory Threshold", "minItems": 1, "required": true, "default": "50", "maxItems": 1, "type": "string" }, "description": { "minItems": 0, "required": false, "type": "string", "maxItems": 1, "title": "Description" }, "content": { "minItems": 1, "required": true, "type": "string", "maxItems": 1, "title": "Content" }, "systemResourceErrorRecoveryAction": { "title": "System Resource Error Recovery Action", "minItems": 1, "required": true, "choices": [ { "value": "Message Rollback Only", "title": "Message Rollback Only" }, { "value": "Disable Script", "title": "Disable Script" }, { "value": "Reset Script", "title": "Reset Script" }, { "value": "Reset Trunk / Restart Device", "title": "Reset Trunk / Restart Device" } ], "default": "Disable Script", "maxItems": 1, "type": "string" }, "maxLuaInstructionsThreshold": { "title": "Max Lua Instructions Threshold", "minItems": 1, "required": true, "default": "1000", "maxItems": 1, "type": "string" }, "scriptExecutionErrorRecoveryAction": { "title": "Script Execution Error Recovery Action", "minItems": 1, "required": true, "choices": [ { "value": "Message Rollback Only", "title": "Message Rollback Only" }, { "value": "Disable Script", "title": "Disable Script" }, { "value": "Reset Script", "title": "Reset Script" }, { "value": "Reset Trunk / Restart Device", "title": "Reset Trunk / Restart Device" } ], "default": "Message Rollback Only", "maxItems": 1, "type": "string" }, "isStandard": { "description": "If the value of isStandard is t (true), the fields are not editable.", "title": "Is Standard", "minItems": 1, "required": true, "maxItems": 1, "type": "boolean" } }, "schema_version": "14.0" }
Task | Call | URL | Parameters | Response |
---|---|---|---|---|
Get the GUI Add form. | GET | /api/device/cucm/SIPNormalizationScript/add/ |
|
The GUI Add form of device/cucm/SIPNormalizationScript as JSON |
The API call to the /add/ URL can only be made from a hierarchy that allows the model type to be added. The actions in the response shows the url for the POST API call to create an instance.
Task | Call | URL | Parameters | Payload |
---|---|---|---|---|
Create | POST | /api/device/cucm/SIPNormalizationScript | hierarchy=[hierarchy] |
|
tool/Transaction/[trans pkid]to inspect the created resource and its instance pkid.
Task | Call | URL | Parameters | Payload |
---|---|---|---|---|
Bulk delete [pkid1],[pkid2]... | DELETE | /api/device/cucm/SIPNormalizationScript/ | hierarchy=[hierarchy] | {"hrefs":["/api/device/cucm/SIPNormalizationScript/[pkid1]", "/api/device/cucm/SIPNormalizationScript/[pkid2]", ...]} |
GET http://[host-proxy]/api/device/cucm/SIPNormalizationScript/?hierarchy=[hierarchy]&format=json
Task | Call | URL | Parameters | Response |
---|---|---|---|---|
Bulk Modify | GET | /api/device/cucm/SIPNormalizationScript/bulk_update/?schema=&schema_rules=true |
|
|
Task | Call | URL | Parameters | Payload |
---|---|---|---|---|
Bulk Modify | POST | /api/device/cucm/SIPNormalizationScript/bulk_update/ |
|
For example: {"data":{"name":"value"}, "meta":{}, "request_meta":{ "hrefs":["/api/v0/device/cucm/SIPNormalizationScript/[pkid1]", "/api/v0/device/cucm/SIPNormalizationScript/[pkid2]",...]}} |
GET http://[host-proxy]/api/device/cucm/SIPNormalizationScript/?hierarchy=[hierarchy]&format=json
Task | Call | URL | Parameters | Payload |
---|---|---|---|---|
Move the instance with [pkid] to [target_hierarchy] | POST | /api/tool/DataMove/?model_type=device/cucm/SIPNormalizationScript |
|
{"hrefs": ["/api/device/cucm/SIPNormalizationScript/[pkid]"]} |
Bulk Move | POST | /api/tool/DataMove/?model_type=device/cucm/SIPNormalizationScript |
|
{"hrefs": ["/api/device/cucm/SIPNormalizationScript/[pkid1]", "/api/device/cucm/SIPNormalizationScript/[pkid2]",...]} |
Task | Call | URL | Parameters | Payload |
---|---|---|---|---|
Get a selected [export_format] of the schema and instances [pkid1], [pkid2],... of device/cucm/SIPNormalizationScript; optionally with tag_version at [version] and Configuration Template as [configtemplate]. | POST | /api/device/cucm/SIPNormalizationScript/export/ |
|
{ "hrefs":["/api/device/cucm/SIPNormalizationScript/[pkid1]", "/api/device/cucm/SIPNormalizationScript/[pkid2]",...]}} |
For export_format=json, the response is a time stamped zip file of data in JSON as in the system database. Item properties such as strings that are empty or Boolean values that are not set, are not included. The filename in the response is of the format as the example:
Content-Disposition: attachment; filename=export_2013-05-17_14:20:19.186444.json.zip Content-Language:en Content-Type:application/x-zip
For export_format=raw_xlsx, the response is a MS Excel spreadsheet with columns corresponding to the JSON format export and a response filename format:
Content-Disposition: attachment; filename=<resource_type>_<resource_name>_exportedsheet_CCYY-MM-DD_HH-MM-SS.xlsx Content-Language:en Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
For export_format=xlsx, the response is a MS Excel spreadsheet, arranged by any Field Display Policies that apply. The columns correspond with those of a Bulk Load Template export sheet. The response filename format is:
Content-Disposition: attachment; filename=<resource_type>_<resource_name>_exportedsheet_formatted_CCYY-MM-DD_HH-MM-SS.xlsx Content-Language:en Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
The XLSX format can be used to bulk load instances of device/cucm/SIPNormalizationScript and the JSON format can be used to import instances of device/cucm/SIPNormalizationScript.
GET http://[host-proxy]/api/device/cucm/SIPNormalizationScript/?hierarchy=[hierarchy]
Task | Call | URL | Parameters | Response |
---|---|---|---|---|
Get a compressed format of the Bulk Load spreadsheet template for device/cucm/SIPNormalizationScript | POST | /api/device/cucm/SIPNormalizationScript/export_bulkload_template/ |
|
The response is an attachment of the format: filetype_bulkloadsheet.xlsx.gz |
Task | Call | URL | Parameters | Response |
---|---|---|---|---|
Configuration Template | GET | /api/device/cucm/SIPNormalizationScript/configuration_template/ | hierarchy=[hierarchy] |
|
POST http://[host-proxy]/api/data/ConfigurationTemplate/?hierarchy=[hierarchy]
Task | Call | URL | Parameters | Response |
---|---|---|---|---|
Field Display Policy | GET | /api/device/cucm/SIPNormalizationScript/field_display_policy/ | hierarchy=[hierarchy] |
|
POST http://[host-proxy]/api/data/FieldDisplayPolicy/?hierarchy=[hierarchy]
Task | Call | URL | Parameters | Response |
---|---|---|---|---|
List | GET | /api/device/cucm/SIPNormalizationScript/ |
|
The device/cucm/SIPNormalizationScript schema and all instances as JSON. |
(The list will return 0 to 3 device/cucm/SIPNormalizationScript instances)
{ "operations": [ "field_display_policy", "configuration_template", "help", "get", "clone", "move", "list", "update", "remove", "bulk_update_form", "add", "transform", "export", "export_bulkload_template" ], "pagination": { "direction": "asc", "order_by": "name", "maximum_limit": 2000, "skip": 0, "current": "/api/device/cucm/SIPNormalizationScript/?skip=0&limit=3&order_by=name&direction=asc&traversal=default", "limit": 3, "total_limit": null, "total": 8 }, "meta": { "tags": [], "cached": true, "title": "", "business_key": {}, "schema_version": "14.0", "references": { "device": [ { "pkid": "", "href": "" } ], "children": [], "parent": [ { "pkid": "6t0ggef2c0deab00hb595101", "href": "/api/data/HierarchyNode/6t0ggef2c0deab00hb595101" } ], "foreign_key": [] }, "actions": [ { "add": { "support_async": false, "class": "add", "href": "/api/device/cucm/SIPNormalizationScript/add/?hierarchy=[hierarchy]", "method": "GET", "title": "Add" } }, { "remove": { "support_async": true, "class": "delete", "href": "/api/device/cucm/SIPNormalizationScript/?hierarchy=[hierarchy]", "method": "DELETE", "title": "Delete" } }, { "bulk_update_form": { "support_async": false, "class": "update", "href": "/api/device/cucm/SIPNormalizationScript/bulk_update/?hierarchy=[hierarchy]&schema=&schema_rules=true", "method": "GET", "title": "Bulk Modify" } }, { "move": { "title": "Move", "support_async": true, "class": "move", "href": "/api/tool/DataMove/?hierarchy=[hierarchy]&model_type=device/cucm/SIPNormalizationScript", "method": "POST", "view": "/api/tool/DataMove/?auth_token=[authtoken] } }, { "export": { "title": "Export", "support_async": false, "submit": "payload", "class": "export", "href": "/api/device/cucm/SIPNormalizationScript/export/?hierarchy=[hierarchy]", "method": "POST", "view": "/api/view/ExportData/add/?auth_token=[authtoken] } }, { "export_bulkload_template": { "support_async": false, "class": "bulkload_template", "href": "/api/device/cucm/SIPNormalizationScript/export_bulkload_template/?hierarchy=[hierarchy]", "method": "POST", "title": "Export Bulk Load Template" } }, { "configuration_template": { "support_async": false, "class": "config", "href": "/api/device/cucm/SIPNormalizationScript/configuration_template/?hierarchy=[hierarchy]", "method": "GET", "title": "Configuration Template" } }, { "field_display_policy": { "support_async": false, "class": "display_policy", "href": "/api/device/cucm/SIPNormalizationScript/field_display_policy/?hierarchy=[hierarchy]", "method": "GET", "title": "Field Display Policy" } }, { "list": { "support_async": false, "class": "list", "href": "/api/device/cucm/SIPNormalizationScript/?hierarchy=[hierarchy]", "method": "GET", "title": "List" } }, { "help": { "support_async": false, "class": "help", "href": "/api/device/cucm/SIPNormalizationScript/help?hierarchy=[hierarchy]", "method": "GET", "title": "Help" } }, { "purge": { "support_async": false, "class": "purge", "href": "/api/device/cucm/SIPNormalizationScript/purge/?hierarchy=[hierarchy]", "method": "POST", "title": "Purge" } } ], "model_type": "device/cucm/SIPNormalizationScript", "model_specific_actions": [ "field_display_policy", "configuration_template", "help", "get", "clone", "move", "list", "update", "remove", "add", "export", "export_bulkload_template", "bulk_update_form" ], "summary_attrs": [ { "name": "name", "title": "Name" }, { "name": "description", "title": "Description" }, { "allow_filtering": true, "name": "hierarchy_friendly_name", "title": "Located At" }, { "allow_filtering": false, "name": "summary_device", "title": "Device" } ], "api_version": "21.2", "tagged_versions": [] }, "resources": [ { "pkid": "5f3ae808ce894e001205bd86", "meta": { "tags": [], "cached": true, "title": "att-header-passthrough", "business_key": {}, "schema_version": "", "summary": "false", "references": { "owner": [ { "pkid": "" } ], "device": [ { "pkid": "5f3ae58ace894e00120550c2", "href": "/api/v0/data/CallManager/5f3ae58ace894e00120550c2" } ], "self": [ { "pkid": "5f3ae808ce894e001205bd86", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd86/" } ], "parent": [ { "pkid": "5f3ae552ce894e00120537fa", "href": "/api/data/HierarchyNode/5f3ae552ce894e00120537fa" } ], "foreign_key": [] }, "actions": [ { "update": { "support_async": true, "class": "update", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd86/", "method": "PUT", "title": "Modify" } }, { "remove": { "support_async": true, "class": "delete", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd86/", "method": "DELETE", "title": "Delete" } }, { "clone": { "support_async": false, "class": "clone", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd86/clone/?schema=&schema_rules=true", "method": "GET", "title": "Clone" } }, { "move": { "title": "Move", "support_async": true, "class": "move", "href": "/api/tool/DataMove/5f3ae808ce894e001205bd86/?model_type=device/cucm/SIPNormalizationScript", "method": "POST", "view": "/api/tool/DataMove/" } }, { "export": { "title": "Export", "support_async": false, "submit": "payload", "class": "export", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd86/export/", "method": "GET", "view": "/api/view/ExportData/add/" } }, { "get": { "support_async": false, "class": "get", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd86/", "method": "GET", "title": "Get" } }, { "help": { "support_async": false, "class": "help", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd86/help", "method": "GET", "title": "Help" } }, { "purge": { "support_async": false, "class": "purge", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd86/purge/", "method": "POST", "title": "Purge" } } ], "model_type": "device/cucm/SIPNormalizationScript", "path": [ "6t0ggef2c0deab00hb595101", "5df35e48ce894e0012b345a1", "5f3ae1fcce894e001204e0ed", "5f3ae256ce894e001204f7db", "5f3ae552ce894e00120537fa", "5f3ae808ce894e001205bd86" ], "summary_attrs": [ { "name": "name", "title": "Name" }, { "name": "description", "title": "Description" }, { "allow_filtering": true, "name": "hierarchy_friendly_name", "title": "Located At" }, { "allow_filtering": false, "name": "summary_device", "title": "Device" } ], "api_version": "21.2", "tagged_versions": [] }, "data": { "name": "att-header-passthrough", "maxMemoryThreshold": "100", "hierarchy": "5f3ae552ce894e00120537fa", "description": "Provides passthrough of header x-att-loop", "content": "--[[\n\n Description:\n\n Cisco Unified CM will drop any SIP header that it does not recognize.\n This script will pass through transparently one such header, \"x-att-loop\", from the inbound SIP leg to outbound SIP leg.\n This script must be installed on the SIP leg (or legs) where the above header is received and it will be passed through\n transparently to other SIP leg.\n\n Script Parameters:\n Configure the following script parameters on the SIP Normalization Script in Unified Communications Manager (UCM)\n Memory Threshold -- 100 kilobytes\n Lua Instruction Threshold -- 1000 instructions\n\n--]]\n\nM = {}\n\nM.allowHeaders = {\"x-att-loop\"}\n\nfunction M.inbound_INVITE(msg)\n\n local ntcorrid = msg:getHeader(\"x-att-loop\")\n if ntcorrid\n then\n pt = msg:getPassThrough()\n pt:addHeader(\"x-att-loop\", ntcorrid)\n end\n\nend\nreturn M\n", "isStandard": true, "maxLuaInstructionsThreshold": "1000", "summary_device": "Dedicated CUCM, 192.168.100.15, 8443, hcs.CS-P.CS-AB.AB_Group", "hierarchy_friendly_name": "AB_Group (Customer)", "systemResourceErrorRecoveryAction": "Disable Script", "scriptExecutionErrorRecoveryAction": "Message Rollback Only", "hierarchy_path": "sys.hcs.CS-P.CS-AB.AB_Group" } }, { "pkid": "5f3ae808ce894e001205bd8a", "meta": { "tags": [], "cached": true, "title": "cisco-meeting-server-interop", "business_key": {}, "schema_version": "", "summary": "false", "references": { "owner": [ { "pkid": "" } ], "device": [ { "pkid": "5f3ae58ace894e00120550c2", "href": "/api/v0/data/CallManager/5f3ae58ace894e00120550c2" } ], "self": [ { "pkid": "5f3ae808ce894e001205bd8a", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd8a/" } ], "parent": [ { "pkid": "5f3ae552ce894e00120537fa", "href": "/api/data/HierarchyNode/5f3ae552ce894e00120537fa" } ], "foreign_key": [] }, "actions": [ { "update": { "support_async": true, "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd8a/", "title": "Modify", "class": "update", "method": "PUT" } }, { "remove": { "support_async": true, "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd8a/", "title": "Delete", "class": "delete", "method": "DELETE" } }, { "clone": { "support_async": false, "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd8a/clone/?schema=&schema_rules=true", "title": "Clone", "class": "clone", "method": "GET" } }, { "move": { "title": "Move", "support_async": true, "class": "move", "href": "/api/tool/DataMove/5f3ae808ce894e001205bd8a/?model_type=device/cucm/SIPNormalizationScript", "method": "POST", "view": "/api/tool/DataMove/" } }, { "export": { "title": "Export", "support_async": false, "submit": "payload", "class": "export", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd8a/export/", "method": "GET", "view": "/api/view/ExportData/add/" } }, { "get": { "support_async": false, "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd8a/", "title": "Get", "class": "get", "method": "GET" } }, { "help": { "support_async": false, "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd8a/help", "title": "Help", "class": "help", "method": "GET" } }, { "purge": { "support_async": false, "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd8a/purge/", "title": "Purge", "class": "purge", "method": "POST" } } ], "model_type": "device/cucm/SIPNormalizationScript", "path": [ "6t0ggef2c0deab00hb595101", "5df35e48ce894e0012b345a1", "5f3ae1fcce894e001204e0ed", "5f3ae256ce894e001204f7db", "5f3ae552ce894e00120537fa", "5f3ae808ce894e001205bd8a" ], "summary_attrs": [ { "name": "name", "title": "Name" }, { "name": "description", "title": "Description" }, { "allow_filtering": true, "name": "hierarchy_friendly_name", "title": "Located At" }, { "allow_filtering": false, "name": "summary_device", "title": "Device" } ], "api_version": "21.2", "tagged_versions": [] }, "data": { "name": "cisco-meeting-server-interop", "maxMemoryThreshold": "1000", "hierarchy": "5f3ae552ce894e00120537fa", "description": "Provides interoperability between Unified Communication Manager (UCM) and Cisco Meeting Server", "content": "--[[\n\n Description: \n This script provides interoperability between Unified Communications Manager (UCM) and Cisco Meeting Server(CMS). \n It should be applied on any SIP Trunk on UCM that directly interfaces to a CMS as the next hop.\n\n The script provides the following functions:\n \n If the CMS includes crypto or fingerprint/setup attributes in SDP, but audio/video profile is AVP, \n change it to SAVP and include the X-cisco-srtp-fallback supported option. This allows endpoints to use SRTP if both \n sides support it or fallback to RTP if either side does not.\n\n Script Parameters:\n\n Configure the following script parameters on the SIP Normalization Script in Unified Communications Manager (UCM)\n Memory Threshold -- 1000 kilobytes\n Lua Instruction Threshold -- 2000 instructions\n\n--]]\n\nM = {}\n\nlocal function getMediaDescriptions(sdp)\n -- initialize table of media descriptions\n local mds = {}\n\n -- there won't be more than 10 media descriptions; loop below exits on the first index\n -- that returns nil; that will be the one after the last valid index\n for i = 1, 10\n do\n mds[i] = sdp:getMediaDescription(i)\n\n if not mds[i]\n then\n -- the last one we got was the last media description in this SDP; exit the loop\n break\n end\n end\n\n return mds\nend\n\nlocal function avp_to_savp(md)\n -- returns modified media descriptions if m-line contains RTP/AVP and there is a crypto line;\n -- otherwise returns nil if the media descrpition was not modified.\n if not md\n then\n -- media description was NOT modified\n return nil\n end\n\n local crypto = md:getLine(\"a=\", \"crypto\")\n local fingerprint = md:getLine(\"a=\", \"fingerprint\")\n local setup = md:getLine(\"a=\", \"setup\")\n\n if md:match(\"RTP/AVP\") and (crypto or (fingerprint and setup))\n then\n md = md:gsub(\"RTP/AVP\", \"RTP/SAVP\")\n return md\n end\n\n -- media description was NOT modified\n return nil\nend\n\nlocal function inbound_srtp_fallback(msg, sdp, mds)\n for i, md in ipairs(mds)\n do \n --trace.format(\"media description[%d] \\n===>\\n%s<===\\n\", i, md)\n\n local md_savp = avp_to_savp(md)\n\n if md_savp\n then\n sdp = sdp:modifyMediaDescription(i, md_savp)\n end\n end\n\n -- we may have changed several media descriptions but only need to add the header once\n msg:addHeader(\"Supported\", \"X-cisco-srtp-fallback\")\n\n return sdp\nend\n\nlocal function savp_to_avp(md)\n -- returns modified media descriptions if m-line contains RTP/SAVP and there is a crypto line;\n -- otherwise returns nil if the media descrpition was not modified.\n if not md\n then\n -- media description was NOT modified\n return nil\n end\n\n local crypto = md:getLine(\"a=\", \"crypto\")\n local fingerprint = md:getLine(\"a=\", \"fingerprint\")\n local setup = md:getLine(\"a=\", \"setup\")\n\n if md:match(\"RTP/SAVP\") and (crypto or (fingerprint and setup))\n then\n md = md:gsub(\"RTP/SAVP\", \"RTP/AVP\")\n return md\n end\n\n -- media description was NOT modified\n return nil\nend\n\nlocal function outbound_srtp_fallback(msg, sdp, mds)\n for i, md in ipairs(mds)\n do \n --trace.format(\"media description[%d] \\n===>\\n%s<===\\n\", i, md)\n \n local md_avp = savp_to_avp(md)\n\n if md_avp\n then\n sdp = sdp:modifyMediaDescription(i, md_avp)\n end\n end\n\n return sdp\nend\n\nlocal function remove_malformed_media_description(sdp)\n local mds = getMediaDescriptions(sdp)\n\n local malformed_index = 0\n\n for i, md in ipairs(mds)\n do\n if md:match(\"m=application %d+ RTP/AVP\\r?\\n\")\n then\n malformed_index = i\n break\n end\n end\n\n if malformed_index > 0\n then\n return sdp:removeMediaDescription(malformed_index)\n end\n\n return sdp\nend\n\nlocal function process_inbound_SDP(msg)\n local sdp = msg:getSdp()\n\n if not sdp\n then\n -- there is no inbound SDP\n return\n end\n\n local context = msg:getContext()\n\n -- get a table (indexed by media level) of the media descriptions\n local mds = getMediaDescriptions(sdp)\n sdp = inbound_srtp_fallback(msg, sdp, mds)\n\n msg:setSdp(sdp)\nend\n\nlocal function process_outbound_SDP(msg, isInvite)\n local sdp = msg:getSdp()\n\n if not sdp\n then\n -- there is no outbound SDP\n return\n end\n\n if isInvite\n then\n -- Updated per CSCuq84875. In older releases, this only applied to the initial INVITE.\n -- Now, apply it to all outgoing INVITEs.\n -- get a table (indexed by media level) of the media descriptions\n local mds = getMediaDescriptions(sdp)\n sdp = outbound_srtp_fallback(msg, sdp, mds)\n end\n\n -- remove application media description if it doesn't contain payloads\n sdp = remove_malformed_media_description(sdp)\n\n msg:setSdp(sdp)\nend\n\nlocal function process_outbound_request(msg, isInvite)\n process_outbound_SDP(msg, isInvite)\nend\n\nM.inbound_INVITE = process_inbound_SDP\nM.inbound_18X_INVITE = process_inbound_SDP \nM.inbound_200_INVITE = process_inbound_SDP\nM.inbound_PRACK = process_inbound_SDP\nM.inbound_200_PRACK = process_inbound_SDP\nM.inbound_ACK = process_inbound_SDP\nM.inbound_UPDATE = process_inbound_SDP\nM.inbound_200_UPDATE = process_inbound_SDP\n\nM.outbound_INVITE = function(msg)\n process_outbound_request(msg, true)\nend\n\nM.outbound_18X_INVITE = process_outbound_SDP\nM.outbound_200_INVITE = process_outbound_SDP\nM.outbound_PRACK = process_outbound_request\nM.outbound_200_PRACK = process_outbound_SDP\nM.outbound_ACK = process_outbound_request\nM.outbound_UPDATE = process_outbound_request\nM.outbound_200_UPDATE = process_outbound_SDP\n\nreturn M\n", "isStandard": true, "maxLuaInstructionsThreshold": "2000", "summary_device": "Dedicated CUCM, 192.168.100.15, 8443, hcs.CS-P.CS-AB.AB_Group", "hierarchy_friendly_name": "AB_Group (Customer)", "systemResourceErrorRecoveryAction": "Disable Script", "scriptExecutionErrorRecoveryAction": "Message Rollback Only", "hierarchy_path": "sys.hcs.CS-P.CS-AB.AB_Group" } }, { "pkid": "5f3ae808ce894e001205bd80", "meta": { "tags": [], "cached": true, "title": "cisco-telepresence-conductor-interop", "business_key": {}, "schema_version": "", "summary": "false", "references": { "device": [ { "pkid": "5f3ae58ace894e00120550c2", "href": "/api/v0/data/CallManager/5f3ae58ace894e00120550c2" } ], "owner": [ { "pkid": "" } ], "self": [ { "pkid": "5f3ae808ce894e001205bd80", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd80/" } ], "parent": [ { "pkid": "5f3ae552ce894e00120537fa", "href": "/api/data/HierarchyNode/5f3ae552ce894e00120537fa" } ], "foreign_key": [] }, "actions": [ { "update": { "support_async": true, "method": "PUT", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd80/", "class": "update", "title": "Modify" } }, { "remove": { "support_async": true, "method": "DELETE", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd80/", "class": "delete", "title": "Delete" } }, { "clone": { "support_async": false, "method": "GET", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd80/clone/?schema=&schema_rules=true", "class": "clone", "title": "Clone" } }, { "move": { "title": "Move", "support_async": true, "method": "POST", "href": "/api/tool/DataMove/5f3ae808ce894e001205bd80/?model_type=device/cucm/SIPNormalizationScript", "class": "move", "view": "/api/tool/DataMove/" } }, { "export": { "title": "Export", "support_async": false, "submit": "payload", "method": "GET", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd80/export/", "class": "export", "view": "/api/view/ExportData/add/" } }, { "get": { "support_async": false, "method": "GET", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd80/", "class": "get", "title": "Get" } }, { "help": { "support_async": false, "method": "GET", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd80/help", "class": "help", "title": "Help" } }, { "purge": { "support_async": false, "method": "POST", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd80/purge/", "class": "purge", "title": "Purge" } } ], "model_type": "device/cucm/SIPNormalizationScript", "path": [ "6t0ggef2c0deab00hb595101", "5df35e48ce894e0012b345a1", "5f3ae1fcce894e001204e0ed", "5f3ae256ce894e001204f7db", "5f3ae552ce894e00120537fa", "5f3ae808ce894e001205bd80" ], "summary_attrs": [ { "name": "name", "title": "Name" }, { "name": "description", "title": "Description" }, { "allow_filtering": true, "name": "hierarchy_friendly_name", "title": "Located At" }, { "allow_filtering": false, "name": "summary_device", "title": "Device" } ], "api_version": "21.2", "tagged_versions": [] }, "data": { "name": "cisco-telepresence-conductor-interop", "maxMemoryThreshold": "1000", "description": "Provides interoperability for endpoints registered to the TelePresence Conductor", "content": "--[[\n\n Description: \n This script provides interoperability between Unified Communications Manager (UCM) and Cisco TelePresence Conductor. \n It should be applied on any SIP Trunk on UCM that directly interfaces to a Conductor as the next hop.\n\n The script provides the following two functions:\n \n 1. Use configured top-level-domain for all headers that contain the calling party information. Note that this \n functionality is no longer needed and has been replaced by the \"Use Fully Qualified Domain\" checkbox on the \n SIP Profile in Unified Communications Manager. It remains here in the script for existing installations, but going \n forward customers are encouraged to stop using this feature of the script, and instead remove the top-level-domain \n SIP Normalization parameter on the SIP Trunk page and instead enable the \"Use Fully Qualified Domain\" checkbox on \n the SIP Profile page and configure the Organization Top Level Domain parameter on the Enterprise Parameters page). \n\n 2. If the Conductor includes crypto or fingerprint/setup attributes in SDP, but audio/video profile is AVP, \n change it to SAVP and include the X-cisco-srtp-fallback supported option. This allows endpoints to use SRTP if both \n sides support it or fallback to RTP if either side does not.\n\n Script Parameters:\n Configure the following script parameters on the SIP Trunk in Unified Communications Manager (UCM)\n top-level-domain -- Configure this parameter if the script needs to convert From, Remote-Party-ID, and P-Asserted-Identity\n headers so that the host portion of the URI is the configured top-level-domain. Note that this is a \n legacy function as described above\n\n Configure the following script parameters on the SIP Normalization Script in Unified Communications Manager (UCM)\n Memory Threshold -- 1000 kilobytes\n Lua Instruction Threshold -- 2000 instructions\n\n--]]\n\nM = {}\n\nlocal top_level_domain = scriptParameters.getValue(\"top-level-domain\")\n\nlocal function getMediaDescriptions(sdp)\n -- initialize table of media descriptions\n local mds = {}\n\n -- there won't be more than 10 media descriptions; loop below exits on the first index\n -- that returns nil; that will be the one after the last valid index\n for i = 1, 10\n do\n mds[i] = sdp:getMediaDescription(i)\n\n if not mds[i]\n then\n -- the last one we got was the last media description in this SDP; exit the loop\n break\n end\n end\n\n return mds\nend\n\nlocal function avp_to_savp(md)\n -- returns modified media descriptions if m-line contains RTP/AVP and there is a crypto line;\n -- otherwise returns nil if the media descrpition was not modified.\n if not md\n then\n -- media description was NOT modified\n return nil\n end\n\n local crypto = md:getLine(\"a=\", \"crypto\")\n local fingerprint = md:getLine(\"a=\", \"fingerprint\")\n local setup = md:getLine(\"a=\", \"setup\")\n\n if md:match(\"RTP/AVP\") and (crypto or (fingerprint and setup))\n then\n md = md:gsub(\"RTP/AVP\", \"RTP/SAVP\")\n return md\n end\n\n -- media description was NOT modified\n return nil\nend\n\nlocal function inbound_srtp_fallback(msg, sdp, mds)\n for i, md in ipairs(mds)\n do \n --trace.format(\"media description[%d] \\n===>\\n%s<===\\n\", i, md)\n\n local md_savp = avp_to_savp(md)\n\n if md_savp\n then\n sdp = sdp:modifyMediaDescription(i, md_savp)\n end\n end\n\n -- we may have changed several media descriptions but only need to add the header once\n msg:addHeader(\"Supported\", \"X-cisco-srtp-fallback\")\n\n return sdp\nend\n\nlocal function savp_to_avp(md)\n -- returns modified media descriptions if m-line contains RTP/SAVP and there is a crypto line;\n -- otherwise returns nil if the media descrpition was not modified.\n if not md\n then\n -- media description was NOT modified\n return nil\n end\n\n local crypto = md:getLine(\"a=\", \"crypto\")\n local fingerprint = md:getLine(\"a=\", \"fingerprint\")\n local setup = md:getLine(\"a=\", \"setup\")\n\n if md:match(\"RTP/SAVP\") and (crypto or (fingerprint and setup))\n then\n md = md:gsub(\"RTP/SAVP\", \"RTP/AVP\")\n return md\n end\n\n -- media description was NOT modified\n return nil\nend\n\nlocal function outbound_srtp_fallback(msg, sdp, mds)\n for i, md in ipairs(mds)\n do \n --trace.format(\"media description[%d] \\n===>\\n%s<===\\n\", i, md)\n \n local md_avp = savp_to_avp(md)\n\n if md_avp\n then\n sdp = sdp:modifyMediaDescription(i, md_avp)\n end\n end\n\n return sdp\nend\n\nlocal function remove_malformed_media_description(sdp)\n local mds = getMediaDescriptions(sdp)\n\n local malformed_index = 0\n\n for i, md in ipairs(mds)\n do\n if md:match(\"m=application %d+ RTP/AVP\\r?\\n\")\n then\n malformed_index = i\n break\n end\n end\n\n if malformed_index > 0\n then\n return sdp:removeMediaDescription(malformed_index)\n end\n\n return sdp\nend\n\nlocal function process_inbound_SDP(msg)\n local sdp = msg:getSdp()\n\n if not sdp\n then\n -- there is no inbound SDP\n return\n end\n\n local context = msg:getContext()\n\n -- get a table (indexed by media level) of the media descriptions\n local mds = getMediaDescriptions(sdp)\n sdp = inbound_srtp_fallback(msg, sdp, mds)\n\n msg:setSdp(sdp)\nend\n\nlocal function modify_rhs_of_uri(msg, header, rhs)\n local value = msg:getHeader(header)\n\n if value and rhs\n then\n local replacePattern = string.format(\"<sip:%s@%s>\", \"%1\", rhs)\n value = value:gsub(\"<sip:(.*)@(.*)>\", replacePattern)\n msg:modifyHeader(header, value)\n end\nend\n\nlocal function modify_rhs_of_uri_for_calling_party(msg)\n if not top_level_domain\n then\n return\n end\n\n modify_rhs_of_uri(msg, \"From\", top_level_domain)\n modify_rhs_of_uri(msg, \"Remote-Party-Id\", top_level_domain)\n modify_rhs_of_uri(msg, \"P-Asserted-Identity\", top_level_domain)\nend\n\nlocal function process_outbound_SDP(msg, isInvite)\n local sdp = msg:getSdp()\n\n if not sdp\n then\n -- there is no outbound SDP\n return\n end\n\n if isInvite\n then\n -- Updated per CSCuq84875. In older releases, this only applied to the initial INVITE.\n -- Now, apply it to all outgoing INVITEs.\n -- get a table (indexed by media level) of the media descriptions\n local mds = getMediaDescriptions(sdp)\n sdp = outbound_srtp_fallback(msg, sdp, mds)\n end\n\n -- remove application media description if it doesn't contain payloads\n sdp = remove_malformed_media_description(sdp)\n\n msg:setSdp(sdp)\nend\n\nlocal function process_outbound_request(msg, isInvite)\n modify_rhs_of_uri_for_calling_party(msg)\n process_outbound_SDP(msg, isInvite)\nend\n\nM.inbound_INVITE = process_inbound_SDP\nM.inbound_18X_INVITE = process_inbound_SDP \nM.inbound_200_INVITE = process_inbound_SDP\nM.inbound_PRACK = process_inbound_SDP\nM.inbound_200_PRACK = process_inbound_SDP\nM.inbound_ACK = process_inbound_SDP\nM.inbound_UPDATE = process_inbound_SDP\nM.inbound_200_UPDATE = process_inbound_SDP\n\nM.outbound_INVITE = function(msg)\n process_outbound_request(msg, true)\nend\n\nM.outbound_18X_INVITE = process_outbound_SDP\nM.outbound_200_INVITE = process_outbound_SDP\nM.outbound_PRACK = process_outbound_request\nM.outbound_200_PRACK = process_outbound_SDP\nM.outbound_ACK = process_outbound_request\nM.outbound_UPDATE = process_outbound_request\nM.outbound_200_UPDATE = process_outbound_SDP\n\nreturn M\n", "systemResourceErrorRecoveryAction": "Disable Script", "maxLuaInstructionsThreshold": "2000", "summary_device": "Dedicated CUCM, 192.168.100.15, 8443, hcs.CS-P.CS-AB.AB_Group", "hierarchy_friendly_name": "AB_Group (Customer)", "hierarchy_path": "sys.hcs.CS-P.CS-AB.AB_Group", "scriptExecutionErrorRecoveryAction": "Message Rollback Only", "isStandard": true } } ] }
(Show the first instance)
{ "pkid": "5f3ae808ce894e001205bd86", "meta": { "tags": [], "cached": true, "cache_control_policy": "cache_then_device", "title": "att-header-passthrough", "business_key": {}, "schema_version": "11.5", "references": { "parent": [ { "pkid": "5f3ae552ce894e00120537fa", "href": "/api/data/HierarchyNode/5f3ae552ce894e00120537fa" } ], "self": [ { "pkid": "5f3ae808ce894e001205bd86", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd86/" } ], "foreign_key": [], "owner": [ { "pkid": "" } ], "device": [ { "pkid": "5f3ae58ace894e00120550c2", "href": "/api/v0/data/CallManager/5f3ae58ace894e00120550c2" } ], "children": [] }, "actions": [ { "update": { "support_async": true, "class": "update", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd86/?hierarchy=[hierarchy]", "method": "PUT", "title": "Modify" } }, { "remove": { "support_async": true, "class": "delete", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd86/?hierarchy=[hierarchy]", "method": "DELETE", "title": "Delete" } }, { "clone": { "support_async": false, "class": "clone", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd86/clone/?hierarchy=[hierarchy]&schema=&schema_rules=true", "method": "GET", "title": "Clone" } }, { "move": { "title": "Move", "support_async": true, "class": "move", "href": "/api/tool/DataMove/5f3ae808ce894e001205bd86/?hierarchy=[hierarchy]&model_type=device/cucm/SIPNormalizationScript", "method": "POST", "view": "/api/tool/DataMove/?auth_token=[authtoken] } }, { "export": { "title": "Export", "support_async": false, "submit": "payload", "class": "export", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd86/export/?hierarchy=[hierarchy]", "method": "GET", "view": "/api/view/ExportData/add/?auth_token=[authtoken] } }, { "get": { "support_async": false, "class": "get", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd86/?hierarchy=[hierarchy]", "method": "GET", "title": "Get" } }, { "help": { "support_async": false, "class": "help", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd86/help?hierarchy=[hierarchy]", "method": "GET", "title": "Help" } }, { "purge": { "support_async": false, "class": "purge", "href": "/api/device/cucm/SIPNormalizationScript/5f3ae808ce894e001205bd86/purge/?hierarchy=[hierarchy]", "method": "POST", "title": "Purge" } } ], "model_type": "device/cucm/SIPNormalizationScript", "path": [ "6t0ggef2c0deab00hb595101", "5df35e48ce894e0012b345a1", "5f3ae1fcce894e001204e0ed", "5f3ae256ce894e001204f7db", "5f3ae552ce894e00120537fa", "5f3ae808ce894e001205bd86" ], "summary_attrs": [ { "name": "name", "title": "Name" }, { "name": "description", "title": "Description" }, { "allow_filtering": true, "name": "hierarchy_friendly_name", "title": "Located At" }, { "allow_filtering": false, "name": "summary_device", "title": "Device" } ], "api_version": "21.2", "tagged_versions": [] }, "data": { "name": "att-header-passthrough", "maxMemoryThreshold": "100", "isStandard": true, "content": "--[[\n\n Description:\n\n Cisco Unified CM will drop any SIP header that it does not recognize.\n This script will pass through transparently one such header, \"x-att-loop\", from the inbound SIP leg to outbound SIP leg.\n This script must be installed on the SIP leg (or legs) where the above header is received and it will be passed through\n transparently to other SIP leg.\n\n Script Parameters:\n Configure the following script parameters on the SIP Normalization Script in Unified Communications Manager (UCM)\n Memory Threshold -- 100 kilobytes\n Lua Instruction Threshold -- 1000 instructions\n\n--]]\n\nM = {}\n\nM.allowHeaders = {\"x-att-loop\"}\n\nfunction M.inbound_INVITE(msg)\n\n local ntcorrid = msg:getHeader(\"x-att-loop\")\n if ntcorrid\n then\n pt = msg:getPassThrough()\n pt:addHeader(\"x-att-loop\", ntcorrid)\n end\n\nend\nreturn M\n", "systemResourceErrorRecoveryAction": "Disable Script", "maxLuaInstructionsThreshold": "1000", "scriptExecutionErrorRecoveryAction": "Message Rollback Only", "description": "Provides passthrough of header x-att-loop" } }
Task | Call | URL | Parameters | Response |
---|---|---|---|---|
Get the on-line Help for device/cucm/SIPNormalizationScript. | GET | /api/device/cucm/SIPNormalizationScript/help | hierarchy=[hierarchy] | On-line help of Model ref.: device/cucm/SIPNormalizationScript as HTML |
Task | Call | URL | Parameters | Payload |
---|---|---|---|---|
Modify | PUT | /api/device/cucm/SIPNormalizationScript/[pkid] | hierarchy=[hierarchy] | (For payload specification) |
For Bulk modification, refer to the Bulk Modify section.
Task | Call | URL | Parameters | Response |
---|---|---|---|---|
Delete | DELETE | /api/device/cucm/SIPNormalizationScript/[pkid] | hierarchy=[hierarchy] |
Task | Call | URL | Parameters | Response |
---|---|---|---|---|
Clone instance with [pkid]. The schema rules are applied. | GET | /api/device/cucm/SIPNormalizationScript/[pkid]/clone/?schema=&schema_rules=true |
|
A JSON payload with:
|
GET http://[host-proxy]/api/device/cucm/SIPNormalizationScript/?hierarchy=[hierarchy]&format=json
Task | Call | URL | Parameters | Payload |
---|---|---|---|---|
Move | POST | /api/tool/DataMove/[pkid]/?model_type=device/cucm/SIPNormalizationScript | hierarchy=[hierarchy] | If payload required: |
Task | Call | URL | Parameters | Response |
---|---|---|---|---|
Get a selected [export_format] of the schema and a single instance with [pkid] of device/cucm/SIPNormalizationScript; optionally with tag_version at [version] and Configuration Template as [configtemplate]. | GET | /api/device/cucm/SIPNormalizationScript/[pkid]/export |
|
The response is an attachment. Refer to the list below. |
For export_format=raw_xlsx, the response is a "raw" MS Excel spreadsheet with columns corresponding to the JSON format export and a response format:
Content-Disposition: attachment; filename=<resource_type>_<resource_name>_exportedsheet_CCYY-MM-DD_HH-MM-SS.xlsx Content-Language:en Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
For export_format=xlsx, the response is a MS Excel spreadsheet, formatted to show all columns and a response format:
Content-Disposition: attachment; filename=<resource_type>_<resource_name>_exportedsheet_formatted_CCYY-MM-DD_HH-MM-SS.xlsx Content-Language:en Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
For export_format=json, the response is a time stamped zip file of data in JSON and a response format:
Content-Disposition: attachment; filename=export_2013-05-17_14:20:19.186444.json.zip Content-Language:en Content-Type:application/x-zip
The XLSX format can be used to bulk load instances of device/cucm/SIPNormalizationScript and the JSON format can be used to import instances of device/cucm/SIPNormalizationScript.
For Bulk Export, refer to the Bulk Export section.
Task | Call | URL | Parameters | Response |
---|---|---|---|---|
Get | GET | /api/device/cucm/SIPNormalizationScript/[pkid] | hierarchy=[hierarchy] | The device/cucm/SIPNormalizationScript instance with [pkid]. |
Task | Call | URL | Parameters | Response |
---|---|---|---|---|
Help | GET | /api/device/cucm/SIPNormalizationScript/[pkid]/help | hierarchy=[hierarchy] | The on-line Help for device/cucm/SIPNormalizationScript. |
Task | Call | URL | Parameters | Payload |
---|---|---|---|---|
Purge | POST | /api/device/cucm/SIPNormalizationScript/[pkid]/purge | hierarchy=[hierarchy] | If payload required: |