xcapclient¶
To use this script you must to have a valid ~/xcapclient.ini configuration file. For more information consult the documentation that comes with python-xcaplib package.
Description¶
XCAP protocol, defined in RFC 4825, allows a client to read, write, and
modify application configuration data stored in XML format on a server. XCAP
maps XML document sub-trees and element attributes to HTTP URIs, so that
these components can be directly accessed by HTTP. An XCAP server used by
XCAP clients to store data like presence policy in combination with a SIP
Presence server that supports PUBLISH/SUBSCRIBE/NOTIFY SIP methods can
provide a complete SIP SIMPLE solution.
This XCAP client is part of python-xcaplib package provided by OpenXCAP server. If you have installed bash_completion.d/xcapclient you can use TAB completion to browse through the content of the XCAP server documents/nodes/atributes. For more information read the documentation that comes with the package.
adigeo@ag-imac3:~$xcapclient -h xcapclient: Client for managing full or partial XML documents on XCAP servers (RFC 4825) xcapclient [OPTIONS] --app AUID ACTION [NODE-SELECTOR] ACTION is an operation to perform: get, replace, insert, put or delete. Presence of NODE-SELECTOR indicates that action is to be performed on an element or an attribute. Options: -h, --help show this help message and exit -a NAME, --account-name=NAME the account name from which to read account settings. Corresponds to section Account_NAME in the configuration file. If not supplied, the section [Account] will be read. --show-config show options from the configuration file; use together with --account-name --xcap-root=XCAP_ROOT XCAP root, e.g. https://xcap.example.com/xcap-root --sip-address=SIP_ADDRESS SIP address of the user in the form username@domain -p PASSWORD, --password=PASSWORD password to use if authentication is required. If not supplied will be asked interactively --app=AUID Application Unique ID. There's no default value; however, it may be guessed from NODE-SELECTOR or from the input file. Known apps: watchers, pidf- manipulation, rls-services, resource-lists, xcap- caps, pres-rules, test-app --filename=FILENAME -c CONTEXT, --context=CONTEXT document context, users or global; default is users for everything except xcap-caps --etag=ETAG perform a conditional operation -i INPUT_FILENAME source file for the PUT request; default is <stdin> -o OUTPUT_FILENAME output file for the body of the server response (successful or not); default is <stdout> -d, --dump print HTTP traffic to stderr
Example for XCAP server capabilities (xcap-caps)¶
adigeo@ag-imac3:~$xcapclient -a alice --app xcap-caps GET get https://xcap.sipthor.net/xcap-root/xcap-caps/global/index etag: "ab12efdd1aff88296deee1aa195b823e" content-type: application/xcap-caps+xml content-length: 826 <?xml version='1.0' encoding='UTF-8'?> <xcap-caps xmlns='urn:ietf:params:xml:ns:xcap-caps'> <auids> <auid>watchers</auid> <auid>org.openmobilealliance.pres-rules</auid> <auid>rls-services</auid> <auid>pidf-manipulation</auid> <auid>xcap-caps</auid> <auid>test-app</auid> <auid>resource-lists</auid> <auid>pres-rules</auid> </auids> <extensions> </extensions> <namespaces> <namespace>http://openxcap.org/ns/watchers</namespace> <namespace>urn:ietf:params:xml:ns:pres-rules</namespace> <namespace>urn:ietf:params:xml:ns:rls-services</namespace> <namespace>urn:ietf:params:xml:ns:pidf</namespace> <namespace>urn:ietf:params:xml:ns:xcap-caps</namespace> <namespace>test-app</namespace> <namespace>urn:ietf:params:xml:ns:resource-lists</namespace> <namespace>urn:ietf:params:xml:ns:pres-rules</namespace> </namespaces> </xcap-caps>
Example for pres-rules XCAP document¶
PUT¶
adigeo@ag-imac3:~$xcapclient -a alice PUT -i work/python-xcaplib/examples/pres-rules.xml put https://xcap.sipthor.net/xcap-root/pres-rules/users/sip:alice@example.com/index 201 Created etag: "345ba7c1ce125b2ff2438c19b25b4077" content-type: application/auth-policy+xml
GET¶
adigeo@ag-imac3:~$xcapclient -a alice --app pres-rules get get https://xcap.sipthor.net/xcap-root/pres-rules/users/sip:alice@example.com/index etag: "345ba7c1ce125b2ff2438c19b25b4077" content-type: application/auth-policy+xml content-length: 939 <?xml version="1.0" encoding="UTF-8"?> <ruleset xmlns="urn:ietf:params:xml:ns:common-policy" xmlns:pr="urn:ietf:params:xml:ns:pres-rules" xmlns:cp="www.counterpath.com/privacy-lists"> <rule id="pres_whitelist"> <conditions> <identity> <one id="sip:bob@example.com"/> <one id="sip:alice@example.com"/> <many domain="ag-projects.com"> </many> </identity> </conditions> <actions> <pr:sub-handling>allow</pr:sub-handling> </actions> <transformations> <pr:provide-services> <pr:all-services/> </pr:provide-services> <pr:provide-persons> <pr:all-persons/> </pr:provide-persons> <pr:provide-devices> <pr:all-devices/> </pr:provide-devices> <pr:provide-all-attributes/> </transformations> </rule> <rule id="pres_blacklist"> <conditions> <identity> <one id="sip:40316600024@abc.com"/> </identity> </conditions> <actions> <pr:sub-handling>block</pr:sub-handling> </actions> <transformations/> </rule> </ruleset>
DELETE¶
adigeo@ag-imac3:~$xcapclient -a alice --app pres-rules DELETE delete https://xcap.sipthor.net/xcap-root/pres-rules/users/sip:alice@example.com/index 200 OK content-type: application/auth-policy+xml
Example for resource-lists XCAP document¶
PUT¶
adigeo@ag-imac3:~$xcapclient -a alice PUT -i work/python-xcaplib/examples/resource-lists.xml put https://xcap.sipthor.net/xcap-root/resource-lists/users/sip:alice@example.com/index 201 Created etag: "f8c47352d61b5b256ee80d964e03efd6" content-type: application/resource-lists+xml
GET¶
adigeo@ag-imac3:~$xcapclient -a alice --app resource-lists GET get https://xcap.sipthor.net/xcap-root/resource-lists/users/sip:alice@example.com/index etag: "f8c47352d61b5b256ee80d964e03efd6" content-type: application/resource-lists+xml content-length: 991 <?xml version="1.0" encoding="UTF-8"?> <resource-lists xmlns="urn:ietf:params:xml:ns:resource-lists" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <list name="friends"> <entry uri="sip:bill@example.com"> <display-name>Bill Doe</display-name> </entry> <entry-ref ref="resource-lists/users/sip:bill@example.com/index/~~/resource-lists/list%5b@name=%22list1%22%5d/entry%5b@uri=%22sip:petri@example.com%22%5d"/> <list name="close-friends"> <display-name>Close Friends</display-name> <entry uri="sip:joe@example.com"> <display-name>Joe Smith</display-name> </entry> <entry uri="sip:nancy@example.com"> <display-name>Nancy Gross</display-name> </entry> <external anchor="http://xcap.example.org/resource-lists/users/sip:a@example.org/index/~~/resource-lists/list%5b@name=%22mkting%22%5d"> <display-name>Marketing</display-name> </external> </list> </list> </resource-lists>
DELETE¶
adigeo@ag-imac3:~$xcapclient -a alice --app resource-lists DELETE delete https://xcap.sipthor.net/xcap-root/resource-lists/users/sip:alice@example.com/index 200 OK content-type: application/resource-lists+xml adigeo@ag-imac3:~$
Example for rls-services XCAP document¶
PUT¶
adigeo@ag-imac3:~$xcapclient -a alice PUT -i work/python-xcaplib/examples/rls-services.xml put https://xcap.sipthor.net/xcap-root/rls-services/users/sip:alice@example.com/index 201 Created etag: "44f5fca1b08352815ee12f1a0c32d812" content-type: application/rls-services+xml
GET¶
adigeo@ag-imac3:~$xcapclient -a alice --app rls-services GET get https://xcap.sipthor.net/xcap-root/rls-services/users/sip:alice@example.com/index etag: "44f5fca1b08352815ee12f1a0c32d812" content-type: application/rls-services+xml content-length: 797 <?xml version="1.0" encoding="UTF-8"?> <rls-services xmlns="urn:ietf:params:xml:ns:rls-services" xmlns:rl="urn:ietf:params:xml:ns:resource-lists" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <service uri="sip:mybuddies@example.com"> <resource-list>https://xcap.example.com/xcap-root/resource-lists/users/sip:alice@example.com/index/~~/resource-lists/list%5b@name=%22l1%22%5d</resource-list> <packages> <package>presence</package> </packages> </service> <service uri="sip:marketing@example.com"> <list name="marketing"> <rl:entry uri="sip:joe@example.com"/> <rl:entry uri="sip:sudhir@example.com"/> </list> <packages> <package>presence</package> </packages> </service> </rls-services>
DELETE¶
adigeo@ag-imac3:~$xcapclient -a alice --app rls-services DELETE delete https://xcap.sipthor.net/xcap-root/rls-services/users/sip:alice@example.com/index 200 OK content-type: application/rls-services+xml