[erlang-questions] Hook user_send_packet is crashing when client tries to connect

Stefan Strigler <>
Wed Apr 5 18:15:33 CEST 2017


Yeah, and sorry, apparently the signature changed. I was looking at an
outdated version of ejabberd. Now they arity indeed is just 1.

Now it's 'user_send_packet({Packet, C2SState})' where Packet can be one of
#iq, #presence or #message.

On Wed, Apr 5, 2017 at 6:11 PM Stefan Strigler <>
wrote:

> Hi,
>
> this is because you only have one clause, the one for packets of type
> "message" but none for all the others. Check the example I've sent to you,
> it had a second clause that acts as a catch all.
>
> On Wed, Apr 5, 2017 at 3:08 PM Abhishek Ranjan <>
> wrote:
>
> *I have created a custom module in ejabberd that should print hello buddy
> in logs only when there is a exchange of message stanzas between the client
> and server: Here is the code->*
>
> -module(newCust).
> -behaviour(gen_mod).
>
> -export([]).
>
> -export([start/2,stop/1,depends/2,mod_opt_type/1,myMessage/4]).
> -include("logger.hrl").
> -include("xmpp.hrl").
> -include("ejabberd.hrl").
>
> start(_Host, _Opts) ->
>
> ?INFO_MSG("Inside customMod start function ",[]),
> ejabberd_hooks:add(user_send_packet, _Host, ?MODULE,
> myMessage, 105),
> ok.
> stop(_Host) ->
> ejabberd_hooks:delete(user_send_packet, _Host, ?MODULE, myMessage,105).
>
> depends(_Host, _Opts)->[{?MODULE,soft}].
>
> mod_opt_type(_Option)->
> ok.
>
> myMessage(#xmlel{name = <<"message">>} = Pkt, _C2SState, _From, _To)->
>
> ?INFO_MSG("hello buddy ",[]),
> Pkt.
>
>
> *The log values are :*
>
> 2017-04-05 17:43:02.498 [info] <0.7.0> Application lager started on node
> 
> 2017-04-05 17:43:02.502 [info] <0.7.0> Application crypto started on node
> 
> 2017-04-05 17:43:02.511 [info] <0.7.0> Application sasl started on node
> 
> 2017-04-05 17:43:02.521 [info] <0.7.0> Application asn1 started on node
> 
> 2017-04-05 17:43:02.521 [info] <0.7.0> Application public_key started on
> node 
> 2017-04-05 17:43:02.529 [info] <0.7.0> Application ssl started on node
> 
> 2017-04-05 17:43:02.543 [info] <0.7.0> Application fast_yaml started on
> node 
> 2017-04-05 17:43:02.559 [info] <0.7.0> Application fast_tls started on
> node 
> 2017-04-05 17:43:02.575 [info] <0.7.0> Application fast_xml started on
> node 
> 2017-04-05 17:43:02.579 [info] <0.7.0> Application p1_utils started on
> node 
> 2017-04-05 17:43:02.581 [info] <0.7.0> Application stringprep started on
> node 
> 2017-04-05 17:43:02.582 [info] <0.7.0> Application xmpp started on node
> 
> 2017-04-05 17:43:02.595 [info] <0.7.0> Application cache_tab started on
> node 
> 2017-04-05 17:43:02.618 [info] <0.7.0> Application elixir started on node
> 
> 2017-04-05 17:43:02.786 [info] <0.7.0> Application mnesia started on node
> 
> 2017-04-05 17:43:02.900 [warning]
> <0.37.0>@ejabberd_config:emit_deprecation_warning:1427 Module mod_last_odbc
> is deprecated, use mod_last with 'db_type: sql' instead
> 2017-04-05 17:43:02.911 [warning]
> <0.37.0>@ejabberd_config:emit_deprecation_warning:1427 Module
> mod_offline_odbc is deprecated, use mod_offline with 'db_type: sql' instead
> 2017-04-05 17:43:02.918 [warning]
> <0.37.0>@ejabberd_config:emit_deprecation_warning:1427 Module
> mod_privacy_odbc is deprecated, use mod_privacy with 'db_type: sql' instead
> 2017-04-05 17:43:02.922 [warning]
> <0.37.0>@ejabberd_config:emit_deprecation_warning:1427 Module
> mod_private_odbc is deprecated, use mod_private with 'db_type: sql' instead
> 2017-04-05 17:43:02.926 [warning]
> <0.37.0>@ejabberd_config:emit_deprecation_warning:1427 Module
> mod_pubsub_odbc is deprecated, use mod_pubsub with 'db_type: sql' instead
> 2017-04-05 17:43:02.930 [warning]
> <0.37.0>@ejabberd_config:emit_deprecation_warning:1427 Module
> mod_roster_odbc is deprecated, use mod_roster with 'db_type: sql' instead
> 2017-04-05 17:43:02.944 [warning]
> <0.37.0>@ejabberd_config:emit_deprecation_warning:1427 Module
> mod_vcard_odbc is deprecated, use mod_vcard with 'db_type: sql' instead
> 2017-04-05 17:43:03.643 [info]
> <0.37.0>@ejabberd_app:add_windows_nameservers:132 Adding machine's DNS IPs
> to Erlang system:
> []
> 2017-04-05 17:43:03.654 [info] <0.279.0>@cyrsasl_digest:start:62 FQDN used
> to check DIGEST-MD5 SASL authentication: DESKTOP-RI8MDR6
> 2017-04-05 17:43:04.176 [info] <0.7.0> Application p1_mysql started on
> node 
> 2017-04-05 17:43:04.308 [warning] <0.277.0>@gen_mod:sort_modules:149
> module 'mod_mam' is recommended for module 'mod_muc' but is not found in
> the config
> 2017-04-05 17:43:04.309 [warning] <0.277.0>@gen_mod:sort_modules:157
> cyclic dependency detected between modules: [newCust,newCust]
> 2017-04-05 17:43:04.314 [info] <0.277.0>@newCust:start:17 Inside customMod
> start function
> 2017-04-05 17:43:04.443 [info] <0.7.0> Application inets started on node
> 
> 2017-04-05 17:43:04.458 [info] <0.325.0>@ejabberd_listener:init_tcp:149
> Start accepting TCP connections at 0.0.0.0:5222 for ejabberd_c2s
> 2017-04-05 17:43:04.458 [info] <0.326.0>@ejabberd_listener:init_tcp:149
> Start accepting TCP connections at 0.0.0.0:5269 for ejabberd_s2s_in
> 2017-04-05 17:43:04.458 [info] <0.37.0>@ejabberd_app:start:59 ejabberd
> 17.03 is started in the node  in 2.22s
> 2017-04-05 17:43:04.458 [info] <0.327.0>@ejabberd_listener:init_tcp:149
> Start accepting TCP connections at 0.0.0.0:5280 for ejabberd_http
> 2017-04-05 17:43:04.458 [info] <0.7.0> Application ejabberd started on
> node 
> 2017-04-05 17:43:09.676 [info] <0.325.0>@ejabberd_listener:accept:311
> (<0.491.0>) Accepted connection 127.0.0.1:63321 -> 127.0.0.1:5222
> 2017-04-05 17:43:09.807 [info]
> <0.492.0>@ejabberd_c2s:handle_auth_success:439 (tls|<0.491.0>) Accepted c2s
> PLAIN authentication for  by sql backend from 127.0.0.1
> 2017-04-05 17:43:09.981 [info] <0.492.0>@ejabberd_c2s:bind:410
> (tls|<0.491.0>) *Opened c2s session for /-
> <http://admin2@casino.com/->*
> 2017-04-05 17:43:09.991 [error] <0.492.0>@*ejabberd_hooks:safe_apply:383
> Hook user_send_packet crashed when running newCust:myMessage/1:*
> ** *Reason* =
> {error,undef,[{newCust,myMessage,[],[{{iq,<<"purple701889db">>,set,<<"en">>,{jid,<<"admin2">>,<<"
> casino.com">>,<<"-">>,<<"admin2">>,<<"casino.com
> ">>,<<"-">>},{jid,<<"admin2">>,<<"casino.com">>,<<>>,<<"admin2">>,<<"
> casino.com">>,<<>>},[{xmlel,<<"session">>,[{<<"xmlns">>,<<"urn:ietf:params:xml:ns:xmpp-session">>}],[]}],#{ip
> => {127,0,0,1}}},#{mgmt_stanzas_in => 0,xmlns =>
> <<"jabber:client">>,stream_encrypted => true,tls_enabled => true,socket =>
> {socket_state,fast_tls,{tlssock,#Port<0.23143>,#Port<0.23190>},<0.491.0>},mod
> => ejabberd_c2s,server => <<"casino.com">>,mgmt_state =>
> inactive,mgmt_max_timeout => 300,stream_restarted => true,auth_module =>
> ejabberd_auth_sql,stream_id => <<"15132958958157338735">>,mgmt_ack_timeout
> => 60000,privacy_list => {userlist,none,[],false},stream_timeout =>
> infinity,sid => {{1491,394389,1},<0.492.0>},pres_f => {1,{{<<"admin2">>,<<"
> casino.com">>,<<>>},nil,nil}},tls_options =>
> [compression_none,{protocol_options,<<"no_sslv3">>},{certfile,<<"C:\\ProgramData\\ejabberd\\conf\\server.pem">>}],tls_required
> => false,mgmt_timeout => 300,socket_monitor =>
> #Ref<0.0.2.141>,stream_compressed => false,mgmt_resend =>
> false,mgmt_stanzas_out => 0,csi_state => active,lserver => <<"casino.com">>,zlib
> => false,lang => <<"en">>,ip => {{127,0,0,1},63321},mgmt_max_queue =>
> 1000,stream_version => {1,0},resource => <<"-">>,jid =>
> {jid,<<"admin2">>,<<"casino.com">>,<<"-">>,<<"admin2">>,<<"casino.com">>,<<"-">>},csi_queue
> => {0,0,#{}},shaper => c2s_shaper,user => <<"admin2">>,access =>
> c2s,stream_state => established,tls_verify => false,sockmod =>
> ejabberd_socket,stream_direction => in,mgmt_stanzas_req => 0,pres_t =>
> {1,{{<<"admin2">>,<<"casino.com">>,<<>>},nil,nil}},owner =>
> <0.492.0>,stream_header_sent => true,pres_a => {0,nil},stream_authenticated
> => true,conn =>
> c2s_tls}}]},{ejabberd_hooks,safe_apply,[{file,"src/ejabberd_hooks.erl"},{line,380}],4},{ejabberd_hooks,run_fold1,[{file,"src/ejabberd_hooks.erl"},{line,364}],4},{ejabberd_c2s,...},...]}
>
>
>
> ** *Arguments* =
> [{{iq,<<"purple701889db">>,set,<<"en">>,{jid,<<"admin2">>,<<"casino.com
> ">>,<<"-">>,<<"admin2">>,<<"casino.com">>,<<"-">>},{jid,<<"admin2">>,<<"
> casino.com">>,<<>>,<<"admin2">>,<<"casino.com">>,<<>>},[{xmlel,<<"session">>,[{<<"xmlns">>,<<"urn:ietf:params:xml:ns:xmpp-session">>}],[]}],#{ip
> => {127,0,0,1}}},#{mgmt_stanzas_in => 0,xmlns =>
> <<"jabber:client">>,stream_encrypted => true,tls_enabled => true,socket =>
> {socket_state,fast_tls,{tlssock,#Port<0.23143>,#Port<0.23190>},<0.491.0>},mod
> => ejabberd_c2s,server => <<"casino.com">>,mgmt_state =>
> inactive,mgmt_max_timeout => 300,stream_restarted => true,auth_module =>
> ejabberd_auth_sql,stream_id => <<"15132958958157338735">>,mgmt_ack_timeout
> => 60000,privacy_list => {userlist,none,[],false},stream_timeout =>
> infinity,sid => {{1491,394389,1},<0.492.0>},pres_f => {1,{{<<"admin2">>,<<"
> casino.com">>,<<>>},nil,nil}},tls_options =>
> [compression_none,{protocol_options,<<"no_sslv3">>},{certfile,<<"C:\\ProgramData\\ejabberd\\conf\\server.pem">>}],tls_required
> => false,mgmt_timeout => 300,socket_monitor =>
> #Ref<0.0.2.141>,stream_compressed => false,mgmt_resend =>
> false,mgmt_stanzas_out => 0,csi_state => active,lserver => <<"casino.com">>,zlib
> => false,lang => <<"en">>,ip => {{127,0,0,1},63321},mgmt_max_queue =>
> 1000,stream_version => {1,0},resource => <<"-">>,jid =>
> {jid,<<"admin2">>,<<"casino.com">>,<<"-">>,<<"admin2">>,<<"casino.com">>,<<"-">>},csi_queue
> => {0,0,#{}},shaper => c2s_shaper,user => <<"admin2">>,access =>
> c2s,stream_state => established,tls_verify => false,sockmod =>
> ejabberd_socket,stream_direction => in,mgmt_stanzas_req => 0,pres_t =>
> {1,{{<<"admin2">>,<<"casino.com">>,<<>>},nil,nil}},owner =>
> <0.492.0>,stream_header_sent => true,pres_a => {0,nil},stream_authenticated
> => true,conn => c2s_tls}}]
>
>
> *And the same error and reason is getting printed again and again after
> some time as the client tries to connect with the server.*
>
> Can anyone help please?
>
> Also i am new to erlang and ejabberd so can anyone tell me how to create
> custom hooks in ejabberd?
>
> Thank you in advance
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20170405/318ca5b8/attachment.html>


More information about the erlang-questions mailing list