mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-24 16:23:40 +01:00
Merge branch 'master' of github.com:processone/ejabberd
This commit is contained in:
commit
3c2cd91fb1
17
.github/ISSUE_TEMPLATE
vendored
17
.github/ISSUE_TEMPLATE
vendored
@ -1,16 +1,15 @@
|
||||
Please answer these questions before submitting your issue. It may help !
|
||||
|
||||
Thanks!
|
||||
|
||||
1. What version of ejabberd are you using ?
|
||||
> What version of ejabberd are you using?
|
||||
|
||||
|
||||
2. What operating system are you using ?
|
||||
|
||||
> What operating system (version) are you using?
|
||||
|
||||
|
||||
3. How did you install ejabberd (source, package, distribution) ?
|
||||
|
||||
> How did you install ejabberd (source, package, distribution)?
|
||||
|
||||
|
||||
4. What did not work as expected ? What that error in the log ?
|
||||
What that unexpected behaviour ? What was the expected result ?
|
||||
|
||||
> What did not work as expected? Are there error messages in the log? What
|
||||
> was the unexpected behavior? What was the expected result?
|
||||
|
||||
|
31
.github/PULL_REQUEST_TEMPLATE
vendored
31
.github/PULL_REQUEST_TEMPLATE
vendored
@ -1,23 +1,20 @@
|
||||
We are open to contribution for ejabberd, as Github pull requests (PR).
|
||||
Here is a few points to consider before submitting your pull request.
|
||||
(You can remove the whole text after reading).
|
||||
We are open to contributions for ejabberd, as GitHub pull requests (PR).
|
||||
Here are a few points to consider before submitting your PR. (You can
|
||||
remove the whole text after reading.)
|
||||
|
||||
1. Does this PR address an issue ?
|
||||
Please reference it in PR description.
|
||||
1. Does this PR address an issue? Please reference it in the PR
|
||||
description.
|
||||
|
||||
2. Have you properly described the proposed changed ?
|
||||
2. Have you properly described the proposed change?
|
||||
|
||||
3. Please, make sure the change is atomic and does only touch the
|
||||
needed modules.
|
||||
If you have other changes / fixes to provide, please make them as
|
||||
separate PR.
|
||||
3. Please make sure the change is atomic and does only touch the needed
|
||||
modules. If you have other changes/fixes to provide, please submit
|
||||
them as separate PRs.
|
||||
|
||||
4. If you change or new feature involves backends,
|
||||
did you make sure you change is compliant with all backends or
|
||||
provide the feature for all backends ?
|
||||
4. If your change or new feature involves storage backends, did you make
|
||||
sure your change works with all backends?
|
||||
|
||||
5. Do you provides tests ?
|
||||
How can we check the behaviour of the code ?
|
||||
5. Do you provide tests? How can we check the behavior of the code?
|
||||
|
||||
6. Did you consider documentation changes on project
|
||||
processone/docs.ejabberd.im ?
|
||||
6. Did you consider documentation changes in the
|
||||
processone/docs.ejabberd.im repository?
|
||||
|
@ -44,7 +44,9 @@ script:
|
||||
- make
|
||||
- make install
|
||||
- make xref
|
||||
- make test
|
||||
- sed -i -e 's/ct:pal/ct:log/' test/suite.erl
|
||||
- ln -sf ../sql priv/
|
||||
- escript ./rebar skip_deps=true ct -v
|
||||
- grep -q 'TEST COMPLETE, \([[:digit:]]*\) ok, .* of \1 ' logs/raw.log
|
||||
|
||||
after_script:
|
||||
|
248
priv/msgs/gl.po
248
priv/msgs/gl.po
@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 2.1.0-alpha\n"
|
||||
"Last-Translator: Carlos E. Lopez - suso AT jabber-hispano.org\n"
|
||||
"Project-Id-Version: 16.02\n"
|
||||
"Last-Translator: Carlos E. Lopez - carlos AT suchat.org\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@ -9,7 +9,7 @@ msgstr ""
|
||||
|
||||
#: ejabberd_c2s.erl:505 ejabberd_c2s.erl:853
|
||||
msgid "Use of STARTTLS required"
|
||||
msgstr "É obrigatorio usar STARTTLS"
|
||||
msgstr "Requírese o uso de STARTTLS"
|
||||
|
||||
#: ejabberd_c2s.erl:604
|
||||
msgid "No resource provided"
|
||||
@ -26,11 +26,11 @@ msgstr "foi expulsado"
|
||||
|
||||
#: ejabberd_c2s.erl:2114
|
||||
msgid "Your active privacy list has denied the routing of this stanza."
|
||||
msgstr ""
|
||||
msgstr "A súa lista de privacidade activa negou o encaminamiento desta estrofa."
|
||||
|
||||
#: ejabberd_c2s.erl:2429
|
||||
msgid "Too many unacked stanzas"
|
||||
msgstr ""
|
||||
msgstr "Demasiadas mensaxes sen recoñecer recibilos"
|
||||
|
||||
#: ejabberd_captcha.erl:122 ejabberd_captcha.erl:245 ejabberd_captcha.erl:284
|
||||
msgid "Enter the text you see"
|
||||
@ -43,11 +43,11 @@ msgstr ""
|
||||
|
||||
#: ejabberd_captcha.erl:192
|
||||
msgid "If you don't see the CAPTCHA image here, visit the web page."
|
||||
msgstr ""
|
||||
msgstr "Si non ves a imaxe CAPTCHA aquí, visita a páxina web."
|
||||
|
||||
#: ejabberd_captcha.erl:227
|
||||
msgid "CAPTCHA web page"
|
||||
msgstr ""
|
||||
msgstr "CAPTCHA páxina Web"
|
||||
|
||||
#: ejabberd_captcha.erl:381
|
||||
msgid "The CAPTCHA is valid."
|
||||
@ -59,9 +59,8 @@ msgid "User"
|
||||
msgstr "Usuario"
|
||||
|
||||
#: ejabberd_oauth.erl:256
|
||||
#, fuzzy
|
||||
msgid "Server"
|
||||
msgstr "Servidor ~b"
|
||||
msgstr "Servidor"
|
||||
|
||||
#: ejabberd_oauth.erl:259 ejabberd_web_admin.erl:1408 mod_configure.erl:1398
|
||||
#: mod_configure.erl:1485 mod_configure.erl:1889 mod_configure.erl:2123
|
||||
@ -71,7 +70,7 @@ msgstr "Contrasinal"
|
||||
|
||||
#: ejabberd_oauth.erl:267
|
||||
msgid "Accept"
|
||||
msgstr ""
|
||||
msgstr "Aceptar"
|
||||
|
||||
#: ejabberd_web_admin.erl:202 ejabberd_web_admin.erl:214
|
||||
#: ejabberd_web_admin.erl:234 ejabberd_web_admin.erl:246
|
||||
@ -238,7 +237,6 @@ msgid "Outgoing s2s Connections:"
|
||||
msgstr "Conexións S2S saíntes:"
|
||||
|
||||
#: ejabberd_web_admin.erl:1559
|
||||
#, fuzzy
|
||||
msgid "Incoming s2s Connections:"
|
||||
msgstr "Conexións S2S saíntes:"
|
||||
|
||||
@ -253,9 +251,8 @@ msgid "Change Password"
|
||||
msgstr "Cambiar contrasinal"
|
||||
|
||||
#: ejabberd_web_admin.erl:1673
|
||||
#, fuzzy
|
||||
msgid "User ~s"
|
||||
msgstr "Usuario "
|
||||
msgstr "Usuario ~s"
|
||||
|
||||
#: ejabberd_web_admin.erl:1684
|
||||
msgid "Connected Resources:"
|
||||
@ -287,9 +284,8 @@ msgid "Stopped Nodes"
|
||||
msgstr "Nodos detidos"
|
||||
|
||||
#: ejabberd_web_admin.erl:1833 ejabberd_web_admin.erl:1858
|
||||
#, fuzzy
|
||||
msgid "Node ~p"
|
||||
msgstr "Nodo "
|
||||
msgstr "Nodo ~p"
|
||||
|
||||
#: ejabberd_web_admin.erl:1842 mod_configure.erl:150 mod_configure.erl:611
|
||||
msgid "Database"
|
||||
@ -297,7 +293,7 @@ msgstr "Base de datos"
|
||||
|
||||
#: ejabberd_web_admin.erl:1843 mod_configure.erl:159 mod_configure.erl:648
|
||||
msgid "Backup"
|
||||
msgstr "Gardar copia de seguridade"
|
||||
msgstr "Copia de seguridade"
|
||||
|
||||
#: ejabberd_web_admin.erl:1845
|
||||
msgid "Listened Ports"
|
||||
@ -326,9 +322,8 @@ msgid "RPC Call Error"
|
||||
msgstr "Erro na chamada RPC"
|
||||
|
||||
#: ejabberd_web_admin.erl:1917
|
||||
#, fuzzy
|
||||
msgid "Database Tables at ~p"
|
||||
msgstr "Táboas da base de datos en "
|
||||
msgstr "Táboas da base de datos en ~p"
|
||||
|
||||
#: ejabberd_web_admin.erl:1927 mod_vcard.erl:490 mod_vcard.erl:616
|
||||
msgid "Name"
|
||||
@ -336,7 +331,7 @@ msgstr "Nome"
|
||||
|
||||
#: ejabberd_web_admin.erl:1928
|
||||
msgid "Storage Type"
|
||||
msgstr "Tipo de almacenamiento"
|
||||
msgstr "Tipo de almacenamento"
|
||||
|
||||
#: ejabberd_web_admin.erl:1929
|
||||
msgid "Elements"
|
||||
@ -351,9 +346,8 @@ msgid "Error"
|
||||
msgstr "Erro"
|
||||
|
||||
#: ejabberd_web_admin.erl:1955
|
||||
#, fuzzy
|
||||
msgid "Backup of ~p"
|
||||
msgstr "Copia de seguridade de "
|
||||
msgstr "Copia de seguridade de ~p"
|
||||
|
||||
#: ejabberd_web_admin.erl:1959
|
||||
msgid ""
|
||||
@ -387,7 +381,7 @@ msgid ""
|
||||
"Restore binary backup after next ejabberd restart (requires less memory):"
|
||||
msgstr ""
|
||||
"Restaurar copia de seguridade binaria no seguinte reinicio de ejabberd "
|
||||
"(require menos memoria que se instantánea):"
|
||||
"(require menos memoria):"
|
||||
|
||||
#: ejabberd_web_admin.erl:1999
|
||||
msgid "Store plain text backup:"
|
||||
@ -399,7 +393,7 @@ msgstr "Restaurar copias de seguridade de texto plano inmediatamente:"
|
||||
|
||||
#: ejabberd_web_admin.erl:2019
|
||||
msgid "Import users data from a PIEFXIS file (XEP-0227):"
|
||||
msgstr "Importar usuarios desde un fichero PIEFXIS"
|
||||
msgstr "Importar usuarios en un fichero PIEFXIS (XEP-0227):"
|
||||
|
||||
#: ejabberd_web_admin.erl:2032
|
||||
msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):"
|
||||
@ -409,17 +403,15 @@ msgstr ""
|
||||
|
||||
#: ejabberd_web_admin.erl:2044
|
||||
msgid "Export data of users in a host to PIEFXIS files (XEP-0227):"
|
||||
msgstr ""
|
||||
"Exportar datos de todos os usuarios do servidor a ficheros PIEFXIS "
|
||||
"(XEP-0227):"
|
||||
msgstr "Exportar datos dos usuarios dun dominio a ficheiros PIEFXIS (XEP-0227):"
|
||||
|
||||
#: ejabberd_web_admin.erl:2060
|
||||
msgid "Export all tables as SQL queries to a file:"
|
||||
msgstr ""
|
||||
msgstr "Exportar todas as táboas a un ficheiro SQL:"
|
||||
|
||||
#: ejabberd_web_admin.erl:2076
|
||||
msgid "Import user data from jabberd14 spool file:"
|
||||
msgstr "Importar usuario de fichero spool de jabberd14:"
|
||||
msgstr "Importar usuario de ficheiro spool de jabberd14:"
|
||||
|
||||
#: ejabberd_web_admin.erl:2087
|
||||
msgid "Import users data from jabberd14 spool directory:"
|
||||
@ -430,9 +422,8 @@ msgid "Listened Ports at "
|
||||
msgstr "Portos de escoita en "
|
||||
|
||||
#: ejabberd_web_admin.erl:2144
|
||||
#, fuzzy
|
||||
msgid "Modules at ~p"
|
||||
msgstr "Módulos en "
|
||||
msgstr "Módulos en ~p"
|
||||
|
||||
#: ejabberd_web_admin.erl:2175
|
||||
msgid "Statistics of ~p"
|
||||
@ -463,9 +454,8 @@ msgid "Transactions Logged:"
|
||||
msgstr "Transaccións rexistradas:"
|
||||
|
||||
#: ejabberd_web_admin.erl:2243
|
||||
#, fuzzy
|
||||
msgid "Update ~p"
|
||||
msgstr "Actualizar"
|
||||
msgstr "Actualizar ~p"
|
||||
|
||||
#: ejabberd_web_admin.erl:2254
|
||||
msgid "Update plan"
|
||||
@ -525,7 +515,7 @@ msgstr "Pong"
|
||||
|
||||
#: mod_announce.erl:523
|
||||
msgid "Really delete message of the day?"
|
||||
msgstr "Está seguro de quere borrar a mensaxe do dia?"
|
||||
msgstr "¿Está seguro que quere borrar a mensaxe do dia?"
|
||||
|
||||
#: mod_announce.erl:536 mod_configure.erl:1238 mod_configure.erl:1298
|
||||
msgid "Subject"
|
||||
@ -553,7 +543,7 @@ msgstr "Enviar anuncio a todos os usuarios en todos os dominios"
|
||||
|
||||
#: mod_announce.erl:668
|
||||
msgid "Send announcement to all online users"
|
||||
msgstr "Enviar anuncio a todos los usuarios conectados"
|
||||
msgstr "Enviar anuncio a todos os usuarios conectados"
|
||||
|
||||
#: mod_announce.erl:670 mod_configure.erl:1231 mod_configure.erl:1291
|
||||
msgid "Send announcement to all online users on all hosts"
|
||||
@ -595,7 +585,7 @@ msgstr "Iniciar módulos"
|
||||
|
||||
#: mod_configure.erl:156 mod_configure.erl:638
|
||||
msgid "Stop Modules"
|
||||
msgstr "Detener módulos"
|
||||
msgstr "Deter módulos"
|
||||
|
||||
#: mod_configure.erl:162 mod_configure.erl:650
|
||||
msgid "Restore"
|
||||
@ -844,18 +834,20 @@ msgid ""
|
||||
"Too many (~p) failed authentications from this IP address (~s). The address "
|
||||
"will be unblocked at ~s UTC"
|
||||
msgstr ""
|
||||
"Demasiados (~p) fallou autenticaciones desde esta dirección IP (~s). A dirección "
|
||||
"será desbloqueada as ~s UTC"
|
||||
|
||||
#: mod_http_upload.erl:586
|
||||
msgid "Please specify file size."
|
||||
msgstr ""
|
||||
msgstr "Por favor, especifica o tamaño do arquivo"
|
||||
|
||||
#: mod_http_upload.erl:590
|
||||
msgid "Please specify file name."
|
||||
msgstr ""
|
||||
msgstr "Por favor, indique o nome do arquivo."
|
||||
|
||||
#: mod_ip_blacklist.erl:121
|
||||
msgid "This IP address is blacklisted in ~s"
|
||||
msgstr ""
|
||||
msgstr "Esta dirección IP está na lista negra en ~s"
|
||||
|
||||
#: mod_irc.erl:220 mod_muc.erl:467
|
||||
msgid "Access denied by service policy"
|
||||
@ -884,8 +876,8 @@ msgid ""
|
||||
"Enter username, encodings, ports and passwords you wish to use for "
|
||||
"connecting to IRC servers"
|
||||
msgstr ""
|
||||
"Introduza o nome de usuario, codificaciones de carácter, portos e "
|
||||
"contrasinal que pretende utilizar a conectar a servidores de IRC"
|
||||
"Introduce o nome de usuario, codificaciones de carácteres, portos e "
|
||||
"contrasinai que queiras usar ao conectar nos servidores de IRC"
|
||||
|
||||
#: mod_irc.erl:667
|
||||
msgid "IRC Username"
|
||||
@ -970,9 +962,8 @@ msgid "Server ~b"
|
||||
msgstr "Servidor ~b"
|
||||
|
||||
#: mod_mam.erl:541
|
||||
#, fuzzy
|
||||
msgid "Only members may query archives of this room"
|
||||
msgstr "Só os moderadores están autorizados a cambiar o tema nesta sala"
|
||||
msgstr "Só membros poden consultar o arquivo de mensaxes da sala"
|
||||
|
||||
#: mod_muc.erl:585
|
||||
msgid "Only service administrators are allowed to send service messages"
|
||||
@ -994,10 +985,9 @@ msgstr "Salas de charla"
|
||||
|
||||
#: mod_muc.erl:781
|
||||
msgid "Empty Rooms"
|
||||
msgstr ""
|
||||
msgstr "Salas baleiras"
|
||||
|
||||
#: mod_muc.erl:933
|
||||
#, fuzzy
|
||||
msgid "You need a client that supports x:data to register the nickname"
|
||||
msgstr ""
|
||||
"Necesitas un cliente con soporte de x:data para poder rexistrar o alcume"
|
||||
@ -1030,34 +1020,31 @@ msgstr "Módulo de MUC para ejabberd"
|
||||
#: mod_muc_admin.erl:231 mod_muc_admin.erl:234 mod_muc_admin.erl:246
|
||||
#: mod_muc_admin.erl:320
|
||||
msgid "Multi-User Chat"
|
||||
msgstr ""
|
||||
msgstr "Salas de Charla"
|
||||
|
||||
#: mod_muc_admin.erl:249
|
||||
#, fuzzy
|
||||
msgid "Total rooms"
|
||||
msgstr "Salas de charla"
|
||||
msgstr "Salas totais"
|
||||
|
||||
#: mod_muc_admin.erl:250
|
||||
#, fuzzy
|
||||
msgid "Permanent rooms"
|
||||
msgstr "sae da sala"
|
||||
msgstr "Salas permanentes"
|
||||
|
||||
#: mod_muc_admin.erl:251
|
||||
#, fuzzy
|
||||
msgid "Registered nicknames"
|
||||
msgstr "Usuarios rexistrados"
|
||||
msgstr "Alcumes rexistrados"
|
||||
|
||||
#: mod_muc_admin.erl:254
|
||||
msgid "List of rooms"
|
||||
msgstr ""
|
||||
msgstr "Lista de salas"
|
||||
|
||||
#: mod_muc_log.erl:398 mod_muc_log.erl:407
|
||||
msgid "Chatroom configuration modified"
|
||||
msgstr "Configuración de la sala modificada"
|
||||
msgstr "Configuración da sala modificada"
|
||||
|
||||
#: mod_muc_log.erl:410
|
||||
msgid "joins the room"
|
||||
msgstr "entra en la sala"
|
||||
msgstr "entra na sala"
|
||||
|
||||
#: mod_muc_log.erl:413 mod_muc_log.erl:416
|
||||
msgid "leaves the room"
|
||||
@ -1077,7 +1064,7 @@ msgstr "foi expulsado, porque a sala cambiouse a só-membros"
|
||||
|
||||
#: mod_muc_log.erl:445
|
||||
msgid "has been kicked because of a system shutdown"
|
||||
msgstr "foi expulsado por mor dun sistema de peche"
|
||||
msgstr "foi expulsado porque o sistema vaise a deter"
|
||||
|
||||
#: mod_muc_log.erl:450
|
||||
msgid "is now known as"
|
||||
@ -1088,24 +1075,20 @@ msgid " has set the subject to: "
|
||||
msgstr " puxo o asunto: "
|
||||
|
||||
#: mod_muc_log.erl:493
|
||||
#, fuzzy
|
||||
msgid "Chatroom is created"
|
||||
msgstr "Salas de charla"
|
||||
msgstr "Creouse a sala"
|
||||
|
||||
#: mod_muc_log.erl:495
|
||||
#, fuzzy
|
||||
msgid "Chatroom is destroyed"
|
||||
msgstr "Salas de charla"
|
||||
msgstr "Destruíuse a sala"
|
||||
|
||||
#: mod_muc_log.erl:497
|
||||
#, fuzzy
|
||||
msgid "Chatroom is started"
|
||||
msgstr "Salas de charla"
|
||||
msgstr "Iniciouse a sala"
|
||||
|
||||
#: mod_muc_log.erl:499
|
||||
#, fuzzy
|
||||
msgid "Chatroom is stopped"
|
||||
msgstr "Salas de charla"
|
||||
msgstr "Detívose a sala"
|
||||
|
||||
#: mod_muc_log.erl:503
|
||||
msgid "Monday"
|
||||
@ -1200,6 +1183,8 @@ msgid ""
|
||||
"It is not allowed to send error messages to the room. The participant (~s) "
|
||||
"has sent an error message (~s) and got kicked from the room"
|
||||
msgstr ""
|
||||
"Non está permitido enviar mensaxes de erro á sala. Este participante (~s) "
|
||||
"enviou unha mensaxe de erro (~s) e foi expulsado da sala"
|
||||
|
||||
#: mod_muc_room.erl:241
|
||||
msgid "It is not allowed to send private messages to the conference"
|
||||
@ -1207,20 +1192,19 @@ msgstr "Impedir o envio de mensaxes privadas á sala"
|
||||
|
||||
#: mod_muc_room.erl:316
|
||||
msgid "Please, wait for a while before sending new voice request"
|
||||
msgstr ""
|
||||
msgstr "Por favor, espera un pouco antes de enviar outra petición de voz"
|
||||
|
||||
#: mod_muc_room.erl:329
|
||||
msgid "Voice requests are disabled in this conference"
|
||||
msgstr ""
|
||||
msgstr "As peticións de voz están desactivadas nesta sala"
|
||||
|
||||
#: mod_muc_room.erl:347
|
||||
msgid "Failed to extract JID from your voice request approval"
|
||||
msgstr ""
|
||||
msgstr "Fallo ao extraer o Jabber ID da túa aprobación de petición de voz"
|
||||
|
||||
#: mod_muc_room.erl:377
|
||||
#, fuzzy
|
||||
msgid "Only moderators can approve voice requests"
|
||||
msgstr "Permitir aos usuarios enviar invitacións"
|
||||
msgstr "Só os moderadores poden aprobar peticións de voz"
|
||||
|
||||
#: mod_muc_room.erl:389
|
||||
msgid "Improper message type"
|
||||
@ -1269,11 +1253,11 @@ msgstr "Os visitantes non poden enviar mensaxes a todos os ocupantes"
|
||||
#: mod_muc_room.erl:1080
|
||||
msgid "Visitors are not allowed to change their nicknames in this room"
|
||||
msgstr ""
|
||||
"Os visitantes non están autorizados a cambiar os seus That alcumes nesta sala"
|
||||
"Os visitantes non teñen permitido cambiar os seus alcumes nesta sala"
|
||||
|
||||
#: mod_muc_room.erl:1093 mod_muc_room.erl:1835
|
||||
msgid "That nickname is already in use by another occupant"
|
||||
msgstr "Ese alcume que xa está en uso por outro ocupante"
|
||||
msgstr "Ese alcume xa está a ser usado por outro ocupante"
|
||||
|
||||
#: mod_muc_room.erl:1822
|
||||
msgid "You have been banned from this room"
|
||||
@ -1289,12 +1273,11 @@ msgstr "Necesítase contrasinal para entrar nesta sala"
|
||||
|
||||
#: mod_muc_room.erl:1898 mod_register.erl:295
|
||||
msgid "Too many CAPTCHA requests"
|
||||
msgstr ""
|
||||
msgstr "Demasiadas peticións de CAPTCHA"
|
||||
|
||||
#: mod_muc_room.erl:1908 mod_register.erl:301
|
||||
#, fuzzy
|
||||
msgid "Unable to generate a CAPTCHA"
|
||||
msgstr "Non se pode xerar un CAPTCHA"
|
||||
msgstr "No se pudo generar un CAPTCHA"
|
||||
|
||||
#: mod_muc_room.erl:1919
|
||||
msgid "Incorrect password"
|
||||
@ -1378,20 +1361,19 @@ msgstr "calquera"
|
||||
|
||||
#: mod_muc_room.erl:3471
|
||||
msgid "Roles for which Presence is Broadcasted"
|
||||
msgstr ""
|
||||
msgstr "Roles para os que si se difunde a súa Presenza"
|
||||
|
||||
#: mod_muc_room.erl:3486
|
||||
#, fuzzy
|
||||
msgid "Moderator"
|
||||
msgstr "só moderadores"
|
||||
msgstr "Moderator"
|
||||
|
||||
#: mod_muc_room.erl:3496
|
||||
msgid "Participant"
|
||||
msgstr ""
|
||||
msgstr "Participante"
|
||||
|
||||
#: mod_muc_room.erl:3506
|
||||
msgid "Visitor"
|
||||
msgstr ""
|
||||
msgstr "Visitante"
|
||||
|
||||
#: mod_muc_room.erl:3513
|
||||
msgid "Make room members-only"
|
||||
@ -1414,13 +1396,12 @@ msgid "Allow users to send private messages"
|
||||
msgstr "Permitir aos usuarios enviar mensaxes privadas"
|
||||
|
||||
#: mod_muc_room.erl:3533
|
||||
#, fuzzy
|
||||
msgid "Allow visitors to send private messages to"
|
||||
msgstr "Permitir aos usuarios enviar mensaxes privadas"
|
||||
msgstr "Permitir aos visitantes enviar mensaxes privadas a"
|
||||
|
||||
#: mod_muc_room.erl:3551
|
||||
msgid "nobody"
|
||||
msgstr ""
|
||||
msgstr "ninguén"
|
||||
|
||||
#: mod_muc_room.erl:3576
|
||||
msgid "Allow users to query other users"
|
||||
@ -1440,13 +1421,12 @@ msgid "Allow visitors to change nickname"
|
||||
msgstr "Permitir aos visitantes cambiarse o alcume"
|
||||
|
||||
#: mod_muc_room.erl:3589
|
||||
#, fuzzy
|
||||
msgid "Allow visitors to send voice requests"
|
||||
msgstr "Permitir aos usuarios enviar invitacións"
|
||||
msgstr "Permitir aos visitantes enviar peticións de voz"
|
||||
|
||||
#: mod_muc_room.erl:3592
|
||||
msgid "Minimum interval between voice requests (in seconds)"
|
||||
msgstr ""
|
||||
msgstr "Intervalo mínimo entre peticións de voz (en segundos)"
|
||||
|
||||
#: mod_muc_room.erl:3599
|
||||
msgid "Make room CAPTCHA protected"
|
||||
@ -1454,11 +1434,11 @@ msgstr "Protexer a sala con CAPTCHA"
|
||||
|
||||
#: mod_muc_room.erl:3606
|
||||
msgid "Enable message archiving"
|
||||
msgstr ""
|
||||
msgstr "Activar o almacenamento de mensaxes"
|
||||
|
||||
#: mod_muc_room.erl:3612
|
||||
msgid "Exclude Jabber IDs from CAPTCHA challenge"
|
||||
msgstr ""
|
||||
msgstr "Excluír Jabber IDs das probas de CAPTCHA"
|
||||
|
||||
#: mod_muc_room.erl:3621
|
||||
msgid "Enable logging"
|
||||
@ -1478,20 +1458,19 @@ msgstr "privado"
|
||||
|
||||
#: mod_muc_room.erl:4326
|
||||
msgid "Voice request"
|
||||
msgstr ""
|
||||
msgstr "Petición de voz"
|
||||
|
||||
#: mod_muc_room.erl:4331
|
||||
msgid "Either approve or decline the voice request."
|
||||
msgstr ""
|
||||
msgstr "Aproba ou rexeita a petición de voz."
|
||||
|
||||
#: mod_muc_room.erl:4351
|
||||
#, fuzzy
|
||||
msgid "User JID"
|
||||
msgstr "Usuario "
|
||||
msgstr "Jabber ID do usuario"
|
||||
|
||||
#: mod_muc_room.erl:4355
|
||||
msgid "Grant voice to this person?"
|
||||
msgstr ""
|
||||
msgstr "¿Conceder voz a esta persoa?"
|
||||
|
||||
#: mod_muc_room.erl:4498
|
||||
msgid "~s invites you to the room ~s"
|
||||
@ -1503,11 +1482,11 @@ msgstr "a contrasinal é"
|
||||
|
||||
#: mod_multicast.erl:291
|
||||
msgid "Multicast"
|
||||
msgstr ""
|
||||
msgstr "Multicast"
|
||||
|
||||
#: mod_multicast.erl:306
|
||||
msgid "ejabberd Multicast service"
|
||||
msgstr ""
|
||||
msgstr "Servizo Multicast de ejabberd"
|
||||
|
||||
#: mod_offline.erl:647
|
||||
msgid ""
|
||||
@ -1546,7 +1525,7 @@ msgstr "Borrar Todas as Mensaxes Sen conexión"
|
||||
|
||||
#: mod_proxy65_service.erl:248
|
||||
msgid "ejabberd SOCKS5 Bytestreams module"
|
||||
msgstr "ejabberd SOCKS5 Bytestreams module"
|
||||
msgstr "Módulo SOCKS5 Bytestreams para ejabberd"
|
||||
|
||||
#: mod_pubsub.erl:1102
|
||||
msgid "Publish-Subscribe"
|
||||
@ -1566,7 +1545,7 @@ msgstr "Decidir se aprobar a subscripción desta entidade."
|
||||
|
||||
#: mod_pubsub.erl:1559
|
||||
msgid "Node ID"
|
||||
msgstr "Nodo IDE"
|
||||
msgstr "Nodo ID"
|
||||
|
||||
#: mod_pubsub.erl:1571
|
||||
msgid "Subscriber Address"
|
||||
@ -1602,7 +1581,7 @@ msgstr "Persistir elementos ao almacenar"
|
||||
|
||||
#: mod_pubsub.erl:3757
|
||||
msgid "A friendly name for the node"
|
||||
msgstr "Un nome para o nodo"
|
||||
msgstr "Un nome sinxelo para o nodo"
|
||||
|
||||
#: mod_pubsub.erl:3759
|
||||
msgid "Max # of items to persist"
|
||||
@ -1626,12 +1605,11 @@ msgstr "Especificar o modelo do publicante"
|
||||
|
||||
#: mod_pubsub.erl:3769
|
||||
msgid "Purge all items when the relevant publisher goes offline"
|
||||
msgstr ""
|
||||
msgstr "Purgar todos os elementos cando o editor correspondente desconéctase"
|
||||
|
||||
#: mod_pubsub.erl:3771
|
||||
#, fuzzy
|
||||
msgid "Specify the event message type"
|
||||
msgstr "Especifica o modelo de acceso"
|
||||
msgstr "Especifica o tipo da mensaxe de evento"
|
||||
|
||||
#: mod_pubsub.erl:3773
|
||||
msgid "Max payload size in bytes"
|
||||
@ -1650,15 +1628,13 @@ msgid "The collections with which a node is affiliated"
|
||||
msgstr "As coleccións coas que un nodo está afiliado"
|
||||
|
||||
#: mod_register.erl:209
|
||||
#, fuzzy
|
||||
msgid "The CAPTCHA verification has failed"
|
||||
msgstr "O CAPTCHA é válido."
|
||||
msgstr "A verificación de CAPTCHA fallou"
|
||||
|
||||
#: mod_register.erl:253
|
||||
#, fuzzy
|
||||
msgid "You need a client that supports x:data and CAPTCHA to register"
|
||||
msgstr ""
|
||||
"Necesitas un cliente con soporte de x:data para poder rexistrar o alcume"
|
||||
"Necesitas un cliente con soporte de x:data e CAPTCHA para rexistrarche"
|
||||
|
||||
#: mod_register.erl:259 mod_register.erl:320
|
||||
msgid "Choose a username and password to register with this server"
|
||||
@ -1666,9 +1642,8 @@ msgstr ""
|
||||
"Escolle un nome de usuario e contrasinal para rexistrarche neste servidor"
|
||||
|
||||
#: mod_register.erl:373 mod_register.erl:421
|
||||
#, fuzzy
|
||||
msgid "The password is too weak"
|
||||
msgstr "a contrasinal é"
|
||||
msgstr "O contrasinal é demasiado débil"
|
||||
|
||||
#: mod_register.erl:426
|
||||
msgid "Users are not allowed to register accounts so quickly"
|
||||
@ -1676,39 +1651,39 @@ msgstr "Os usuarios non están autorizados a rexistrar contas con tanta rapidez"
|
||||
|
||||
#: mod_register_web.erl:105
|
||||
msgid "Your Jabber account was successfully created."
|
||||
msgstr ""
|
||||
msgstr "A súa conta Jabber creouse correctamente."
|
||||
|
||||
#: mod_register_web.erl:110
|
||||
msgid "There was an error creating the account: "
|
||||
msgstr ""
|
||||
msgstr "Produciuse un erro ao crear a conta: "
|
||||
|
||||
#: mod_register_web.erl:119
|
||||
msgid "Your Jabber account was successfully deleted."
|
||||
msgstr ""
|
||||
msgstr "A súa conta Jabber eliminouse correctamente."
|
||||
|
||||
#: mod_register_web.erl:124
|
||||
msgid "There was an error deleting the account: "
|
||||
msgstr ""
|
||||
msgstr "Produciuse un erro ao eliminar a conta: "
|
||||
|
||||
#: mod_register_web.erl:135
|
||||
msgid "The password of your Jabber account was successfully changed."
|
||||
msgstr ""
|
||||
msgstr "O contrasinal da súa conta Jabber cambiouse correctamente."
|
||||
|
||||
#: mod_register_web.erl:140
|
||||
msgid "There was an error changing the password: "
|
||||
msgstr ""
|
||||
msgstr "Produciuse un erro ao cambiar o contrasinal: "
|
||||
|
||||
#: mod_register_web.erl:175 mod_register_web.erl:183
|
||||
msgid "Jabber Account Registration"
|
||||
msgstr ""
|
||||
msgstr "Rexistro de conta Jabber"
|
||||
|
||||
#: mod_register_web.erl:186 mod_register_web.erl:204 mod_register_web.erl:212
|
||||
msgid "Register a Jabber account"
|
||||
msgstr ""
|
||||
msgstr "Rexistrar unha conta Jabber"
|
||||
|
||||
#: mod_register_web.erl:191 mod_register_web.erl:453 mod_register_web.erl:461
|
||||
msgid "Unregister a Jabber account"
|
||||
msgstr ""
|
||||
msgstr "Eliminar o rexistro dunha conta Jabber"
|
||||
|
||||
#: mod_register_web.erl:214
|
||||
msgid ""
|
||||
@ -1716,40 +1691,45 @@ msgid ""
|
||||
"(Jabber IDentifier) will be of the form: username@server. Please read "
|
||||
"carefully the instructions to fill correctly the fields."
|
||||
msgstr ""
|
||||
"Esta páxina permite crear unha conta Jabber neste servidor Jabber. o seu JID "
|
||||
"(Jabber IDentificador) será da forma: nomeusuario@servidor. Por favor le "
|
||||
"coidadosamente as instrucións para encher correctamente os campos."
|
||||
|
||||
#: mod_register_web.erl:224 mod_register_web.erl:360 mod_register_web.erl:469
|
||||
#, fuzzy
|
||||
msgid "Username:"
|
||||
msgstr "Nome de usuario en IRC"
|
||||
msgstr "Nome de usuario:"
|
||||
|
||||
#: mod_register_web.erl:230
|
||||
msgid "This is case insensitive: macbeth is the same that MacBeth and Macbeth."
|
||||
msgstr ""
|
||||
msgstr "Esta é insensible: Macbeth é o mesmo que MacBeth e Macbeth."
|
||||
|
||||
#: mod_register_web.erl:233
|
||||
msgid "Characters not allowed:"
|
||||
msgstr ""
|
||||
msgstr "Caracteres non permitidos:"
|
||||
|
||||
#: mod_register_web.erl:236 mod_register_web.erl:364 mod_register_web.erl:473
|
||||
#, fuzzy
|
||||
msgid "Server:"
|
||||
msgstr "Servidor ~b"
|
||||
msgstr "Servidor:"
|
||||
|
||||
#: mod_register_web.erl:245
|
||||
msgid ""
|
||||
"Don't tell your password to anybody, not even the administrators of the "
|
||||
"Jabber server."
|
||||
"Jabber Server."
|
||||
msgstr ""
|
||||
"Non lle diga o seu contrasinal a ninguén, nin sequera os administradores do "
|
||||
"Servidor Jabber."
|
||||
|
||||
#: mod_register_web.erl:249
|
||||
msgid "You can later change your password using a Jabber client."
|
||||
msgstr ""
|
||||
msgstr "Máis tarde, pode cambiar o seu contrasinal utilizando un cliente Jabber."
|
||||
|
||||
#: mod_register_web.erl:252
|
||||
msgid ""
|
||||
"Some Jabber clients can store your password in the computer, but you should "
|
||||
"do this only in your personal computer for safety reasons."
|
||||
msgstr ""
|
||||
"Algúns clientes Jabber pode almacenar o contrasinal no computador, pero debe "
|
||||
"facer isto só no seu computador persoal por razóns de seguridade."
|
||||
|
||||
#: mod_register_web.erl:256
|
||||
msgid ""
|
||||
@ -1757,34 +1737,33 @@ msgid ""
|
||||
"Jabber there isn't an automated way to recover your password if you forget "
|
||||
"it."
|
||||
msgstr ""
|
||||
"Memorice o seu contrasinal ou escribilo nun papel colocado nun lugar seguro. En "
|
||||
"Jabber non hai unha forma automatizada para recuperar o seu contrasinal si "
|
||||
"a esquece"
|
||||
|
||||
#: mod_register_web.erl:262 mod_register_web.erl:374
|
||||
#, fuzzy
|
||||
msgid "Password Verification:"
|
||||
msgstr "Verificación da contrasinal"
|
||||
|
||||
#: mod_register_web.erl:269
|
||||
#, fuzzy
|
||||
msgid "Register"
|
||||
msgstr "Lista de contactos"
|
||||
msgstr "Rexistrar"
|
||||
|
||||
#: mod_register_web.erl:366
|
||||
#, fuzzy
|
||||
msgid "Old Password:"
|
||||
msgstr "Contrasinal:"
|
||||
msgstr "Contrasinal anterior:"
|
||||
|
||||
#: mod_register_web.erl:370
|
||||
#, fuzzy
|
||||
msgid "New Password:"
|
||||
msgstr "Contrasinal:"
|
||||
msgstr "Novo contrasinal:"
|
||||
|
||||
#: mod_register_web.erl:463
|
||||
msgid "This page allows to unregister a Jabber account in this Jabber server."
|
||||
msgstr ""
|
||||
msgstr "Esta páxina permite anular o rexistro dunha conta Jabber neste servidor Jabber."
|
||||
|
||||
#: mod_register_web.erl:480
|
||||
msgid "Unregister"
|
||||
msgstr ""
|
||||
msgstr "Eliminar rexistro"
|
||||
|
||||
#: mod_roster.erl:1436
|
||||
msgid "Subscription"
|
||||
@ -1872,8 +1851,8 @@ msgid ""
|
||||
"Fill in the form to search for any matching Jabber User (Add * to the end of "
|
||||
"field to match substring)"
|
||||
msgstr ""
|
||||
"Enche o formulario para buscar usuarios Jabber. Engade * ao final dun campo "
|
||||
"para buscar subcadenas."
|
||||
"Enche o formulario para buscar usuarios Jabber (Engade * ao final dun campo "
|
||||
"para buscar subcadenas)"
|
||||
|
||||
#: mod_vcard.erl:490 mod_vcard.erl:615
|
||||
msgid "Full Name"
|
||||
@ -1901,7 +1880,7 @@ msgstr "Necesitas un cliente con soporte de x:data para poder buscar"
|
||||
|
||||
#: mod_vcard.erl:519 mod_vcard_ldap.erl:531
|
||||
msgid "vCard User Search"
|
||||
msgstr "Procura de usuario en vCard"
|
||||
msgstr "vCard busqueda de usuario"
|
||||
|
||||
#: mod_vcard.erl:580 mod_vcard_ldap.erl:586
|
||||
msgid "ejabberd vCard module"
|
||||
@ -1942,7 +1921,6 @@ msgstr "Rechea campos para buscar usuarios Jabber que concuerden"
|
||||
#~ "Este participante é expulsado da sala, porque el enviou un erro de "
|
||||
#~ "presenza"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "CAPTCHA test failed"
|
||||
#~ msgstr "O CAPTCHA é válido."
|
||||
|
||||
|
@ -178,6 +178,7 @@ bounce_resource_packet(From, To, Packet) ->
|
||||
init([]) ->
|
||||
lists:foreach(fun (Host) ->
|
||||
ejabberd_router:register_route(Host,
|
||||
Host,
|
||||
{apply, ?MODULE,
|
||||
route}),
|
||||
ejabberd_hooks:add(local_send_to_resource_hook, Host,
|
||||
|
@ -36,7 +36,9 @@
|
||||
route_error/4,
|
||||
register_route/1,
|
||||
register_route/2,
|
||||
register_route/3,
|
||||
register_routes/1,
|
||||
host_of_route/1,
|
||||
unregister_route/1,
|
||||
unregister_routes/1,
|
||||
dirty_get_all_routes/0,
|
||||
@ -55,7 +57,7 @@
|
||||
|
||||
-type local_hint() :: undefined | integer() | {apply, atom(), atom()}.
|
||||
|
||||
-record(route, {domain, pid, local_hint}).
|
||||
-record(route, {domain, server_host, pid, local_hint}).
|
||||
|
||||
-record(state, {}).
|
||||
|
||||
@ -94,19 +96,29 @@ route_error(From, To, ErrPacket, OrigPacket) ->
|
||||
-spec register_route(binary()) -> term().
|
||||
|
||||
register_route(Domain) ->
|
||||
register_route(Domain, undefined).
|
||||
?WARNING_MSG("~s:register_route/1 is deprected, "
|
||||
"use ~s:register_route/2 instead",
|
||||
[?MODULE, ?MODULE]),
|
||||
register_route(Domain, ?MYNAME).
|
||||
|
||||
-spec register_route(binary(), local_hint()) -> term().
|
||||
-spec register_route(binary(), binary()) -> term().
|
||||
|
||||
register_route(Domain, LocalHint) ->
|
||||
case jid:nameprep(Domain) of
|
||||
error -> erlang:error({invalid_domain, Domain});
|
||||
LDomain ->
|
||||
register_route(Domain, ServerHost) ->
|
||||
register_route(Domain, ServerHost, undefined).
|
||||
|
||||
-spec register_route(binary(), binary(), local_hint()) -> term().
|
||||
|
||||
register_route(Domain, ServerHost, LocalHint) ->
|
||||
case {jid:nameprep(Domain), jid:nameprep(ServerHost)} of
|
||||
{error, _} -> erlang:error({invalid_domain, Domain});
|
||||
{_, error} -> erlang:error({invalid_domain, ServerHost});
|
||||
{LDomain, LServerHost} ->
|
||||
Pid = self(),
|
||||
case get_component_number(LDomain) of
|
||||
undefined ->
|
||||
F = fun () ->
|
||||
mnesia:write(#route{domain = LDomain, pid = Pid,
|
||||
server_host = LServerHost,
|
||||
local_hint = LocalHint})
|
||||
end,
|
||||
mnesia:transaction(F);
|
||||
@ -115,31 +127,27 @@ register_route(Domain, LocalHint) ->
|
||||
case mnesia:wread({route, LDomain}) of
|
||||
[] ->
|
||||
mnesia:write(#route{domain = LDomain,
|
||||
server_host = LServerHost,
|
||||
pid = Pid,
|
||||
local_hint = 1}),
|
||||
lists:foreach(fun (I) ->
|
||||
mnesia:write(#route{domain
|
||||
=
|
||||
LDomain,
|
||||
pid
|
||||
=
|
||||
undefined,
|
||||
local_hint
|
||||
=
|
||||
I})
|
||||
lists:foreach(
|
||||
fun (I) ->
|
||||
mnesia:write(
|
||||
#route{domain = LDomain,
|
||||
pid = undefined,
|
||||
server_host = LServerHost,
|
||||
local_hint = I})
|
||||
end,
|
||||
lists:seq(2, N));
|
||||
Rs ->
|
||||
lists:any(fun (#route{pid = undefined,
|
||||
local_hint = I} =
|
||||
R) ->
|
||||
mnesia:write(#route{domain =
|
||||
LDomain,
|
||||
pid =
|
||||
Pid,
|
||||
local_hint
|
||||
=
|
||||
I}),
|
||||
lists:any(
|
||||
fun (#route{pid = undefined,
|
||||
local_hint = I} = R) ->
|
||||
mnesia:write(
|
||||
#route{domain = LDomain,
|
||||
pid = Pid,
|
||||
server_host = LServerHost,
|
||||
local_hint = I}),
|
||||
mnesia:delete_object(R),
|
||||
true;
|
||||
(_) -> false
|
||||
@ -151,10 +159,10 @@ register_route(Domain, LocalHint) ->
|
||||
end
|
||||
end.
|
||||
|
||||
-spec register_routes([binary()]) -> ok.
|
||||
-spec register_routes([{binary(), binary()}]) -> ok.
|
||||
|
||||
register_routes(Domains) ->
|
||||
lists:foreach(fun (Domain) -> register_route(Domain)
|
||||
lists:foreach(fun ({Domain, ServerHost}) -> register_route(Domain, ServerHost)
|
||||
end,
|
||||
Domains).
|
||||
|
||||
@ -183,7 +191,9 @@ unregister_route(Domain) ->
|
||||
of
|
||||
[R] ->
|
||||
I = R#route.local_hint,
|
||||
ServerHost = R#route.server_host,
|
||||
mnesia:write(#route{domain = LDomain,
|
||||
server_host = ServerHost,
|
||||
pid = undefined,
|
||||
local_hint = I}),
|
||||
mnesia:delete_object(R);
|
||||
@ -211,6 +221,20 @@ dirty_get_all_routes() ->
|
||||
dirty_get_all_domains() ->
|
||||
lists:usort(mnesia:dirty_all_keys(route)).
|
||||
|
||||
-spec host_of_route(binary()) -> binary().
|
||||
|
||||
host_of_route(Domain) ->
|
||||
case jid:nameprep(Domain) of
|
||||
error ->
|
||||
erlang:error({invalid_domain, Domain});
|
||||
LDomain ->
|
||||
case mnesia:dirty_read(route, LDomain) of
|
||||
[#route{server_host = ServerHost}|_] ->
|
||||
ServerHost;
|
||||
[] ->
|
||||
erlang:error({unregistered_route, Domain})
|
||||
end
|
||||
end.
|
||||
|
||||
%%====================================================================
|
||||
%% gen_server callbacks
|
||||
@ -283,8 +307,11 @@ handle_info({'DOWN', _Ref, _Type, Pid, _Info}, State) ->
|
||||
if is_integer(E#route.local_hint) ->
|
||||
LDomain = E#route.domain,
|
||||
I = E#route.local_hint,
|
||||
ServerHost = E#route.server_host,
|
||||
mnesia:write(#route{domain =
|
||||
LDomain,
|
||||
server_host =
|
||||
ServerHost,
|
||||
pid =
|
||||
undefined,
|
||||
local_hint =
|
||||
@ -394,12 +421,10 @@ get_component_number(LDomain) ->
|
||||
undefined).
|
||||
|
||||
update_tables() ->
|
||||
case catch mnesia:table_info(route, attributes) of
|
||||
[domain, node, pid] -> mnesia:delete_table(route);
|
||||
[domain, pid] -> mnesia:delete_table(route);
|
||||
[domain, pid, local_hint] -> ok;
|
||||
[domain, pid, local_hint|_] -> mnesia:delete_table(route);
|
||||
{'EXIT', _} -> ok
|
||||
try
|
||||
mnesia:transform_table(route, ignore, record_info(fields, route))
|
||||
catch exit:{aborted, {no_exists, _}} ->
|
||||
ok
|
||||
end,
|
||||
case lists:member(local_route,
|
||||
mnesia:system_info(tables))
|
||||
|
@ -222,7 +222,7 @@ wait_for_handshake({xmlstreamelement, El}, StateData) ->
|
||||
send_text(StateData, <<"<handshake/>">>),
|
||||
lists:foreach(
|
||||
fun (H) ->
|
||||
ejabberd_router:register_route(H),
|
||||
ejabberd_router:register_route(H, ?MYNAME),
|
||||
?INFO_MSG("Route registered for service ~p~n",
|
||||
[H])
|
||||
end, dict:fetch_keys(StateData#state.host_opts)),
|
||||
|
@ -186,18 +186,24 @@ process_large_heap(Pid, Info) ->
|
||||
"much memory:~n~p~n~s",
|
||||
[node(), Pid, Info, DetailedInfo])),
|
||||
From = jid:make(<<"">>, Host, <<"watchdog">>),
|
||||
Hint = [#xmlel{name = <<"no-permanent-store">>,
|
||||
attrs = [{<<"xmlns">>, ?NS_HINTS}]}],
|
||||
lists:foreach(fun (JID) ->
|
||||
send_message(From, jid:make(JID), Body)
|
||||
send_message(From, jid:make(JID), Body, Hint)
|
||||
end, JIDs).
|
||||
|
||||
send_message(From, To, Body) ->
|
||||
send_message(From, To, Body, []).
|
||||
|
||||
send_message(From, To, Body, ExtraEls) ->
|
||||
ejabberd_router:route(From, To,
|
||||
#xmlel{name = <<"message">>,
|
||||
attrs = [{<<"type">>, <<"chat">>}],
|
||||
children =
|
||||
[#xmlel{name = <<"body">>, attrs = [],
|
||||
children =
|
||||
[{xmlcdata, Body}]}]}).
|
||||
[{xmlcdata, Body}]}
|
||||
| ExtraEls]}).
|
||||
|
||||
get_admin_jids() ->
|
||||
ejabberd_config:get_option(
|
||||
|
@ -861,7 +861,8 @@ connected_users_info() ->
|
||||
PI when is_integer(PI) -> PI;
|
||||
_ -> nil
|
||||
end,
|
||||
{[U, $@, S, $/, R], atom_to_list(Conn), IPS, Port, PriorityI, NodeS, Uptime}
|
||||
{binary_to_list(<<U/binary, $@, S/binary, $/, R/binary>>),
|
||||
atom_to_list(Conn), IPS, Port, PriorityI, NodeS, Uptime}
|
||||
end,
|
||||
USRIs).
|
||||
|
||||
|
@ -86,7 +86,7 @@ stop(Host) ->
|
||||
init([Host, Opts]) ->
|
||||
MyHost = gen_mod:get_opt_host(Host, Opts,
|
||||
<<"echo.@HOST@">>),
|
||||
ejabberd_router:register_route(MyHost),
|
||||
ejabberd_router:register_route(MyHost, Host),
|
||||
{ok, #state{host = MyHost}}.
|
||||
|
||||
%%--------------------------------------------------------------------
|
||||
|
@ -306,7 +306,7 @@ init({ServerHost, Opts}) ->
|
||||
false ->
|
||||
ok
|
||||
end,
|
||||
ejabberd_router:register_route(Host),
|
||||
ejabberd_router:register_route(Host, ServerHost),
|
||||
{ok, #state{server_host = ServerHost, host = Host, name = Name,
|
||||
access = Access, max_size = MaxSize,
|
||||
secret_length = SecretLength, jid_in_url = JIDinURL,
|
||||
|
@ -133,7 +133,7 @@ init([Host, Opts]) ->
|
||||
catch ets:new(irc_connection,
|
||||
[named_table, public,
|
||||
{keypos, #irc_connection.jid_server_host}]),
|
||||
ejabberd_router:register_route(MyHost),
|
||||
ejabberd_router:register_route(MyHost, Host),
|
||||
{ok,
|
||||
#state{host = MyHost, server_host = Host,
|
||||
access = Access}}.
|
||||
|
@ -168,7 +168,7 @@ init([ServerHost, Opts]) ->
|
||||
?NS_PUBSUB, mod_pubsub, iq_sm, IQDisc),
|
||||
gen_iq_handler:add_iq_handler(ejabberd_sm, Host,
|
||||
?NS_MIX_0, ?MODULE, process_iq, IQDisc),
|
||||
ejabberd_router:register_route(Host),
|
||||
ejabberd_router:register_route(Host, ServerHost),
|
||||
{ok, #state{server_host = ServerHost, host = Host}}.
|
||||
|
||||
handle_call(_Request, _From, State) ->
|
||||
|
@ -373,7 +373,7 @@ init([Host, Opts]) ->
|
||||
RoomShaper = gen_mod:get_opt(room_shaper, Opts,
|
||||
fun(A) when is_atom(A) -> A end,
|
||||
none),
|
||||
ejabberd_router:register_route(MyHost),
|
||||
ejabberd_router:register_route(MyHost, Host),
|
||||
load_permanent_rooms(MyHost, Host,
|
||||
{Access, AccessCreate, AccessAdmin, AccessPersistent},
|
||||
HistorySize, RoomShaper),
|
||||
|
@ -151,7 +151,7 @@ init([LServerS, Opts]) ->
|
||||
try_start_loop(),
|
||||
create_pool(),
|
||||
ejabberd_router_multicast:register_route(LServerS),
|
||||
ejabberd_router:register_route(LServiceS),
|
||||
ejabberd_router:register_route(LServiceS, LServerS),
|
||||
{ok,
|
||||
#state{lservice = LServiceS, lserver = LServerS,
|
||||
access = Access, service_limits = SLimits}}.
|
||||
@ -395,7 +395,7 @@ act_groups(FromJID, Packet_stripped, AAttrs, LServiceS,
|
||||
perform(From, Packet, AAttrs, _,
|
||||
{route_single, Group}) ->
|
||||
[route_packet(From, ToUser, Packet, AAttrs,
|
||||
Group#group.addresses)
|
||||
Group#group.others, Group#group.addresses)
|
||||
|| ToUser <- Group#group.dests];
|
||||
perform(From, Packet, AAttrs, _,
|
||||
{{route_multicast, JID, RLimits}, Group}) ->
|
||||
@ -634,13 +634,13 @@ decide_action_group(Group) ->
|
||||
%%% Route packet
|
||||
%%%-------------------------
|
||||
|
||||
route_packet(From, ToDest, Packet, AAttrs, Addresses) ->
|
||||
route_packet(From, ToDest, Packet, AAttrs, Others, Addresses) ->
|
||||
Dests = case ToDest#dest.type of
|
||||
<<"bcc">> -> [];
|
||||
_ -> [ToDest]
|
||||
end,
|
||||
route_packet2(From, ToDest#dest.jid_string, Dests,
|
||||
Packet, AAttrs, Addresses).
|
||||
Packet, AAttrs, {Others, Addresses}).
|
||||
|
||||
route_packet_multicast(From, ToS, Packet, AAttrs, Dests,
|
||||
Addresses, Limits) ->
|
||||
@ -666,6 +666,8 @@ route_packet2(From, ToS, Dests, Packet, AAttrs,
|
||||
ToJID = stj(ToS),
|
||||
ejabberd_router:route(From, ToJID, Packet2).
|
||||
|
||||
append_dests(_Dests, {Others, Addresses}) ->
|
||||
Addresses++Others;
|
||||
append_dests([], Addresses) -> Addresses;
|
||||
append_dests([Dest | Dests], Addresses) ->
|
||||
append_dests(Dests, [Dest#dest.full_xml | Addresses]).
|
||||
@ -912,8 +914,9 @@ received_awaiter(JID, Waiter, LServiceS) ->
|
||||
From = Waiter#waiter.sender,
|
||||
Packet = Waiter#waiter.packet,
|
||||
AAttrs = Waiter#waiter.aattrs,
|
||||
Others = Group#group.others,
|
||||
Addresses = Waiter#waiter.addresses,
|
||||
[route_packet(From, ToUser, Packet, AAttrs, Addresses)
|
||||
[route_packet(From, ToUser, Packet, AAttrs, Others, Addresses)
|
||||
|| ToUser <- Group#group.dests];
|
||||
true ->
|
||||
send_query_info(RServer, LServiceS),
|
||||
|
@ -63,7 +63,7 @@ start_link(Host, Opts) ->
|
||||
|
||||
init([Host, Opts]) ->
|
||||
State = parse_options(Host, Opts),
|
||||
ejabberd_router:register_route(State#state.myhost),
|
||||
ejabberd_router:register_route(State#state.myhost, Host),
|
||||
{ok, State}.
|
||||
|
||||
terminate(_Reason, #state{myhost = MyHost}) ->
|
||||
|
@ -241,6 +241,7 @@ stop(Host) ->
|
||||
init([ServerHost, Opts]) ->
|
||||
?DEBUG("pubsub init ~p ~p", [ServerHost, Opts]),
|
||||
Host = gen_mod:get_opt_host(ServerHost, Opts, <<"pubsub.@HOST@">>),
|
||||
ejabberd_router:register_route(Host, ServerHost),
|
||||
Access = gen_mod:get_opt(access_createnode, Opts,
|
||||
fun(A) when is_atom(A) -> A end, all),
|
||||
PepOffline = gen_mod:get_opt(ignore_pep_from_offline, Opts,
|
||||
@ -256,22 +257,26 @@ init([ServerHost, Opts]) ->
|
||||
DefaultNodeCfg = gen_mod:get_opt(default_node_config, Opts,
|
||||
fun(A) when is_list(A) -> filter_node_options(A) end, []),
|
||||
pubsub_index:init(Host, ServerHost, Opts),
|
||||
ets:new(gen_mod:get_module_proc(ServerHost, config), [set, named_table]),
|
||||
{Plugins, NodeTree, PepMapping} = init_plugins(Host, ServerHost, Opts),
|
||||
mnesia:create_table(pubsub_last_item,
|
||||
[{ram_copies, [node()]},
|
||||
{attributes, record_info(fields, pubsub_last_item)}]),
|
||||
mod_disco:register_feature(ServerHost, ?NS_PUBSUB),
|
||||
ets:insert(gen_mod:get_module_proc(ServerHost, config), {nodetree, NodeTree}),
|
||||
ets:insert(gen_mod:get_module_proc(ServerHost, config), {plugins, Plugins}),
|
||||
ets:insert(gen_mod:get_module_proc(ServerHost, config), {last_item_cache, LastItemCache}),
|
||||
ets:insert(gen_mod:get_module_proc(ServerHost, config), {max_items_node, MaxItemsNode}),
|
||||
ets:insert(gen_mod:get_module_proc(ServerHost, config), {max_subscriptions_node, MaxSubsNode}),
|
||||
ets:insert(gen_mod:get_module_proc(ServerHost, config), {default_node_config, DefaultNodeCfg}),
|
||||
ets:insert(gen_mod:get_module_proc(ServerHost, config), {pep_mapping, PepMapping}),
|
||||
ets:insert(gen_mod:get_module_proc(ServerHost, config), {ignore_pep_from_offline, PepOffline}),
|
||||
ets:insert(gen_mod:get_module_proc(ServerHost, config), {host, Host}),
|
||||
ets:insert(gen_mod:get_module_proc(ServerHost, config), {access, Access}),
|
||||
lists:foreach(
|
||||
fun(H) ->
|
||||
T = gen_mod:get_module_proc(H, config),
|
||||
ets:new(T, [set, named_table]),
|
||||
ets:insert(T, {nodetree, NodeTree}),
|
||||
ets:insert(T, {plugins, Plugins}),
|
||||
ets:insert(T, {last_item_cache, LastItemCache}),
|
||||
ets:insert(T, {max_items_node, MaxItemsNode}),
|
||||
ets:insert(T, {max_subscriptions_node, MaxSubsNode}),
|
||||
ets:insert(T, {default_node_config, DefaultNodeCfg}),
|
||||
ets:insert(T, {pep_mapping, PepMapping}),
|
||||
ets:insert(T, {ignore_pep_from_offline, PepOffline}),
|
||||
ets:insert(T, {host, Host}),
|
||||
ets:insert(T, {access, Access})
|
||||
end, [Host, ServerHost]),
|
||||
ejabberd_hooks:add(sm_remove_connection_hook, ServerHost,
|
||||
?MODULE, on_user_offline, 75),
|
||||
ejabberd_hooks:add(disco_local_identity, ServerHost,
|
||||
@ -309,7 +314,6 @@ init([ServerHost, Opts]) ->
|
||||
false ->
|
||||
ok
|
||||
end,
|
||||
ejabberd_router:register_route(Host),
|
||||
pubsub_migrate:update_node_database(Host, ServerHost),
|
||||
pubsub_migrate:update_state_database(Host, ServerHost),
|
||||
pubsub_migrate:update_lastitem_database(Host, ServerHost),
|
||||
@ -873,7 +877,6 @@ handle_info(_Info, State) ->
|
||||
%% @private
|
||||
terminate(_Reason,
|
||||
#state{host = Host, server_host = ServerHost, nodetree = TreePlugin, plugins = Plugins}) ->
|
||||
ejabberd_router:unregister_route(Host),
|
||||
case lists:member(?PEPNODE, Plugins) of
|
||||
true ->
|
||||
ejabberd_hooks:delete(caps_add, ServerHost,
|
||||
@ -918,7 +921,8 @@ terminate(_Reason,
|
||||
Pid ->
|
||||
Pid ! stop
|
||||
end,
|
||||
terminate_plugins(Host, ServerHost, Plugins, TreePlugin).
|
||||
terminate_plugins(Host, ServerHost, Plugins, TreePlugin),
|
||||
ejabberd_router:unregister_route(Host).
|
||||
|
||||
%%--------------------------------------------------------------------
|
||||
%% Func: code_change(OldVsn, State, Extra) -> {ok, NewState}
|
||||
@ -3641,7 +3645,7 @@ get_option(Options, Var, Def) ->
|
||||
end.
|
||||
|
||||
node_options(Host, Type) ->
|
||||
case config(serverhost(Host), default_node_config) of
|
||||
case config(Host, default_node_config) of
|
||||
undefined -> node_plugin_options(Host, Type);
|
||||
[] -> node_plugin_options(Host, Type);
|
||||
Config -> Config
|
||||
@ -3954,15 +3958,15 @@ set_xoption(Host, [_ | Opts], NewOpts) ->
|
||||
set_xoption(Host, Opts, NewOpts).
|
||||
|
||||
get_max_items_node(Host) ->
|
||||
config(serverhost(Host), max_items_node, undefined).
|
||||
config(Host, max_items_node, undefined).
|
||||
|
||||
get_max_subscriptions_node(Host) ->
|
||||
config(serverhost(Host), max_subscriptions_node, undefined).
|
||||
config(Host, max_subscriptions_node, undefined).
|
||||
|
||||
%%%% last item cache handling
|
||||
|
||||
is_last_item_cache_enabled(Host) ->
|
||||
config(serverhost(Host), last_item_cache, false).
|
||||
config(Host, last_item_cache, false).
|
||||
|
||||
set_cached_item({_, ServerHost, _}, Nidx, ItemId, Publisher, Payload) ->
|
||||
set_cached_item(ServerHost, Nidx, ItemId, Publisher, Payload);
|
||||
@ -4013,13 +4017,12 @@ host(ServerHost) ->
|
||||
config(ServerHost, host, <<"pubsub.", ServerHost/binary>>).
|
||||
|
||||
serverhost({_U, ServerHost, _R})->
|
||||
ServerHost;
|
||||
serverhost(ServerHost);
|
||||
serverhost(Host) ->
|
||||
[_, ServerHost] = binary:split(Host, <<".">>),
|
||||
ServerHost.
|
||||
ejabberd_router:host_of_route(Host).
|
||||
|
||||
tree(Host) ->
|
||||
case config(serverhost(Host), nodetree) of
|
||||
case config(Host, nodetree) of
|
||||
undefined -> tree(Host, ?STDTREE);
|
||||
Tree -> Tree
|
||||
end.
|
||||
@ -4041,7 +4044,7 @@ plugin(Host, Name) ->
|
||||
end.
|
||||
|
||||
plugins(Host) ->
|
||||
case config(serverhost(Host), plugins) of
|
||||
case config(Host, plugins) of
|
||||
undefined -> [?STDNODE];
|
||||
[] -> [?STDNODE];
|
||||
Plugins -> Plugins
|
||||
@ -4056,6 +4059,9 @@ subscription_plugin(Host) ->
|
||||
|
||||
config(ServerHost, Key) ->
|
||||
config(ServerHost, Key, undefined).
|
||||
|
||||
config({_User, Host, _Resource}, Key, Default) ->
|
||||
config(Host, Key, Default);
|
||||
config(ServerHost, Key, Default) ->
|
||||
case catch ets:lookup(gen_mod:get_module_proc(ServerHost, config), Key) of
|
||||
[{Key, Value}] -> Value;
|
||||
|
@ -145,7 +145,7 @@ get_user_roster(Items, {U, S} = US) ->
|
||||
%%case dict:find(US1, SRUsers1) of
|
||||
{value, _, SRUsers2} -> {Item#roster{subscription = both, ask = none}, SRUsers2};
|
||||
%%{ok, _GroupNames} -> {Item#roster{subscription = both, ask = none}, dict:erase(US1, SRUsers1)};
|
||||
error -> {Item, SRUsers1}
|
||||
false -> {Item, SRUsers1}
|
||||
end
|
||||
end,
|
||||
SRUsers, Items),
|
||||
|
@ -105,7 +105,7 @@ init(Host, ServerHost, Search) ->
|
||||
case Search of
|
||||
false -> loop(Host, ServerHost);
|
||||
_ ->
|
||||
ejabberd_router:register_route(Host),
|
||||
ejabberd_router:register_route(Host, ServerHost),
|
||||
loop(Host, ServerHost)
|
||||
end.
|
||||
|
||||
|
@ -173,7 +173,7 @@ init([Host, Opts]) ->
|
||||
State#state.password, State#state.tls_options),
|
||||
case State#state.search of
|
||||
true ->
|
||||
ejabberd_router:register_route(State#state.myhost);
|
||||
ejabberd_router:register_route(State#state.myhost, Host);
|
||||
_ -> ok
|
||||
end,
|
||||
{ok, State}.
|
||||
|
170
src/node_mix_odbc.erl
Normal file
170
src/node_mix_odbc.erl
Normal file
@ -0,0 +1,170 @@
|
||||
%%%-------------------------------------------------------------------
|
||||
%%% @author Evgeny Khramtsov <ekhramtsov@process-one.net>
|
||||
%%% @copyright (C) 2016, Evgeny Khramtsov
|
||||
%%% @doc
|
||||
%%%
|
||||
%%% @end
|
||||
%%% Created : 8 Mar 2016 by Evgeny Khramtsov <ekhramtsov@process-one.net>
|
||||
%%%-------------------------------------------------------------------
|
||||
-module(node_mix_odbc).
|
||||
|
||||
-behaviour(gen_pubsub_node).
|
||||
|
||||
%% API
|
||||
-export([init/3, terminate/2, options/0, features/0,
|
||||
create_node_permission/6, create_node/2, delete_node/1,
|
||||
purge_node/2, subscribe_node/8, unsubscribe_node/4,
|
||||
publish_item/6, delete_item/4, remove_extra_items/3,
|
||||
get_entity_affiliations/2, get_node_affiliations/1,
|
||||
get_affiliation/2, set_affiliation/3,
|
||||
get_entity_subscriptions/2, get_node_subscriptions/1,
|
||||
get_subscriptions/2, set_subscriptions/4,
|
||||
get_pending_nodes/2, get_states/1, get_state/2,
|
||||
set_state/1, get_items/7, get_items/3, get_item/7,
|
||||
get_item/2, set_item/1, get_item_name/3, node_to_path/1,
|
||||
path_to_node/1, get_entity_subscriptions_for_send_last/2]).
|
||||
|
||||
-include("pubsub.hrl").
|
||||
|
||||
%%%===================================================================
|
||||
%%% API
|
||||
%%%===================================================================
|
||||
init(Host, ServerHost, Opts) ->
|
||||
node_flat_odbc:init(Host, ServerHost, Opts).
|
||||
|
||||
terminate(Host, ServerHost) ->
|
||||
node_flat_odbc:terminate(Host, ServerHost).
|
||||
|
||||
options() ->
|
||||
[{deliver_payloads, true},
|
||||
{notify_config, false},
|
||||
{notify_delete, false},
|
||||
{notify_retract, true},
|
||||
{purge_offline, false},
|
||||
{persist_items, true},
|
||||
{max_items, ?MAXITEMS},
|
||||
{subscribe, true},
|
||||
{access_model, open},
|
||||
{roster_groups_allowed, []},
|
||||
{publish_model, open},
|
||||
{notification_type, headline},
|
||||
{max_payload_size, ?MAX_PAYLOAD_SIZE},
|
||||
{send_last_published_item, never},
|
||||
{deliver_notifications, true},
|
||||
{broadcast_all_resources, true},
|
||||
{presence_based_delivery, false}].
|
||||
|
||||
features() ->
|
||||
[<<"create-nodes">>,
|
||||
<<"delete-nodes">>,
|
||||
<<"delete-items">>,
|
||||
<<"instant-nodes">>,
|
||||
<<"item-ids">>,
|
||||
<<"outcast-affiliation">>,
|
||||
<<"persistent-items">>,
|
||||
<<"publish">>,
|
||||
<<"purge-nodes">>,
|
||||
<<"retract-items">>,
|
||||
<<"retrieve-affiliations">>,
|
||||
<<"retrieve-items">>,
|
||||
<<"retrieve-subscriptions">>,
|
||||
<<"subscribe">>,
|
||||
<<"subscription-notifications">>].
|
||||
|
||||
create_node_permission(Host, ServerHost, Node, ParentNode, Owner, Access) ->
|
||||
node_flat_odbc:create_node_permission(Host, ServerHost, Node, ParentNode, Owner, Access).
|
||||
|
||||
create_node(Nidx, Owner) ->
|
||||
node_flat_odbc:create_node(Nidx, Owner).
|
||||
|
||||
delete_node(Removed) ->
|
||||
node_flat_odbc:delete_node(Removed).
|
||||
|
||||
subscribe_node(Nidx, Sender, Subscriber, AccessModel,
|
||||
SendLast, PresenceSubscription, RosterGroup, Options) ->
|
||||
node_flat_odbc:subscribe_node(Nidx, Sender, Subscriber, AccessModel, SendLast,
|
||||
PresenceSubscription, RosterGroup, Options).
|
||||
|
||||
unsubscribe_node(Nidx, Sender, Subscriber, SubId) ->
|
||||
node_flat_odbc:unsubscribe_node(Nidx, Sender, Subscriber, SubId).
|
||||
|
||||
publish_item(Nidx, Publisher, Model, MaxItems, ItemId, Payload) ->
|
||||
node_flat_odbc:publish_item(Nidx, Publisher, Model, MaxItems, ItemId, Payload).
|
||||
|
||||
remove_extra_items(Nidx, MaxItems, ItemIds) ->
|
||||
node_flat_odbc:remove_extra_items(Nidx, MaxItems, ItemIds).
|
||||
|
||||
delete_item(Nidx, Publisher, PublishModel, ItemId) ->
|
||||
node_flat_odbc:delete_item(Nidx, Publisher, PublishModel, ItemId).
|
||||
|
||||
purge_node(Nidx, Owner) ->
|
||||
node_flat_odbc:purge_node(Nidx, Owner).
|
||||
|
||||
get_entity_affiliations(Host, Owner) ->
|
||||
node_flat_odbc:get_entity_affiliations(Host, Owner).
|
||||
|
||||
get_node_affiliations(Nidx) ->
|
||||
node_flat_odbc:get_node_affiliations(Nidx).
|
||||
|
||||
get_affiliation(Nidx, Owner) ->
|
||||
node_flat_odbc:get_affiliation(Nidx, Owner).
|
||||
|
||||
set_affiliation(Nidx, Owner, Affiliation) ->
|
||||
node_flat_odbc:set_affiliation(Nidx, Owner, Affiliation).
|
||||
|
||||
get_entity_subscriptions(Host, Owner) ->
|
||||
node_flat_odbc:get_entity_subscriptions(Host, Owner).
|
||||
|
||||
get_node_subscriptions(Nidx) ->
|
||||
node_flat_odbc:get_node_subscriptions(Nidx).
|
||||
|
||||
get_subscriptions(Nidx, Owner) ->
|
||||
node_flat_odbc:get_subscriptions(Nidx, Owner).
|
||||
|
||||
set_subscriptions(Nidx, Owner, Subscription, SubId) ->
|
||||
node_flat_odbc:set_subscriptions(Nidx, Owner, Subscription, SubId).
|
||||
|
||||
get_pending_nodes(Host, Owner) ->
|
||||
node_flat_odbc:get_pending_nodes(Host, Owner).
|
||||
|
||||
get_states(Nidx) ->
|
||||
node_flat_odbc:get_states(Nidx).
|
||||
|
||||
get_state(Nidx, JID) ->
|
||||
node_flat_odbc:get_state(Nidx, JID).
|
||||
|
||||
set_state(State) ->
|
||||
node_flat_odbc:set_state(State).
|
||||
|
||||
get_items(Nidx, From, RSM) ->
|
||||
node_flat_odbc:get_items(Nidx, From, RSM).
|
||||
|
||||
get_items(Nidx, JID, AccessModel, PresenceSubscription, RosterGroup, SubId, RSM) ->
|
||||
node_flat_odbc:get_items(Nidx, JID, AccessModel,
|
||||
PresenceSubscription, RosterGroup, SubId, RSM).
|
||||
|
||||
get_item(Nidx, ItemId) ->
|
||||
node_flat_odbc:get_item(Nidx, ItemId).
|
||||
|
||||
get_item(Nidx, ItemId, JID, AccessModel, PresenceSubscription, RosterGroup, SubId) ->
|
||||
node_flat_odbc:get_item(Nidx, ItemId, JID, AccessModel,
|
||||
PresenceSubscription, RosterGroup, SubId).
|
||||
|
||||
set_item(Item) ->
|
||||
node_flat_odbc:set_item(Item).
|
||||
|
||||
get_item_name(Host, Node, Id) ->
|
||||
node_flat_odbc:get_item_name(Host, Node, Id).
|
||||
|
||||
node_to_path(Node) ->
|
||||
node_flat_odbc:node_to_path(Node).
|
||||
|
||||
path_to_node(Path) ->
|
||||
node_flat_odbc:path_to_node(Path).
|
||||
|
||||
get_entity_subscriptions_for_send_last(Host, Owner) ->
|
||||
node_flat_odbc:get_entity_subscriptions_for_send_last(Host, Owner).
|
||||
|
||||
%%%===================================================================
|
||||
%%% Internal functions
|
||||
%%%===================================================================
|
@ -293,6 +293,8 @@ db_tests(_) ->
|
||||
test_unregister]},
|
||||
{test_muc_register, [sequence],
|
||||
[muc_register_master, muc_register_slave]},
|
||||
{test_mix, [parallel],
|
||||
[mix_master, mix_slave]},
|
||||
{test_roster_subscribe, [parallel],
|
||||
[roster_subscribe_master,
|
||||
roster_subscribe_slave]},
|
||||
|
@ -35,6 +35,7 @@ host_config:
|
||||
- "flat"
|
||||
- "hometree"
|
||||
- "pep"
|
||||
mod_mix: []
|
||||
mod_roster:
|
||||
versioning: true
|
||||
store_current_id: true
|
||||
@ -88,6 +89,7 @@ Welcome to this XMPP server."
|
||||
- "flat"
|
||||
- "hometree"
|
||||
- "pep"
|
||||
mod_mix: []
|
||||
mod_roster:
|
||||
versioning: true
|
||||
store_current_id: true
|
||||
@ -147,6 +149,7 @@ Welcome to this XMPP server."
|
||||
- "flat"
|
||||
- "hometree"
|
||||
- "pep"
|
||||
mod_mix: []
|
||||
mod_roster:
|
||||
versioning: true
|
||||
store_current_id: true
|
||||
|
Loading…
Reference in New Issue
Block a user