Gauche-XMPPのリファレンスマニュアル
Class: <xmpp-connection>
サーバへのXMPPコネクションを保持するオブジェクト。以下の公開スロットがあります。
stream-id: 接続時にサーバが提示したXMPPストリームのid。文字列。
features: 接続時にサーバが提示した<features>の内容。SXML。
Condition: <xmpp-error>
サーバから接続が切られた場合や、サーバの返したXMPPレスポンスのフォーマットが正しくない場合に
投げられるコンディションです。<error>を継承します。
Function: xmpp-connect host &keyword port jid-domain-part
サーバに接続します。
portで接続ポートを指定できます。デフォルトは5222です。
jid-domain-partで例えば"gmail.com"と指定することで、Google Talkのような
「サーバは"talk.google.com"だけどXMPPアドレスは"romeo@gmail.com"」、という場合に対応できます。
Function: xmpp-disconnect conn
切断します。
Function: call-with-xmpp-connection host proc &keyword port jid-domain-part
高水準の便利関数で、サーバーに接続し、与えられた手続きを呼び、切断します。
hostへの接続が成功したら、procが引数を1つ、<xmpp-connection>のインスタンスをとって、呼ばれます。
procから返ったときに切断され、procの返り値がcall-with-xmpp-connectionから返されます。
例外がなげられたら、その例外がcall-with-xmpp-connectionから外へでる前に切断されます。
キーワード引数はxmpp-connectionと同じです。
Function: xmpp-receive-stanza conn
stanzaを受信しSXMLで返します。受信するまで処理がブロックします。
Macro: xmpp-iq (conn &keyword id to type) body
Info/Query stanza <iq ...>...</iq> を送ります。
id IQの id属性の文字列。
to IQの to属性の文字列。宛先です。
type IQのtype属性の文字列。デフォルトは"get"です。
body IQの内容のSXML。
例えばxmpp-bindは以下です。
(xmpp-iq (conn :id "bind_2" :type "set")
`(bind (|@| (xmlns "urn:ietf:params:xml:ns:xmpp-bind"))
(resource ,resource)))
Macro: xmpp-iq-query (conn &keyword id to type xmlns node) body
IQ stanza <iq ...><query ...></query></iq> をxmpp-iqより簡単に送れます。
id to type は xmpp-iqと同じです。
xmlnsはqueryのxmlns属性の文字列。
nodeはqueryの node属性の文字列。
例えばxmpp-roster-addは以下です。
(xmpp-iq-query (conn :id "roster_2" :type "set" :xmlns "jabber:iq:roster")
`((item
(|@| (jid ,jid) (name ,name))
(group ,group))))
Function: xmpp-discover conn &keyword to type node
Service Discovery IQを送ります。
to type node はxmpp-iq-queryと同じです。
Function: xmpp-registration-requirements conn
アカウント登録に何が必要かを問うIQを送ります。
Function: xmpp-register conn username password name email
アカウント登録するIQを送ります。
username 登録するユーザ名の文字列
password 登録するパスワードの文字列
name 登録する本名の文字列
email 登録するEメールアドレスの文字列
Function: xmpp-cancel-registration conn
アカウント登録を削除するIQを送ります。
Function: xmpp-change-password new-password
アカウントのパスワードを変更するIQを送ります。
new-password 新しいパスワードの文字列
Function: xmpp-auth-select-mechanism conn mechanism
認証方法を選択するIQを送ります。
Function: xmpp-auth-requirements conn username
認証要求するIQを送ります。
Function: xmpp-bind conn resource
リソースバインドIQを送ります。
resource リソースの名前の文字列。"Home"や"Office"など。
Function: xmpp-session conn
セッションセットIQを送ります。
Function: xmpp-presence conn &keyword to type status show priority
プリセンス <precense .../>を送ります。
to presenceの to属性の文字列。宛先です。
type presenceの type属性の文字列。
status presenceの status属性の文字列。状態です。
show presenceの show属性の文字列。
priority presenceのpriority属性の文字列。
Macro: xmpp-message (conn &keyword id to type lang) body ...
メッセージ <message ...><body>...</body>...</message>を送ります。
id messageの id属性の文字列。
to messageの to属性の文字列。宛先です。
type messageの type属性の文字列。デフォルトは"chat"です。
lang messageのxml:lang属性の文字列。
Function: xmpp-request-subscription conn to
相手に友人登録をリクエストするプリセンスを送ります。
to 相手の宛先。
Function: xmpp-approve-subscription conn to
相手を友人登録するプリセンスを送ります。
to 相手の宛先。
Function: xmpp-unsubscribe conn to
相手を友人登録解除するプリセンスを送ります。
to 相手の宛先。
Function: xmpp-cancel-subscription conn to
相手からの友人登録のリクエストを拒否するプリセンスを送ります。
to 相手の宛先。
Function: xmpp-get-roster conn
自分のRoster(友人リスト)を取得するIQを送ります。
Function: xmpp-roster-add conn jid name group
誰かを自分のRosterに追加するIQを送ります。
jid その人のXMPPアドレス
name その人につける名前
group その人を加えるグループ
Function: xmpp-roster-remove conn jid
誰かを自分のRosterから削除するIQを送ります。
jid その人のXMPPアドレス
Function: xmpp-get-privacy-lists conn
自分のプライバシーリスト全てを取得するIQを送ります。
Function: xmpp-get-privacy-list conn name
自分のnameというプライバシーリストを取得するIQを送ります。
name プライバシーリストの名前
Function: xmpp-auth conn username password
サーバが提示する認証方法から適当なものを自動的に選択して認証します。
digest-md5認証を最優先し、次にplain認証、anonymous認証を選びます。
username ユーザ名です。
password パスワードです。
Function: xmpp-sasl-digest-md5 conn username password
digest-md5認証します。
Function: xmpp-sasl-plain conn username password
plain認証します。
Function: xmpp-sasl-anonymous conn
anonymous認証します。
xmpp-message が関数じゃなくて、マクロなのはなんで?
関数だとキーワード引数が後ろに来てしまうのを嫌ったからです。
(xmpp-message conn "hello, world" :to "juliet" :type "chat")
よりも
(xmpp-message (conn :to "juliet" :type "chat") "hello world")
のほうがいいでしょ?
xmpp-message が本文の後に更に引数を取れるのはなんで?
XEP-0071:XHTML-IMに対応するためです。こう使います。
(xmpp-message (conn :to "juliet" :type "chat") "太字だよ" '(html (@ (xmlns "http://jabber.org/protocol/xhtml-im")) (body (@ (xmlns "http://www.w3.org/1999/xhtml")) (p (@ (style "font-weight:bold")) "太字だよ"))))