I Wrote a module where some pubsub command available in ejabberdctl. I uploaded some data with strophiejs and testing the get_items/2 pubsub function:
%... #ejabberd_commands{name = discover_nodes, tags = [pubsub], desc = "Pubsub: discover_nodes", module = ?MODULE, function = discover_nodes, args = [{host, binary}, {node, string}], args_example = ["discover_nodes"], args_desc = ["discover_nodes"], result = {result, rescode}, result_example = ok, result_desc = "discover_nodes"} %... discover_nodes(Host, Node) -> mod_pubsub:get_items(Host, Node). %...
I found the new command in ejabberdctl but when im testing it, return a "item-not-found" error:
command call: ejabberdctl discover_nodes pubsub.myhost.hu Piskota
result:
Error: {stanza_error,cancel,404,<<>>,'item-not-found', {text,<<"en">>,<<"Node not found">>}, []}
I'm sure i have uploaded datas, and found a function what can list them (here is the "Piskota"):
{pubsub_node,{<<"pubsub.myhost.hu">>,<<"Piskota">>}, 8,[],<<"flat">>, [{<<"admin">>,<<"myhost.hu">>,<<>>}], [{deliver_payloads,true}, {notify_config,false}, {notify_delete,false}, {notify_retract,true}, {purge_offline,false}, {persist_items,true}, {max_items,10}, {subscribe,true}, {access_model,open}, {roster_groups_allowed,[]}, {publish_model,publishers}, {notification_type,headline}, {max_payload_size,60000}, {send_last_published_item,on_sub_and_presence}, {deliver_notifications,true}, {title,<<>>}, {presence_based_delivery,false}, {itemreply,none}]}
I tried a lots of parameter combination and variation, but always got this item-not-found.
I dont know it is help, but here is my pubsub config detail:
mod_pubsub: access_createnode: all ignore_pep_from_offline: true last_item_cache: false plugins: - "flat" - "hometree" - "pep" # pep requires mod_caps
It can be a lots of help, if you can send me a native erlang call example for get_items/2 and create_node/5.
> a native erlang call
> a native erlang call example for get_items/2 and create_node/5.
You can know what arguments, and in what format they are expected, if you add some debug lines like this one, recompile, install, then trigger the code with a normal client, and see the log lines in the ejabberd log:
Yea i got this idea too, but
Yea i got this idea too, but after compile pubsub (either without changes) the ejabberd wont start and return with this error:
[critical] <0.38.0>@gen_mod:start_module:162 Problem starting the module mod_pubsub for host <<"myhost.hu">>
options: [{access_createnode,all},
{ignore_pep_from_offline,true},
{last_item_cache,false},
{plugins,[<<"flat">>,<<"hometree">>,<<"pep">>]}]
error: undef
[{gen_mod,start_child,
[mod_pubsub,<<"myhost.hu">>,
[{access_createnode,all},
{ignore_pep_from_offline,true},
{last_item_cache,false},
{plugins,[<<"flat">>,<<"hometree">>,<<"pep">>]}]],
[]},
{gen_mod,start_module,3,[{file,"src/gen_mod.erl"},{line,154}]},
{lists,foreach,2,[{file,"lists.erl"},{line,1337}]},
{ejabberd_app,start,2,[{file,"src/ejabberd_app.erl"},{line,77}]},
{application_master,start_it_old,4,
[{file,"application_master.erl"},{line,273}]}]
2017-03-29 07:05:33.466 [critical] <0.38.0>@gen_mod:maybe_halt_ejabberd:170 ejabberd initialization was aborted because a module start failed.
I found the same error in forums with other modules, but can't solve this problem. And this is not a priority problem for me.
Okay, so i just figured out
Okay, so i just figured out in get_items/2 case:
The args type in the ejabberd_commands declaration must be binary:
args = [{host, binary}, {node, binary}],
And a native call for get_items/2 looks like this:
mod_pubsub:get_items(<<"pubsub.mydomain">>, <<"NodeName">>)
If the node got string instead of binary, it wont run in error or warning, just simply will not found the node.