]> granicus.if.org Git - ejabberd/commitdiff
Change code to reflect recent changes in fxml_gen
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Fri, 5 Aug 2016 05:41:08 +0000 (08:41 +0300)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Fri, 5 Aug 2016 05:41:08 +0000 (08:41 +0300)
21 files changed:
include/xmpp_codec.hrl
src/ejabberd_c2s.erl
src/mod_adhoc.erl
src/mod_announce.erl
src/mod_blocking.erl
src/mod_caps.erl
src/mod_configure.erl
src/mod_disco.erl
src/mod_irc.erl
src/mod_mam.erl
src/mod_muc.erl
src/mod_muc_room.erl
src/mod_offline.erl
src/mod_privacy.erl
src/mod_proxy65_service.erl
src/mod_vcard.erl
src/translate.erl
src/xmpp.erl
src/xmpp_codec.erl
src/xmpp_util.erl
tools/xmpp_codec.spec

index e3eb31285c7a753cab72f9a0b0a67406c8245d0b..935607de917afb1375a0131e408fe5f5e1ea2a74 100644 (file)
@@ -1,7 +1,7 @@
 %% Created automatically by XML generator (fxml_gen.erl)
 %% Source: xmpp_codec.spec
 
--record(vcard_xupdate, {us :: {binary(), binary()},
+-record(vcard_xupdate, {us = {<<>>, <<>>} :: {binary(), binary()},
                        hash :: binary()}).
 -type vcard_xupdate() :: #vcard_xupdate{}.
 
                       'no-permanent-store' | 'no-permanent-storage'}).
 -type hint() :: #hint{}.
 
--record(iq, {id :: binary(),
+-record(iq, {id = <<>> :: binary(),
              type :: 'error' | 'get' | 'result' | 'set',
-             lang :: binary(),
-             from :: any(),
-             to :: any(),
-             sub_els = [] :: [any()]}).
+             lang = <<>> :: binary(),
+             from :: jid:jid(),
+             to :: jid:jid(),
+             sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
 -type iq() :: #iq{}.
 
 -record(feature_register, {}).
 -type adhoc_note() :: #adhoc_note{}.
 
 -record(address, {type :: 'bcc' | 'cc' | 'noreply' | 'ofrom' | 'replyroom' | 'replyto' | 'to',
-                  jid :: any(),
-                  desc :: binary(),
-                  node :: binary(),
-                  delivered :: any()}).
+                  jid :: jid:jid(),
+                  desc = <<>> :: binary(),
+                  node = <<>> :: binary(),
+                  delivered :: boolean()}).
 -type address() :: #address{}.
 
--record(sasl_success, {text :: any()}).
+-record(sasl_success, {text = <<>> :: binary()}).
 -type sasl_success() :: #sasl_success{}.
 
--record(mam_result, {xmlns :: binary(),
-                     queryid :: binary(),
-                     id :: binary(),
-                     sub_els = [] :: [any()]}).
+-record(mam_result, {xmlns = <<>> :: binary(),
+                     queryid = <<>> :: binary(),
+                     id = <<>> :: binary(),
+                     sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
 -type mam_result() :: #mam_result{}.
 
 -record(rsm_first, {index :: non_neg_integer(),
-                    data :: binary()}).
+                    data = <<>> :: binary()}).
 -type rsm_first() :: #rsm_first{}.
 
--record(text, {lang :: binary(),
-               data :: binary()}).
+-record(text, {lang = <<>> :: binary(),
+               data = <<>> :: binary()}).
 -type text() :: #text{}.
 
--record(streamhost, {jid :: any(),
-                     host :: binary(),
+-record(streamhost, {jid :: jid:jid(),
+                     host = <<>> :: binary(),
                      port = 1080 :: non_neg_integer()}).
 -type streamhost() :: #streamhost{}.
 
 -record(sm_resume, {h :: non_neg_integer(),
-                    previd :: binary(),
-                    xmlns :: binary()}).
+                    previd = <<>> :: binary(),
+                    xmlns = <<>> :: binary()}).
 -type sm_resume() :: #sm_resume{}.
 
 -record(carbons_enable, {}).
@@ -77,9 +77,9 @@
 -record(muc_unsubscribe, {}).
 -type muc_unsubscribe() :: #muc_unsubscribe{}.
 
--record(pubsub_unsubscribe, {node :: binary(),
-                             jid :: any(),
-                             subid :: binary()}).
+-record(pubsub_unsubscribe, {node = <<>> :: binary(),
+                             jid :: jid:jid(),
+                             subid = <<>> :: binary()}).
 -type pubsub_unsubscribe() :: #pubsub_unsubscribe{}.
 
 -record(mix_leave, {}).
 -record(ping, {}).
 -type ping() :: #ping{}.
 
--record(delay, {stamp :: any(),
-                from :: any(),
+-record(delay, {stamp :: erlang:timestamp(),
+                from :: jid:jid(),
                 desc = <<>> :: binary()}).
 -type delay() :: #delay{}.
 
 -record(muc_history, {maxchars :: non_neg_integer(),
                       maxstanzas :: non_neg_integer(),
                       seconds :: non_neg_integer(),
-                      since :: any()}).
+                      since :: erlang:timestamp()}).
 -type muc_history() :: #muc_history{}.
 
--record(thumbnail, {uri :: binary(),
+-record(thumbnail, {uri = <<>> :: binary(),
                     'media-type' = <<>> :: binary(),
                     width :: non_neg_integer(),
                     height :: non_neg_integer()}).
 -type thumbnail() :: #thumbnail{}.
 
--record(pubsub_affiliation, {node :: binary(),
+-record(pubsub_affiliation, {node = <<>> :: binary(),
                              type :: 'member' | 'none' | 'outcast' | 'owner' | 'publish-only' | 'publisher'}).
 -type pubsub_affiliation() :: #pubsub_affiliation{}.
 
--record(muc_decline, {reason = <<>> :: 'undefined' | binary(),
-                      from :: any(),
-                      to :: any()}).
+-record(muc_decline, {reason = <<>> :: binary(),
+                      from :: jid:jid(),
+                      to :: jid:jid()}).
 -type muc_decline() :: #muc_decline{}.
 
 -record(sm_a, {h :: non_neg_integer(),
-               xmlns :: binary()}).
+               xmlns = <<>> :: binary()}).
 -type sm_a() :: #sm_a{}.
 
--record(stream_start, {from :: any(),
-                       to :: any(),
+-record(stream_start, {from :: jid:jid(),
+                       to :: jid:jid(),
                        id = <<>> :: binary(),
                        version = <<>> :: binary(),
-                       xmlns :: binary(),
+                       xmlns = <<>> :: binary(),
                        stream_xmlns = <<>> :: binary(),
                        db_xmlns = <<>> :: binary(),
                        lang = <<>> :: binary()}).
 -type stream_start() :: #stream_start{}.
 
--record(muc_subscribe, {nick :: binary(),
+-record(muc_subscribe, {nick = <<>> :: binary(),
                         events = [] :: [binary()]}).
 -type muc_subscribe() :: #muc_subscribe{}.
 
--record(stanza_id, {by :: any(),
-                    id :: binary()}).
+-record(stanza_id, {by :: jid:jid(),
+                    id = <<>> :: binary()}).
 -type stanza_id() :: #stanza_id{}.
 
 -record(starttls_proceed, {}).
 -type starttls_proceed() :: #starttls_proceed{}.
 
--record(client_id, {id :: binary()}).
+-record(client_id, {id = <<>> :: binary()}).
 -type client_id() :: #client_id{}.
 
 -record(sm_resumed, {h :: non_neg_integer(),
-                     previd :: binary(),
-                     xmlns :: binary()}).
+                     previd = <<>> :: binary(),
+                     xmlns = <<>> :: binary()}).
 -type sm_resumed() :: #sm_resumed{}.
 
 -record(forwarded, {delay :: #delay{},
-                    sub_els = [] :: [any()]}).
+                    sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
 -type forwarded() :: #forwarded{}.
 
 -record(sm_enable, {max :: non_neg_integer(),
-                    resume = false :: any(),
-                    xmlns :: binary()}).
+                    resume = false :: boolean(),
+                    xmlns = <<>> :: binary()}).
 -type sm_enable() :: #sm_enable{}.
 
 -record(starttls_failure, {}).
 -type starttls_failure() :: #starttls_failure{}.
 
--record(sasl_challenge, {text :: any()}).
+-record(sasl_challenge, {text = <<>> :: binary()}).
 -type sasl_challenge() :: #sasl_challenge{}.
 
 -record(handshake, {data = <<>> :: binary()}).
 -type handshake() :: #handshake{}.
 
--record(gone, {uri :: binary()}).
+-record(gone, {uri = <<>> :: binary()}).
 -type gone() :: #gone{}.
 
--record(x_conference, {jid :: any(),
+-record(x_conference, {jid :: jid:jid(),
                        password = <<>> :: binary(),
                        reason = <<>> :: binary(),
-                       continue :: any(),
+                       continue :: boolean(),
                        thread = <<>> :: binary()}).
 -type x_conference() :: #x_conference{}.
 
--record(private, {xml_els = [] :: [any()]}).
+-record(private, {xml_els = [] :: [fxml:xmlel()]}).
 -type private() :: #private{}.
 
--record(db_verify, {from :: any(),
-                    to :: any(),
-                    id :: binary(),
+-record(db_verify, {from :: jid:jid(),
+                    to :: jid:jid(),
+                    id = <<>> :: binary(),
                     type :: 'error' | 'invalid' | 'valid',
                     key = <<>> :: binary(),
-                    sub_els = [] :: [any()]}).
+                    sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
 -type db_verify() :: #db_verify{}.
 
--record(nick, {name :: binary()}).
+-record(nick, {name = <<>> :: binary()}).
 -type nick() :: #nick{}.
 
 -record(p1_ack, {}).
 -type p1_ack() :: #p1_ack{}.
 
--record(feature_sm, {xmlns :: binary()}).
+-record(feature_sm, {xmlns = <<>> :: binary()}).
 -type feature_sm() :: #feature_sm{}.
 
--record(pubsub_item, {id :: binary(),
-                      xml_els = [] :: [any()]}).
+-record(pubsub_item, {id = <<>> :: binary(),
+                      xml_els = [] :: [fxml:xmlel()]}).
 -type pubsub_item() :: #pubsub_item{}.
 
--record(pubsub_publish, {node :: binary(),
+-record(pubsub_publish, {node = <<>> :: binary(),
                          items = [] :: [#pubsub_item{}]}).
 -type pubsub_publish() :: #pubsub_publish{}.
 
--record(roster_item, {jid :: any(),
+-record(roster_item, {jid :: jid:jid(),
                       name = <<>> :: binary(),
                       groups = [] :: [binary()],
                       subscription = none :: 'both' | 'from' | 'none' | 'remove' | 'to',
                        ver :: binary()}).
 -type roster_query() :: #roster_query{}.
 
--record(pubsub_event_item, {id :: binary(),
-                            node :: binary(),
-                            publisher :: binary(),
-                            xml_els = [] :: [any()]}).
+-record(pubsub_event_item, {id = <<>> :: binary(),
+                            node = <<>> :: binary(),
+                            publisher = <<>> :: binary(),
+                            xml_els = [] :: [fxml:xmlel()]}).
 -type pubsub_event_item() :: #pubsub_event_item{}.
 
--record(sm_r, {xmlns :: binary()}).
+-record(sm_r, {xmlns = <<>> :: binary()}).
 -type sm_r() :: #sm_r{}.
 
--record(muc_actor, {jid :: any(),
-                    nick :: binary()}).
+-record(muc_actor, {jid :: jid:jid(),
+                    nick = <<>> :: binary()}).
 -type muc_actor() :: #muc_actor{}.
 
 -record(stat_error, {code :: integer(),
                      reason = <<>> :: binary()}).
 -type stat_error() :: #stat_error{}.
 
--record(stat, {name :: binary(),
+-record(stat, {name = <<>> :: binary(),
                units = <<>> :: binary(),
                value = <<>> :: binary(),
                error :: #stat_error{}}).
 -record(addresses, {list = [] :: [#address{}]}).
 -type addresses() :: #addresses{}.
 
--record('see-other-host', {host :: binary()}).
+-record('see-other-host', {host :: binary() | inet:ip_address() | {binary() | inet:ip_address(),non_neg_integer()}}).
 -type 'see-other-host'() :: #'see-other-host'{}.
 
 -record(compress, {methods = [] :: [binary()]}).
                status = <<>> :: binary()}).
 -type last() :: #last{}.
 
--record(redirect, {uri :: binary()}).
+-record(redirect, {uri = <<>> :: binary()}).
 -type redirect() :: #redirect{}.
 
--record(sm_enabled, {id :: binary(),
-                     location :: binary(),
+-record(sm_enabled, {id = <<>> :: binary(),
+                     location = <<>> :: binary(),
                      max :: non_neg_integer(),
-                     resume = false :: any(),
-                     xmlns :: binary()}).
+                     resume = false :: boolean(),
+                     xmlns = <<>> :: binary()}).
 -type sm_enabled() :: #sm_enabled{}.
 
--record(pubsub_event_items, {node :: binary(),
+-record(pubsub_event_items, {node = <<>> :: binary(),
                              retract = [] :: [binary()],
                              items = [] :: [#pubsub_event_item{}]}).
 -type pubsub_event_items() :: #pubsub_event_items{}.
 -record(muc_unique, {name = <<>> :: binary()}).
 -type muc_unique() :: #muc_unique{}.
 
--record(sasl_response, {text :: any()}).
+-record(sasl_response, {text = <<>> :: binary()}).
 -type sasl_response() :: #sasl_response{}.
 
--record(legacy_auth, {username :: 'none' | binary(),
-                      password :: 'none' | binary(),
-                      digest :: 'none' | binary(),
-                      resource :: 'none' | binary()}).
+-record(legacy_auth, {username :: binary(),
+                      password :: binary(),
+                      digest :: binary(),
+                      resource :: binary()}).
 -type legacy_auth() :: #legacy_auth{}.
 
--record(pubsub_subscribe, {node :: binary(),
-                           jid :: any()}).
+-record(pubsub_subscribe, {node = <<>> :: binary(),
+                           jid :: jid:jid()}).
 -type pubsub_subscribe() :: #pubsub_subscribe{}.
 
--record(message, {id :: binary(),
+-record(message, {id = <<>> :: binary(),
                   type = normal :: 'chat' | 'error' | 'groupchat' | 'headline' | 'normal',
-                  lang :: binary(),
-                  from :: any(),
-                  to :: any(),
+                  lang = <<>> :: binary(),
+                  from :: jid:jid(),
+                  to :: jid:jid(),
                   subject = [] :: [#text{}],
                   body = [] :: [#text{}],
                   thread :: binary(),
-                  sub_els = [] :: [any()]}).
+                  sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
 -type message() :: #message{}.
 
--record(sasl_auth, {mechanism :: binary(),
-                    text :: any()}).
+-record(sasl_auth, {mechanism = <<>> :: binary(),
+                    text = <<>> :: binary()}).
 -type sasl_auth() :: #sasl_auth{}.
 
 -record(p1_push, {}).
 -type p1_push() :: #p1_push{}.
 
--record(feature_csi, {xmlns :: binary()}).
+-record(feature_csi, {xmlns = <<>> :: binary()}).
 -type feature_csi() :: #feature_csi{}.
 
--record(disco_item, {jid :: any(),
-                     name :: binary(),
-                     node :: binary()}).
+-record(disco_item, {jid :: jid:jid(),
+                     name = <<>> :: binary(),
+                     node = <<>> :: binary()}).
 -type disco_item() :: #disco_item{}.
 
--record(unblock, {items = [] :: [any()]}).
+-record(unblock, {items = [] :: [jid:jid()]}).
 -type unblock() :: #unblock{}.
 
--record(block, {items = [] :: [any()]}).
+-record(block, {items = [] :: [jid:jid()]}).
 -type block() :: #block{}.
 
 -record(compression, {methods = [] :: [binary()]}).
 -type compression() :: #compression{}.
 
--record(muc_subscriptions, {list = [] :: [any()]}).
+-record(muc_subscriptions, {list = [] :: [jid:jid()]}).
 -type muc_subscriptions() :: #muc_subscriptions{}.
 
--record(pubsub_subscription, {jid :: any(),
-                              node :: binary(),
-                              subid :: binary(),
+-record(pubsub_subscription, {jid :: jid:jid(),
+                              node = <<>> :: binary(),
+                              subid = <<>> :: binary(),
                               type :: 'none' | 'pending' | 'subscribed' | 'unconfigured'}).
 -type pubsub_subscription() :: #pubsub_subscription{}.
 
--record(bob_data, {cid :: binary(),
+-record(bob_data, {cid = <<>> :: binary(),
                    'max-age' :: non_neg_integer(),
-                   type :: binary(),
-                   data = <<>> :: any()}).
+                   type = <<>> :: binary(),
+                   data = <<>> :: binary()}).
 -type bob_data() :: #bob_data{}.
 
 -record(muc_item, {actor :: #muc_actor{},
                    continue :: binary(),
-                   reason = <<>> :: 'undefined' | binary(),
+                   reason = <<>> :: binary(),
                    affiliation :: 'admin' | 'member' | 'none' | 'outcast' | 'owner',
                    role :: 'moderator' | 'none' | 'participant' | 'visitor',
-                   jid :: any(),
-                   nick :: binary()}).
+                   jid :: jid:jid(),
+                   nick = <<>> :: binary()}).
 -type muc_item() :: #muc_item{}.
 
 -record(muc_admin, {items = [] :: [#muc_item{}]}).
 -type muc_admin() :: #muc_admin{}.
 
--record(shim, {headers = [] :: [{binary(),'undefined' | binary()}]}).
+-record(shim, {headers = [] :: [{binary(),binary()}]}).
 -type shim() :: #shim{}.
 
--record(mam_prefs, {xmlns :: binary(),
+-record(mam_prefs, {xmlns = <<>> :: binary(),
                     default :: 'always' | 'never' | 'roster',
-                    always :: [any()],
-                    never :: [any()]}).
+                    always :: [jid:jid()],
+                    never :: [jid:jid()]}).
 -type mam_prefs() :: #mam_prefs{}.
 
--record(caps, {node :: binary(),
-               version :: binary(),
-               hash :: binary(),
-               exts = [] :: any()}).
+-record(caps, {node = <<>> :: binary(),
+               version = <<>> :: binary(),
+               hash = <<>> :: binary(),
+               exts = [] :: binary() | []}).
 -type caps() :: #caps{}.
 
 -record(muc, {history :: #muc_history{},
               password :: binary()}).
 -type muc() :: #muc{}.
 
--record(stream_features, {sub_els = [] :: [any()]}).
+-record(stream_features, {sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
 -type stream_features() :: #stream_features{}.
 
 -record(stats, {list = [] :: [#stat{}],
                 node = <<>> :: binary()}).
 -type stats() :: #stats{}.
 
--record(pubsub_items, {node :: binary(),
+-record(pubsub_items, {node = <<>> :: binary(),
                        max_items :: non_neg_integer(),
-                       subid :: binary(),
+                       subid = <<>> :: binary(),
                        items = [] :: [#pubsub_item{}]}).
 -type pubsub_items() :: #pubsub_items{}.
 
--record(presence, {id :: binary(),
+-record(presence, {id = <<>> :: binary(),
                    type = available :: 'available' | 'error' | 'probe' | 'subscribe' | 'subscribed' | 'unavailable' | 'unsubscribe' | 'unsubscribed',
-                   lang :: binary(),
-                   from :: any(),
-                   to :: any(),
+                   lang = <<>> :: binary(),
+                   from :: jid:jid(),
+                   to :: jid:jid(),
                    show :: 'away' | 'chat' | 'dnd' | 'xa',
                    status = [] :: [#text{}],
                    priority :: integer(),
-                   sub_els = [] :: [any()]}).
+                   sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
 -type presence() :: #presence{}.
 
--record(sic, {ip :: any(),
+-record(sic, {ip :: inet:ip_address(),
               port :: non_neg_integer(),
-              xmlns :: binary()}).
+              xmlns = <<>> :: binary()}).
 -type sic() :: #sic{}.
 
 -record(carbons_sent, {forwarded :: #forwarded{}}).
 -type carbons_sent() :: #carbons_sent{}.
 
--record(mam_archived, {by :: any(),
-                       id :: binary()}).
+-record(mam_archived, {by :: jid:jid(),
+                       id = <<>> :: binary()}).
 -type mam_archived() :: #mam_archived{}.
 
 -record(p1_rebind, {}).
                       userid :: binary()}).
 -type vcard_email() :: #vcard_email{}.
 
--record(db_result, {from :: any(),
-                    to :: any(),
+-record(db_result, {from :: jid:jid(),
+                    to :: jid:jid(),
                     type :: 'error' | 'invalid' | 'valid',
                     key = <<>> :: binary(),
-                    sub_els = [] :: [any()]}).
+                    sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
 -type db_result() :: #db_result{}.
 
 -record(carbons_received, {forwarded :: #forwarded{}}).
 -type carbons_received() :: #carbons_received{}.
 
--record(pubsub_retract, {node :: binary(),
-                         notify = false :: any(),
+-record(pubsub_retract, {node = <<>> :: binary(),
+                         notify = false :: boolean(),
                          items = [] :: [#pubsub_item{}]}).
 -type pubsub_retract() :: #pubsub_retract{}.
 
 -record(upload_slot, {get :: binary(),
                       put :: binary(),
-                      xmlns :: binary()}).
+                      xmlns = <<>> :: binary()}).
 -type upload_slot() :: #upload_slot{}.
 
--record(mix_participant, {jid :: any(),
-                          nick :: binary()}).
+-record(mix_participant, {jid :: jid:jid(),
+                          nick = <<>> :: binary()}).
 -type mix_participant() :: #mix_participant{}.
 
 -record(vcard_geo, {lat :: binary(),
                        text = [] :: [#text{}]}).
 -type sasl_failure() :: #sasl_failure{}.
 
--record(block_list, {items = [] :: [any()]}).
+-record(block_list, {items = [] :: [jid:jid()]}).
 -type block_list() :: #block_list{}.
 
 -record(upload_request, {filename :: binary(),
                          size :: non_neg_integer(),
                          'content-type' = <<>> :: binary(),
-                         xmlns :: binary()}).
+                         xmlns = <<>> :: binary()}).
 -type upload_request() :: #upload_request{}.
 
--record(xdata_option, {label :: binary(),
+-record(xdata_option, {label = <<>> :: binary(),
                        value :: binary()}).
 -type xdata_option() :: #xdata_option{}.
 
--record(xdata_field, {label :: binary(),
+-record(xdata_field, {label = <<>> :: binary(),
                       type :: 'boolean' | 'fixed' | 'hidden' | 'jid-multi' | 'jid-single' | 'list-multi' | 'list-single' | 'text-multi' | 'text-private' | 'text-single',
-                      var :: binary(),
+                      var = <<>> :: binary(),
                       required = false :: boolean(),
                       desc :: binary(),
                       values = [] :: [binary()],
                       options = [] :: [#xdata_option{}],
-                      sub_els = [] :: [any()]}).
+                      sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
 -type xdata_field() :: #xdata_field{}.
 
 -record(version, {name :: binary(),
                   os :: binary()}).
 -type version() :: #version{}.
 
--record(bind, {jid :: any(),
-               resource :: any()}).
+-record(bind, {jid :: jid:jid(),
+               resource :: binary()}).
 -type bind() :: #bind{}.
 
 -record(rosterver_feature, {}).
 -type rosterver_feature() :: #rosterver_feature{}.
 
--record(muc_invite, {reason = <<>> :: 'undefined' | binary(),
-                     from :: any(),
-                     to :: any(),
+-record(muc_invite, {reason = <<>> :: binary(),
+                     from :: jid:jid(),
+                     to :: jid:jid(),
                      continue :: binary()}).
 -type muc_invite() :: #muc_invite{}.
 
 -type carbons_disable() :: #carbons_disable{}.
 
 -record(bytestreams, {hosts = [] :: [#streamhost{}],
-                      used :: any(),
-                      activate :: any(),
-                      dstaddr :: binary(),
+                      used :: jid:jid(),
+                      activate :: jid:jid(),
+                      dstaddr = <<>> :: binary(),
                       mode = tcp :: 'tcp' | 'udp',
-                      sid :: binary()}).
+                      sid = <<>> :: binary()}).
 -type bytestreams() :: #bytestreams{}.
 
 -record(adhoc_actions, {execute :: 'complete' | 'next' | 'prev',
                   max :: non_neg_integer()}).
 -type rsm_set() :: #rsm_set{}.
 
--record(mam_fin, {id :: binary(),
+-record(mam_fin, {id = <<>> :: binary(),
                   rsm :: #rsm_set{},
-                  stable :: any(),
-                  complete :: any()}).
+                  stable :: boolean(),
+                  complete :: boolean()}).
 -type mam_fin() :: #mam_fin{}.
 
--record(disco_items, {node :: binary(),
+-record(disco_items, {node = <<>> :: binary(),
                       items = [] :: [#disco_item{}],
                       rsm :: #rsm_set{}}).
 -type disco_items() :: #disco_items{}.
                     number :: binary()}).
 -type vcard_tel() :: #vcard_tel{}.
 
--record(media_uri, {type :: binary(),
+-record(media_uri, {type = <<>> :: binary(),
                     uri = <<>> :: binary()}).
 -type media_uri() :: #media_uri{}.
 
                 uri = [] :: [#media_uri{}]}).
 -type media() :: #media{}.
 
--record(muc_destroy, {xmlns :: binary(),
-                      jid :: any(),
-                      reason = <<>> :: 'undefined' | binary(),
+-record(muc_destroy, {xmlns = <<>> :: binary(),
+                      jid :: jid:jid(),
+                      reason = <<>> :: binary(),
                       password :: binary()}).
 -type muc_destroy() :: #muc_destroy{}.
 
                      suffix :: binary()}).
 -type vcard_name() :: #vcard_name{}.
 
--record(identity, {category :: binary(),
-                   type :: binary(),
-                   lang :: binary(),
-                   name :: binary()}).
+-record(identity, {category = <<>> :: binary(),
+                   type = <<>> :: binary(),
+                   lang = <<>> :: binary(),
+                   name = <<>> :: binary()}).
 -type identity() :: #identity{}.
 
--record(bookmark_conference, {name :: binary(),
-                              jid :: any(),
-                              autojoin = false :: any(),
+-record(bookmark_conference, {name = <<>> :: binary(),
+                              jid :: jid:jid(),
+                              autojoin = false :: boolean(),
                               nick :: binary(),
                               password :: binary()}).
 -type bookmark_conference() :: #bookmark_conference{}.
 -record(xmpp_session, {optional = false :: boolean()}).
 -type xmpp_session() :: #xmpp_session{}.
 
--record(bookmark_url, {name :: binary(),
-                       url :: binary()}).
+-record(bookmark_url, {name = <<>> :: binary(),
+                       url = <<>> :: binary()}).
 -type bookmark_url() :: #bookmark_url{}.
 
 -record(bookmark_storage, {conference = [] :: [#bookmark_conference{}],
 -type oob_x() :: #oob_x{}.
 
 -record(vcard_sound, {phonetic :: binary(),
-                      binval :: any(),
+                      binval :: binary(),
                       extval :: binary()}).
 -type vcard_sound() :: #vcard_sound{}.
 
 -record(vcard_photo, {type :: binary(),
-                      binval :: any(),
+                      binval :: binary(),
                       extval :: binary()}).
 -type vcard_photo() :: #vcard_photo{}.
 
                     ctry :: binary()}).
 -type vcard_adr() :: #vcard_adr{}.
 
--record(search_item, {jid :: any(),
+-record(search_item, {jid :: jid:jid(),
                       first :: binary(),
                       last :: binary(),
                       nick :: binary(),
 -record(xcaptcha, {xdata :: #xdata{}}).
 -type xcaptcha() :: #xcaptcha{}.
 
--record(adhoc_command, {node :: binary(),
+-record(adhoc_command, {node = <<>> :: binary(),
                         action = execute :: 'cancel' | 'complete' | 'execute' | 'next' | 'prev',
-                        sid :: binary(),
+                        sid = <<>> :: binary(),
                         status :: 'canceled' | 'completed' | 'executing',
-                        lang :: binary(),
+                        lang = <<>> :: binary(),
                         actions :: #adhoc_actions{},
                         notes = [] :: [#adhoc_note{}],
                         xdata :: #xdata{}}).
                  xdata :: #xdata{}}).
 -type search() :: #search{}.
 
--record(mam_query, {xmlns :: binary(),
-                    id :: binary(),
-                    start :: any(),
-                    'end' :: any(),
-                    with :: any(),
+-record(mam_query, {xmlns = <<>> :: binary(),
+                    id = <<>> :: binary(),
+                    start :: erlang:timestamp(),
+                    'end' :: erlang:timestamp(),
+                    with :: jid:jid(),
                     withtext :: binary(),
                     rsm :: #rsm_set{},
                     xdata :: #xdata{}}).
 -type mam_query() :: #mam_query{}.
 
--record(pubsub_options, {node :: binary(),
-                         jid :: any(),
-                         subid :: binary(),
+-record(pubsub_options, {node = <<>> :: binary(),
+                         jid :: jid:jid(),
+                         subid = <<>> :: binary(),
                          xdata :: #xdata{}}).
 -type pubsub_options() :: #pubsub_options{}.
 
--record(pubsub, {subscriptions :: {'none' | binary(),[#pubsub_subscription{}]},
+-record(pubsub, {subscriptions :: {binary(),[#pubsub_subscription{}]},
                  affiliations :: [#pubsub_affiliation{}],
                  publish :: #pubsub_publish{},
                  subscribe :: #pubsub_subscribe{},
 -record(register, {registered = false :: boolean(),
                    remove = false :: boolean(),
                    instructions :: binary(),
-                   username :: 'none' | binary(),
-                   nick :: 'none' | binary(),
-                   password :: 'none' | binary(),
-                   name :: 'none' | binary(),
-                   first :: 'none' | binary(),
-                   last :: 'none' | binary(),
-                   email :: 'none' | binary(),
-                   address :: 'none' | binary(),
-                   city :: 'none' | binary(),
-                   state :: 'none' | binary(),
-                   zip :: 'none' | binary(),
-                   phone :: 'none' | binary(),
-                   url :: 'none' | binary(),
-                   date :: 'none' | binary(),
-                   misc :: 'none' | binary(),
-                   text :: 'none' | binary(),
-                   key :: 'none' | binary(),
+                   username :: binary(),
+                   nick :: binary(),
+                   password :: binary(),
+                   name :: binary(),
+                   first :: binary(),
+                   last :: binary(),
+                   email :: binary(),
+                   address :: binary(),
+                   city :: binary(),
+                   state :: binary(),
+                   zip :: binary(),
+                   phone :: binary(),
+                   url :: binary(),
+                   date :: binary(),
+                   misc :: binary(),
+                   text :: binary(),
+                   key :: binary(),
                    xdata :: #xdata{},
-                   sub_els = [] :: [any()]}).
+                   sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
 -type register() :: #register{}.
 
--record(disco_info, {node :: binary(),
+-record(disco_info, {node = <<>> :: binary(),
                      identities = [] :: [#identity{}],
                      features = [] :: [binary()],
                      xdata = [] :: [#xdata{}]}).
 -type disco_info() :: #disco_info{}.
 
--record(offline_item, {node :: binary(),
+-record(offline_item, {node = <<>> :: binary(),
                        action :: 'remove' | 'view'}).
 -type offline_item() :: #offline_item{}.
 
 
 -record(sm_failed, {reason :: atom() | #gone{} | #redirect{},
                     h :: non_neg_integer(),
-                    xmlns :: binary()}).
+                    xmlns = <<>> :: binary()}).
 -type sm_failed() :: #sm_failed{}.
 
 -record(error, {type :: 'auth' | 'cancel' | 'continue' | 'modify' | 'wait',
                 code :: non_neg_integer(),
-                by :: binary(),
+                by = <<>> :: binary(),
                 reason :: atom() | #gone{} | #redirect{},
                 text :: #text{},
-                sub_els = [] :: [any()]}).
+                sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
 -type error() :: #error{}.
 
--record(mix_join, {jid :: any(),
+-record(mix_join, {jid :: jid:jid(),
                    subscribe = [] :: [binary()]}).
 -type mix_join() :: #mix_join{}.
 
 -record(privacy_item, {order :: non_neg_integer(),
                        action :: 'allow' | 'deny',
                        type :: 'group' | 'jid' | 'subscription',
-                       value :: binary(),
+                       value = <<>> :: binary(),
                        message = false :: boolean(),
                        iq = false :: boolean(),
                        presence_in = false :: boolean(),
                        presence_out = false :: boolean()}).
 -type privacy_item() :: #privacy_item{}.
 
--record(privacy_list, {name :: binary(),
+-record(privacy_list, {name = <<>> :: binary(),
                        items = [] :: [#privacy_item{}]}).
 -type privacy_list() :: #privacy_list{}.
 
 -type stream_error() :: #stream_error{}.
 
 -record(vcard_logo, {type :: binary(),
-                     binval :: any(),
+                     binval :: binary(),
                      extval :: binary()}).
 -type vcard_logo() :: #vcard_logo{}.
 
                      desc :: binary()}).
 -type vcard_temp() :: #vcard_temp{}.
 
--record(time, {tzo :: any(),
-               utc :: any()}).
+-record(time, {tzo :: {integer(),integer()},
+               utc :: erlang:timestamp()}).
 -type time() :: #time{}.
 
 -type xmpp_element() :: muc_admin() |
index 1ae9a7c29cda95457bc416b60391d93befd8631c..b13e7fe0098b70f15468eb1481f670ae3c03d2c1 100644 (file)
@@ -519,10 +519,10 @@ wait_for_auth(Pkt, StateData) when ?IS_STREAM_MGMT_PACKET(Pkt) ->
 wait_for_auth(#iq{type = get,
                  sub_els = [#legacy_auth{username = U}]} = IQ, StateData) ->
     Username = case U of
-                  undefined -> none;
+                  undefined -> <<"">>;
                   _ -> U
               end,
-    Auth = #legacy_auth{username = Username, password = none, resource = none},
+    Auth = #legacy_auth{username = Username, password = <<>>, resource = <<>>},
     Res = case ejabberd_auth:plain_password_required(StateData#state.server) of
              false ->
                  xmpp:make_iq_result(IQ, Auth#legacy_auth{digest = none});
index 9c8238900386c74f82eb111f71581418485d0aef..22bde2586f3aa241b0fdd52853f0ff70908fa316 100644 (file)
@@ -91,7 +91,7 @@ stop(Host) ->
 %-------------------------------------------------------------------------
 
 get_local_commands(Acc, _From,
-                  #jid{server = Server, lserver = LServer} = _To, undefined,
+                  #jid{server = Server, lserver = LServer} = _To, <<"">>,
                   Lang) ->
     Display = gen_mod:get_module_opt(LServer, ?MODULE,
                                     report_commands_node,
@@ -122,7 +122,7 @@ get_local_commands(Acc, _From, _To, _Node, _Lang) ->
 %-------------------------------------------------------------------------
 
 get_sm_commands(Acc, _From,
-               #jid{lserver = LServer} = To, undefined, Lang) ->
+               #jid{lserver = LServer} = To, <<"">>, Lang) ->
     Display = gen_mod:get_module_opt(LServer, ?MODULE,
                                     report_commands_node,
                                      fun(B) when is_boolean(B) -> B end,
index 4b7498447e133f1829a7c1cdedc15096c0376174..1a42a460bdf9f52a77bd3c9d7fe2c5c7207aee68 100644 (file)
@@ -56,7 +56,6 @@
 -define(NS_ADMINL(Sub), [<<"http:">>, <<"jabber.org">>, <<"protocol">>,
                          <<"admin">>, <<Sub>>]).
 
-tokenize(undefined) -> [];
 tokenize(Node) -> str:tokens(Node, <<"/#">>).
 
 start(Host, Opts) ->
@@ -280,7 +279,7 @@ disco_features(Acc, From, #jid{lserver = LServer} = _To, Node, Lang) ->
                {result, Items}
        end).
 
-disco_items(Acc, From, #jid{lserver = LServer, server = Server} = _To, undefined, Lang) ->
+disco_items(Acc, From, #jid{lserver = LServer, server = Server} = _To, <<"">>, Lang) ->
     case gen_mod:is_loaded(LServer, mod_adhoc) of
        false ->
            Acc;
index 743b78efd8abeb79d2b8f1a599d84f08df20ccf1..bc3080871c1038d9b7173e2506c4b6e832f4852e 100644 (file)
@@ -135,7 +135,7 @@ list_to_blocklist_jids([_ | Items], JIDs) ->
     list_to_blocklist_jids(Items, JIDs).
 
 -spec process_blocklist_block(binary(), binary(), [ljid()],
-                             undefined | binary()) ->
+                             binary()) ->
                                     {error, error()} |
                                     {result, undefined, userlist()}.
 process_blocklist_block(LUser, LServer, JIDs, Lang) ->
@@ -170,7 +170,7 @@ process_blocklist_block(LUser, LServer, JIDs, Lang) ->
            {error, xmpp:err_internal_server_error(<<"Database failure">>, Lang)}
     end.
 
--spec process_blocklist_unblock_all(binary(), binary(), undefined | binary()) ->
+-spec process_blocklist_unblock_all(binary(), binary(), binary()) ->
                                           {error, error()} |
                                           {result, undefined} |
                                           {result, undefined, userlist()}.
@@ -194,8 +194,7 @@ process_blocklist_unblock_all(LUser, LServer, Lang) ->
            {error, xmpp:err_internal_server_error(<<"Database failure">>, Lang)}
     end.
 
--spec process_blocklist_unblock(binary(), binary(), [ljid()],
-                               undefined | binary()) ->
+-spec process_blocklist_unblock(binary(), binary(), [ljid()], binary()) ->
                                       {error, error()} |
                                       {result, undefined} |
                                       {result, undefined, userlist()}.
@@ -243,7 +242,7 @@ broadcast_blocklist_event(LUser, LServer, Event) ->
     ejabberd_sm:route(JID, JID,
                       {broadcast, {blocking, Event}}).
 
--spec process_blocklist_get(binary(), binary(), undefined | binary()) ->
+-spec process_blocklist_get(binary(), binary(), binary()) ->
                                   {error, error()} | {result, block_list()}.
 process_blocklist_get(LUser, LServer, Lang) ->
     Mod = db_mod(LServer),
index 7c7ebf7b36137ea58c1a419a509e138f8dba9d7d..d5033ffd8b9d57b153eadc28cc72ed67407e6754 100644 (file)
@@ -35,8 +35,6 @@
 
 -behaviour(gen_mod).
 
--compile(export_all).
-
 -export([read_caps/1, caps_stream_features/2,
         disco_features/5, disco_identity/5, disco_info/5,
         get_features/2, export/1, import_info/0, import/5,
@@ -162,38 +160,38 @@ caps_stream_features(Acc, MyHost) ->
 
 -spec disco_features({error, error()} | {result, [binary()]} | empty,
                     jid(), jid(),
-                    undefined | binary(), undefined | binary()) ->
+                    binary(), binary()) ->
                            {error, error()} | {result, [binary()]}.
 disco_features(Acc, From, To, Node, Lang) ->
     case is_valid_node(Node) of
         true ->
             ejabberd_hooks:run_fold(disco_local_features,
                                     To#jid.lserver, empty,
-                                    [From, To, undefined, Lang]);
+                                    [From, To, <<"">>, Lang]);
         false ->
             Acc
     end.
 
 -spec disco_identity([identity()], jid(), jid(),
-                    undefined | binary(), undefined | binary()) ->
+                    binary(), binary()) ->
                            [identity()].
 disco_identity(Acc, From, To, Node, Lang) ->
     case is_valid_node(Node) of
         true ->
             ejabberd_hooks:run_fold(disco_local_identity,
                                     To#jid.lserver, [],
-                                    [From, To, undefined, Lang]);
+                                    [From, To, <<"">>, Lang]);
         false ->
             Acc
     end.
 
 -spec disco_info([xdata()], binary(), module(),
-                undefined | binary(), undefined | binary()) -> [xdata()].
+                binary(), binary()) -> [xdata()].
 disco_info(Acc, Host, Module, Node, Lang) ->
     case is_valid_node(Node) of
         true ->
             ejabberd_hooks:run_fold(disco_info, Host, [],
-                                    [Host, Module, undefined, Lang]);
+                                    [Host, Module, <<"">>, Lang]);
         false ->
             Acc
     end.
@@ -485,7 +483,7 @@ concat_info(#disco_info{xdata = Xs}) ->
       [concat_xdata_fields(Fs) || #xdata{type = result, fields = Fs} <- Xs]).
 
 concat_xdata_fields(Fields) ->
-    Form = case lists:keysearch(<<"FORM_TYPE">>, #xdata_field.var, Fields) of
+    Form = case lists:keyfind(<<"FORM_TYPE">>, #xdata_field.var, Fields) of
               #xdata_field{values = Values} -> Values;
               false -> []
           end,
@@ -509,9 +507,7 @@ gb_trees_fold_iter(F, Acc, Iter) ->
 now_ts() ->
     p1_time_compat:system_time(seconds).
 
--spec is_valid_node(undefined | binary()) -> boolean().
-is_valid_node(undefined) ->
-    false;
+-spec is_valid_node(binary()) -> boolean().
 is_valid_node(Node) ->
     case str:tokens(Node, <<"#">>) of
         [?EJABBERD_URI|_] ->
index 342a1523257cedff2957991fe1b23219d968d339..07a1c73337cdf8c64f0d8419f7403c42d3b9c013 100644 (file)
@@ -121,7 +121,6 @@ depends(_Host, _Opts) ->
        [<<"http:">>, <<"jabber.org">>, <<"protocol">>,
         <<"admin">>, Sub]).
 
-tokenize(undefined) -> [];
 tokenize(Node) -> str:tokens(Node, <<"/#">>).
 
 get_sm_identity(Acc, _From, _To, Node, Lang) ->
@@ -300,7 +299,7 @@ get_sm_items(Acc, From,
                    empty -> []
                  end,
          case {acl:match_rule(LServer, configure, From), Node} of
-           {allow, undefined} ->
+           {allow, <<"">>} ->
                Nodes = [?NODEJID(To, <<"Configuration">>,
                                  <<"config">>),
                         ?NODEJID(To, <<"User Management">>, <<"user">>)],
@@ -399,7 +398,7 @@ get_permission_level(JID) ->
        end).
 
 get_local_items(Acc, From, #jid{lserver = LServer} = To,
-               undefined, Lang) ->
+               <<"">>, Lang) ->
     case gen_mod:is_loaded(LServer, mod_adhoc) of
       false -> Acc;
       _ ->
index 0d3f242a00949f9f26fab900a8493581dfffcd0a..e78b8f72f5f054acedb677c0f01d06a3cd425a0c 100644 (file)
@@ -190,9 +190,8 @@ process_local_iq_info(#iq{type = get, lang = Lang,
     end.
 
 -spec get_local_identity([identity()], jid(), jid(),
-                        undefined | binary(), undefined | binary()) ->
-                               [identity()].
-get_local_identity(Acc, _From, _To, undefined, _Lang) ->
+                        binary(), binary()) -> [identity()].
+get_local_identity(Acc, _From, _To, <<"">>, _Lang) ->
     Acc ++ [#identity{category = <<"server">>,
                      type = <<"im">>,
                      name = <<"ejabberd">>}];
@@ -200,13 +199,12 @@ get_local_identity(Acc, _From, _To, _Node, _Lang) ->
     Acc.
 
 -spec get_local_features({error, error()} | {result, [binary()]} | empty,
-                        jid(), jid(),
-                        undefined | binary(), undefined | binary()) ->
+                        jid(), jid(), binary(), binary()) ->
                                {error, error()} | {result, [binary()]}.
 get_local_features({error, _Error} = Acc, _From, _To,
                   _Node, _Lang) ->
     Acc;
-get_local_features(Acc, _From, To, undefined, _Lang) ->
+get_local_features(Acc, _From, To, <<"">>, _Lang) ->
     Feats = case Acc of
                {result, Features} -> Features;
                empty -> []
@@ -226,12 +224,12 @@ get_local_features(Acc, _From, _To, _Node, Lang) ->
 
 -spec get_local_services({error, error()} | {result, [disco_item()]} | empty,
                         jid(), jid(),
-                        undefined | binary(), undefined | binary()) ->
+                        binary(), binary()) ->
                                {error, error()} | {result, [disco_item()]}.
 get_local_services({error, _Error} = Acc, _From, _To,
                   _Node, _Lang) ->
     Acc;
-get_local_services(Acc, _From, To, undefined, _Lang) ->
+get_local_services(Acc, _From, To, <<"">>, _Lang) ->
     Items = case Acc of
              {result, Its} -> Its;
              empty -> []
@@ -300,13 +298,13 @@ process_sm_iq_items(#iq{type = get, lang = Lang,
 
 -spec get_sm_items({error, error()} | {result, [disco_item()]} | empty,
                   jid(), jid(),
-                  undefined | binary(), undefined | binary()) ->
+                  binary(), binary()) ->
                          {error, error()} | {result, [disco_item()]}.
 get_sm_items({error, _Error} = Acc, _From, _To, _Node,
             _Lang) ->
     Acc;
 get_sm_items(Acc, From,
-            #jid{user = User, server = Server} = To, undefined, _Lang) ->
+            #jid{user = User, server = Server} = To, <<"">>, _Lang) ->
     Items = case Acc of
              {result, Its} -> Its;
              empty -> []
@@ -375,8 +373,7 @@ process_sm_iq_info(#iq{type = get, lang = Lang,
     end.
 
 -spec get_sm_identity([identity()], jid(), jid(),
-                     undefined | binary(), undefined | binary()) ->
-                            [identity()].
+                     binary(), binary()) -> [identity()].
 get_sm_identity(Acc, _From,
                #jid{luser = LUser, lserver = LServer}, _Node, _Lang) ->
     Acc ++
@@ -387,8 +384,7 @@ get_sm_identity(Acc, _From,
       end.
 
 -spec get_sm_features({error, error()} | {result, [binary()]} | empty,
-                     jid(), jid(),
-                     undefined | binary(), undefined | binary()) ->
+                     jid(), jid(), binary(), binary()) ->
                             {error, error()} | {result, [binary()]}.
 get_sm_features(empty, From, To, _Node, Lang) ->
     #jid{luser = LFrom, lserver = LSFrom} = From,
@@ -428,10 +424,8 @@ transform_module_options(Opts) ->
 
 %%% Support for: XEP-0157 Contact Addresses for XMPP Services
 
--spec get_info([xdata()], binary(), module(),
-              undefined | binary(), undefined | binary()) ->
-                     [xdata()].
-get_info(_A, Host, Mod, Node, _Lang) when Node == undefined ->
+-spec get_info([xdata()], binary(), module(), binary(), binary()) -> [xdata()].
+get_info(_A, Host, Mod, Node, _Lang) when Node == <<"">> ->
     Module = case Mod of
               undefined -> ?MODULE;
               _ -> Mod
index 1960c988d46eaf70df4e8aad74a1b1d4b3fe8edf..3c094ef9c0d7ac2fa3a7458e6dec651d43db47f9 100644 (file)
@@ -257,7 +257,7 @@ process_disco_items(#iq{type = set, lang = Lang} = IQ) ->
 process_disco_items(#iq{type = get, lang = Lang, to = To,
                        sub_els = [#disco_items{node = Node}]} = IQ) ->
     case Node of
-       undefined ->
+       <<"">> ->
            xmpp:make_iq_result(IQ, #disco_items{});
        <<"join">> ->
            xmpp:make_iq_result(IQ, #disco_items{});
@@ -401,7 +401,7 @@ sm_route(Host, ServerHost, From, To, Packet) ->
 closed_connection(Host, From, Server) ->
     ets:delete(irc_connection, {From, Server, Host}).
 
-iq_disco(_ServerHost, undefined, Lang) ->
+iq_disco(_ServerHost, <<"">>, Lang) ->
     #disco_info{
        identities = [#identity{category = <<"conference">>,
                               type = <<"irc">>,
index 0aaf484c5479594a57ecdf87a1d22d16a036a8b7..b83c423c74c20e412fc9795858a5ca557ec4ffa9 100644 (file)
@@ -363,7 +363,7 @@ disco_sm_features(empty, From, To, Node, Lang) ->
     disco_sm_features({result, []}, From, To, Node, Lang);
 disco_sm_features({result, OtherFeatures},
                  #jid{luser = U, lserver = S},
-                 #jid{luser = U, lserver = S}, undefined, _Lang) ->
+                 #jid{luser = U, lserver = S}, <<"">>, _Lang) ->
     {result, [?NS_MAM_TMP, ?NS_MAM_0, ?NS_MAM_1 | OtherFeatures]};
 disco_sm_features(Acc, _From, _To, _Node, _Lang) ->
     Acc.
index 294456ee21baf6030180773adb305e772b02157f..3eca79fec359d1b0114607ff4e6aa4b16f8637de 100644 (file)
@@ -450,10 +450,10 @@ process_disco_info(#iq{type = set, lang = Lang} = IQ) ->
     Txt = <<"Value 'set' of 'type' attribute is not allowed">>,
     xmpp:make_error(IQ, xmpp:err_not_allowed(Txt, Lang));
 process_disco_info(#iq{type = get, to = To, lang = Lang,
-                      sub_els = [#disco_info{node = undefined}]} = IQ) ->
+                      sub_els = [#disco_info{node = <<"">>}]} = IQ) ->
     ServerHost = ejabberd_router:host_of_route(To#jid.lserver),
     X = ejabberd_hooks:run_fold(disco_info, ServerHost, [],
-                               [ServerHost, ?MODULE, undefined, Lang]),
+                               [ServerHost, ?MODULE, <<"">>, Lang]),
     MAMFeatures = case gen_mod:is_loaded(ServerHost, mod_mam) of
                      true -> [?NS_MAM_TMP, ?NS_MAM_0, ?NS_MAM_1];
                      false -> []
@@ -562,7 +562,7 @@ register_room(Host, Room, Pid) ->
     end,
     mnesia:transaction(F).
 
-iq_disco_items(Host, From, Lang, undefined, undefined) ->
+iq_disco_items(Host, From, Lang, <<"">>, undefined) ->
     Rooms = get_vh_rooms(Host),
     case erlang:length(Rooms) < ?MAX_ROOMS_DISCOITEMS of
        true ->
index 68064fcb7453f466a6f94ea2bbae6c0b1ecb5d06..5814ca832109196b0701349e36d5aa904e455ecf 100644 (file)
@@ -277,7 +277,7 @@ normal_state({route, From, <<"">>,
                               process_iq_admin(From, IQ, StateData);
                           ?NS_MUC_OWNER ->
                               process_iq_owner(From, IQ, StateData);
-                          ?NS_DISCO_INFO when SubEl#disco_info.node == undefined ->
+                          ?NS_DISCO_INFO when SubEl#disco_info.node == <<>> ->
                               process_iq_disco_info(From, IQ, StateData);
                           ?NS_DISCO_INFO ->
                               Txt = <<"Disco info is not available for this node">>,
@@ -2146,11 +2146,7 @@ send_new_presence1(NJID, Reason, IsInitialPresence, StateData, OldStateData) ->
                          true -> Item0#muc_item{jid = RealJID};
                          false -> Item0
                      end,
-             Item = if is_binary(Reason), Reason /= <<"">> ->
-                            Item1#muc_item{reason = Reason};
-                       true ->
-                            Item1
-                    end,
+             Item = Item1#muc_item{reason = Reason},
              StatusCodes = status_codes(IsInitialPresence, NJID, Info,
                                         StateData),
              Pres = if Presence == undefined -> #presence{};
@@ -2526,11 +2522,7 @@ items_with_affiliation(SAffiliation, StateData) ->
     lists:map(
       fun({JID, {Affiliation, Reason}}) ->
              #muc_item{affiliation = Affiliation, jid = JID,
-                       reason = if is_binary(Reason), Reason /= <<"">> ->
-                                        Reason;
-                                   true ->
-                                        undefined
-                                end};
+                       reason = Reason};
         ({JID, Affiliation}) ->
              #muc_item{affiliation = Affiliation, jid = JID}
       end,
@@ -2563,7 +2555,7 @@ search_affiliation(Affiliation, StateData) ->
                 end,
                 (?DICT):to_list(StateData#state.affiliations)).
 
--spec process_admin_items_set(jid(), [muc_item()], binary() | undefined,
+-spec process_admin_items_set(jid(), [muc_item()], binary(),
                              #state{}) -> {result, undefined, #state{}} |
                                           {error, error()}.
 process_admin_items_set(UJID, Items, Lang, StateData) ->
@@ -2666,13 +2658,13 @@ find_changed_items(_UJID, _UAffiliation, _URole,
     Txt = <<"Neither 'role' nor 'affiliation' attribute found">>,
     throw({error, xmpp:err_bad_request(Txt, Lang)});
 find_changed_items(UJID, UAffiliation, URole,
-                  [#muc_item{jid = J, nick = Nick, reason = Reason0,
+                  [#muc_item{jid = J, nick = Nick, reason = Reason,
                              role = Role, affiliation = Affiliation}|Items],
                   Lang, StateData, Res) ->
     [JID | _] = JIDs = 
        if J /= undefined ->
                [J];
-          Nick /= undefined ->
+          Nick /= <<"">> ->
                case find_jids_by_nick(Nick, StateData) of
                    [] ->
                        ErrText = iolist_to_binary(
@@ -2717,9 +2709,6 @@ find_changed_items(UJID, UAffiliation, URole,
                               Items, Lang, StateData,
                               Res);
        true ->
-           Reason = if is_binary(Reason0) -> Reason0;
-                       true -> <<"">>
-                    end,
            MoreRes = [{jid:remove_resource(Jidx),
                        RoleOrAff, RoleOrAffValue, Reason}
                       || Jidx <- JIDs],
@@ -2914,11 +2903,7 @@ send_kickban_presence1(MJID, UJID, Reason, Code, Affiliation,
                          true -> Item0#muc_item{jid = RealJID};
                          false -> Item0
                      end,
-             Item2 = if is_binary(Reason), Reason /= <<"">> ->
-                             Item1#muc_item{reason = Reason};
-                        true ->
-                             Item1
-                     end,
+             Item2 = Item1#muc_item{reason = Reason},
              Item = case ActorNick of
                         <<"">> -> Item2;
                         _ -> Item2#muc_item{actor = #muc_actor{nick = ActorNick}}
index 66edb6a7cf55f341f476a3cef908661177ab5282..4d597a52ca0ac19e519b78f627ca3caa5b6d2995 100644 (file)
@@ -250,7 +250,7 @@ receive_all(US, Msgs, DBType) ->
                end
     end.
 
-get_sm_features(Acc, _From, _To, undefined, _Lang) ->
+get_sm_features(Acc, _From, _To, <<"">>, _Lang) ->
     Feats = case Acc of
                {result, I} -> I;
                _ -> []
@@ -297,8 +297,7 @@ get_sm_items(_Acc, #jid{luser = U, lserver = S, lresource = R} = JID,
 get_sm_items(Acc, _From, _To, _Node, _Lang) ->
     Acc.
 
--spec get_info([xdata()], jid(), jid(),
-              undefined | binary(), undefined | binary()) -> [xdata()].
+-spec get_info([xdata()], jid(), jid(), binary(), binary()) -> [xdata()].
 get_info(_Acc, #jid{luser = U, lserver = S, lresource = R},
         #jid{luser = U, lserver = S}, ?NS_FLEX_OFFLINE, _Lang) ->
     N = jlib:integer_to_binary(count_offline_messages(U, S)),
index da947ace15d52bfd19ba42739ccb5edd6157cc3d..1da040d432421c4662431418f51e933ed4b8be57 100644 (file)
@@ -116,7 +116,7 @@ process_iq_get(_, #iq{from = From, lang = Lang,
            {error, xmpp:err_bad_request(Txt, Lang)}
     end.
 
--spec process_lists_get(binary(), binary(), binary(), undefined | binary()) ->
+-spec process_lists_get(binary(), binary(), binary(), binary()) ->
                               {error, error()} | {result, privacy_query()}.
 process_lists_get(LUser, LServer, Active, Lang) ->
     Mod = gen_mod:db_mod(LServer, ?MODULE),
@@ -134,7 +134,7 @@ process_lists_get(LUser, LServer, Active, Lang) ->
                                     || ListName <- ListNames]}}
     end.
 
--spec process_list_get(binary(), binary(), binary(), undefined | binary()) ->
+-spec process_list_get(binary(), binary(), binary(), binary()) ->
                              {error, error()} | {result, privacy_query()}.
 process_list_get(LUser, LServer, Name, Lang) ->
     Mod = gen_mod:db_mod(LServer, ?MODULE),
@@ -183,7 +183,7 @@ encode_list_item(#listitem{action = Action,
                              presence_out = MatchPresenceOut}
     end.
 
--spec encode_value(listitem_type(), listitem_value()) -> undefined | binary().
+-spec encode_value(listitem_type(), listitem_value()) -> binary().
 encode_value(Type, Val) ->
     case Type of
        jid -> jid:to_string(Val);
@@ -195,7 +195,7 @@ encode_value(Type, Val) ->
                from -> <<"from">>;
                none -> <<"none">>
            end;
-       none -> undefined
+       none -> <<"">>
     end.
 
 -spec decode_value(jid | subscription | group | undefined, binary()) ->
@@ -239,8 +239,7 @@ process_iq_set(_, #iq{from = From, lang = Lang,
     end.
 
 -spec process_default_set(binary(), binary(), none | binary(),
-                         undefined | binary()) -> {error, error()} |
-                                                  {result, undefined}.                  
+                         binary()) -> {error, error()} | {result, undefined}.
 process_default_set(LUser, LServer, Value, Lang) ->
     Mod = gen_mod:db_mod(LServer, ?MODULE),
     case Mod:process_default_set(LUser, LServer, Value) of
@@ -258,8 +257,7 @@ process_default_set(LUser, LServer, Value, Lang) ->
            {error, xmpp:err_internal_server_error()}
     end.
 
--spec process_active_set(binary(), binary(), none | binary(),
-                        undefined | binary()) ->
+-spec process_active_set(binary(), binary(), none | binary(), binary()) ->
                                {error, error()} |
                                {result, undefined, userlist()}.
 process_active_set(_LUser, _LServer, none, _Lang) ->
@@ -282,8 +280,7 @@ set_privacy_list(#privacy{us = {_, LServer}} = Privacy) ->
     Mod:set_privacy_list(Privacy).
 
 -spec process_lists_set(binary(), binary(), binary(), [privacy_item()],
-                       undefined | binary()) -> {error, error()} |
-                                                {result, undefined}.
+                       binary()) -> {error, error()} | {result, undefined}.
 process_lists_set(LUser, LServer, Name, [], Lang) ->
     Mod = gen_mod:db_mod(LServer, ?MODULE),
     case Mod:remove_privacy_list(LUser, LServer, Name) of
index e90ff21bdadf0a0ccbeea63851e31773b5cc0a76..789771d7dbcc4641d9042380bb68a31565ce0e7f 100644 (file)
@@ -156,11 +156,6 @@ process_bytestreams(#iq{type = get, from = JID, to = To, lang = Lang} = IQ) ->
        deny ->
            xmpp:make_error(IQ, xmpp:err_forbidden(<<"Denied by ACL">>, Lang))
     end;
-process_bytestreams(#iq{type = set, lang = Lang,
-                       sub_els = [#bytestreams{sid = undefined}]} = IQ) ->
-    Why = {missing_attr, <<"sid">>, <<"query">>, ?NS_BYTESTREAMS},
-    Txt = xmpp:format_error(Why),
-    xmpp:make_error(IQ, xmpp:err_bad_request(Txt, Lang));
 process_bytestreams(#iq{type = set, lang = Lang,
                        sub_els = [#bytestreams{sid = SID}]} = IQ)
   when SID == <<"">> orelse length(SID) > 128 ->
index 231c42dc02f18c48e501964291c52f411a6b25ab..4653d6e2cdd6139595eb9eee68016894373ebe73 100644 (file)
@@ -151,15 +151,14 @@ do_route(_, _, _) ->
     ok.
 
 -spec get_sm_features({error, error()} | empty | {result, [binary()]},
-                     jid(), jid(),
-                     undefined | binary(), undefined | binary()) ->
+                     jid(), jid(), binary(), binary()) ->
                             {error, error()} | empty | {result, [binary()]}.
 get_sm_features({error, _Error} = Acc, _From, _To,
                _Node, _Lang) ->
     Acc;
 get_sm_features(Acc, _From, _To, Node, _Lang) ->
     case Node of
-      undefined ->
+      <<"">> ->
          case Acc of
            {result, Features} ->
                {result, [?NS_DISCO_INFO, ?NS_VCARD | Features]};
@@ -232,10 +231,9 @@ process_search(#iq{type = set, lang = Lang} = IQ) ->
     xmpp:make_error(IQ, xmpp:err_bad_request(Txt, Lang)).
 
 -spec disco_items({error, error()} | {result, [disco_item()]} | empty,
-                 jid(), jid(),
-                 undefined | binary(), undefined | binary()) ->
+                 jid(), jid(), binary(), binary()) ->
                         {error, error()} | {result, [disco_item()]}.
-disco_items(empty, _From, _To, undefined, _Lang) ->
+disco_items(empty, _From, _To, <<"">>, _Lang) ->
     {result, []};
 disco_items(empty, _From, _To, _Node, Lang) ->
     {error, xmpp:err_item_not_found(<<"No services available">>, Lang)};
@@ -243,12 +241,11 @@ disco_items(Acc, _From, _To, _Node, _Lang) ->
     Acc.
 
 -spec disco_features({error, error()} | {result, [binary()]} | empty,
-                    jid(), jid(),
-                    undefined | binary(), undefined | binary()) ->
+                    jid(), jid(), binary(), binary()) ->
                            {error, error()} | {result, [binary()]}.
 disco_features({error, _Error} = Acc, _From, _To, _Node, _Lang) ->
     Acc;
-disco_features(Acc, _From, _To, undefined, _Lang) ->
+disco_features(Acc, _From, _To, <<"">>, _Lang) ->
     Features = case Acc of
                   {result, Fs} -> Fs;
                   empty -> []
@@ -261,9 +258,9 @@ disco_features(empty, _From, _To, _Node, Lang) ->
 disco_features(Acc, _From, _To, _Node, _Lang) ->
     Acc.
 
--spec disco_identity([identity()], jid(), jid(), undefined | binary(),
-                    undefined | binary()) -> [identity()].
-disco_identity(Acc, _From, _To, undefined, Lang) ->
+-spec disco_identity([identity()], jid(), jid(),
+                    binary(),  binary()) -> [identity()].
+disco_identity(Acc, _From, _To, <<"">>, Lang) ->
     [#identity{category = <<"directory">>,
               type = <<"user">>,
               name = translate:translate(Lang, <<"vCard User Search">>)}|Acc];
@@ -362,7 +359,7 @@ string2lower(String) ->
       error -> str:to_lower(String)
     end.
 
--spec mk_tfield(binary(), binary(), undefined | binary()) -> xdata_field().
+-spec mk_tfield(binary(), binary(), binary()) -> xdata_field().
 mk_tfield(Label, Var, Lang) ->
     #xdata_field{type = 'text-single',
                 label = translate:translate(Lang, Label),
@@ -372,7 +369,7 @@ mk_tfield(Label, Var, Lang) ->
 mk_field(Var, Val) ->
     #xdata_field{var = Var, values = [Val]}.
 
--spec mk_search_form(jid(), binary(), undefined | binary()) -> search().
+-spec mk_search_form(jid(), binary(), binary()) -> search().
 mk_search_form(JID, ServerHost, Lang) ->
     Title = <<(translate:translate(Lang, <<"Search users in ">>))/binary,
              (jid:to_string(JID))/binary>>,
@@ -393,7 +390,7 @@ mk_search_form(JID, ServerHost, Lang) ->
                  Lang, <<"You need an x:data capable client to search">>),
            xdata = X}.
 
--spec search_result(undefined | binary(), jid(), binary(), [xdata_field()]) -> xdata().
+-spec search_result(binary(), jid(), binary(), [xdata_field()]) -> xdata().
 search_result(Lang, JID, ServerHost, XFields) ->
     Mod = gen_mod:db_mod(ServerHost, ?MODULE),
     Reported = [mk_tfield(Label, Var, Lang) ||
index c8a924585ed6fc0b37e3cd8d2224fd73b4a94519..e9f61ab8c0375c64a6aba1c4358fcf64b007787c 100644 (file)
@@ -126,10 +126,8 @@ load_file_loop(Fd, Line, File, Lang) ->
             ok
     end.
 
--spec translate(binary() | undefined, binary()) -> binary().
+-spec translate(binary(), binary()) -> binary().
 
-translate(undefined, Msg) ->
-    translate(?MYLANG, Msg);
 translate(Lang, Msg) ->
     LLang = ascii_tolower(Lang),
     case ets:lookup(translations, {LLang, Msg}) of
index b432431574cb895249aa3b0268f3f6d209e469eb..c81474f10ec88cc0dffddcfef9e1cf484d2c8ae8 100644 (file)
@@ -119,15 +119,11 @@ make_error(#xmlel{attrs = Attrs, children = Els} = El, Err) ->
     Attrs3 = lists:keystore(<<"type">>, 1, Attrs2, {<<"type">>, <<"error">>}),
     El#xmlel{attrs = Attrs3, children = Els ++ [encode(Err)]}.
 
--spec get_id(iq() | message() | presence() | xmlel()) -> undefined | binary().
+-spec get_id(iq() | message() | presence() | xmlel()) -> binary().
 get_id(#iq{id = ID}) -> ID;
 get_id(#message{id = ID}) -> ID;
 get_id(#presence{id = ID}) -> ID;
-get_id(#xmlel{attrs = Attrs}) ->
-    case fxml:get_attr(<<"id">>, Attrs) of
-       {value, ID} -> ID;
-       false -> undefined
-    end.
+get_id(#xmlel{attrs = Attrs}) -> fxml:get_attr_s(<<"id">>, Attrs).
 
 -spec get_type(iq()) -> iq_type();
              (message()) -> message_type();
@@ -138,15 +134,11 @@ get_type(#message{type = T}) -> T;
 get_type(#presence{type = T}) -> T;
 get_type(#xmlel{attrs = Attrs}) -> fxml:get_attr_s(<<"type">>, Attrs).
 
--spec get_lang(iq() | message() | presence()) -> undefined | binary().
+-spec get_lang(iq() | message() | presence()) -> binary().
 get_lang(#iq{lang = L}) -> L;
 get_lang(#message{lang = L}) -> L;
 get_lang(#presence{lang = L}) -> L;
-get_lang(#xmlel{attrs = Attrs}) ->
-    case fxml:get_attr(<<"xml:lang">>, Attrs) of
-       {value, L} -> L;
-       false -> undefined
-    end.
+get_lang(#xmlel{attrs = Attrs}) -> fxml:get_attr_s(<<"xml:lang">>, Attrs).
 
 -spec get_from(iq() | message() | presence()) -> undefined | jid:jid().
 get_from(#iq{from = J}) -> J;
@@ -371,14 +363,13 @@ has_subtag([], _, _) ->
 
 -spec get_text([text()]) -> binary().
 get_text([]) -> <<"">>;
-get_text([#text{data = undefined}|_]) -> <<"">>;
 get_text([#text{data = Data}|_]) -> Data.
 
 -spec mk_text(binary()) -> [text()].
 mk_text(Text) ->
-    mk_text(Text, undefined).
+    mk_text(Text, <<"">>).
 
--spec mk_text(binary(), binary() | undefined) -> [text()].
+-spec mk_text(binary(), binary()) -> [text()].
 mk_text(<<"">>, _) ->
     [];
 mk_text(Text, Lang) ->
@@ -396,7 +387,7 @@ pp(Term) ->
 err_bad_request() ->
     err(modify, 'bad-request', 400).
 
--spec err_bad_request(binary(), binary() | undefined) -> error().
+-spec err_bad_request(binary(), binary()) -> error().
 err_bad_request(Text, Lang) ->
     err(modify, 'bad-request', 400, Text, Lang).
 
@@ -404,7 +395,7 @@ err_bad_request(Text, Lang) ->
 err_conflict() ->
     err(cancel, 'conflict', 409).
 
--spec err_conflict(binary(), binary() | undefined) -> error().
+-spec err_conflict(binary(), binary()) -> error().
 err_conflict(Text, Lang) ->
     err(cancel, 'conflict', 409, Text, Lang).
 
@@ -412,7 +403,7 @@ err_conflict(Text, Lang) ->
 err_feature_not_implemented() ->
     err(cancel, 'feature-not-implemented', 501).
 
--spec err_feature_not_implemented(binary(), binary() | undefined) -> error().
+-spec err_feature_not_implemented(binary(), binary()) -> error().
 err_feature_not_implemented(Text, Lang) ->
     err(cancel, 'feature-not-implemented', 501, Text, Lang).
 
@@ -420,7 +411,7 @@ err_feature_not_implemented(Text, Lang) ->
 err_forbidden() ->
     err(auth, 'forbidden', 403).
 
--spec err_forbidden(binary(), binary() | undefined) -> error().
+-spec err_forbidden(binary(), binary()) -> error().
 err_forbidden(Text, Lang) ->
     err(auth, 'forbidden', 403, Text, Lang).
 
@@ -430,7 +421,7 @@ err_forbidden(Text, Lang) ->
 err_gone() ->
     err(modify, 'gone', 302).
 
--spec err_gone(binary(), binary() | undefined) -> error().
+-spec err_gone(binary(), binary()) -> error().
 err_gone(Text, Lang) ->
     err(modify, 'gone', 302, Text, Lang).
 
@@ -440,7 +431,7 @@ err_gone(Text, Lang) ->
 err_internal_server_error() ->
     err(wait, 'internal-server-error', 500).
 
--spec err_internal_server_error(binary(), binary() | undefined) -> error().
+-spec err_internal_server_error(binary(), binary()) -> error().
 err_internal_server_error(Text, Lang) ->
     err(wait, 'internal-server-error', 500, Text, Lang).
 
@@ -448,7 +439,7 @@ err_internal_server_error(Text, Lang) ->
 err_item_not_found() ->
     err(cancel, 'item-not-found', 404).
 
--spec err_item_not_found(binary(), binary() | undefined) -> error().
+-spec err_item_not_found(binary(), binary()) -> error().
 err_item_not_found(Text, Lang) ->
     err(cancel, 'item-not-found', 404, Text, Lang).
 
@@ -456,7 +447,7 @@ err_item_not_found(Text, Lang) ->
 err_jid_malformed() ->
     err(modify, 'jid-malformed', 400).
 
--spec err_jid_malformed(binary(), binary() | undefined) -> error().
+-spec err_jid_malformed(binary(), binary()) -> error().
 err_jid_malformed(Text, Lang) ->
     err(modify, 'jid-malformed', 400, Text, Lang).
 
@@ -464,7 +455,7 @@ err_jid_malformed(Text, Lang) ->
 err_not_acceptable() ->
     err(modify, 'not-acceptable', 406).
 
--spec err_not_acceptable(binary(), binary() | undefined) -> error().
+-spec err_not_acceptable(binary(), binary()) -> error().
 err_not_acceptable(Text, Lang) ->
     err(modify, 'not-acceptable', 406, Text, Lang).
 
@@ -472,7 +463,7 @@ err_not_acceptable(Text, Lang) ->
 err_not_allowed() ->
     err(cancel, 'not-allowed', 405).
 
--spec err_not_allowed(binary(), binary() | undefined) -> error().
+-spec err_not_allowed(binary(), binary()) -> error().
 err_not_allowed(Text, Lang) ->
     err(cancel, 'not-allowed', 405, Text, Lang).
 
@@ -480,7 +471,7 @@ err_not_allowed(Text, Lang) ->
 err_not_authorized() ->
     err(auth, 'not-authorized', 401).
 
--spec err_not_authorized(binary(), binary() | undefined) -> error().
+-spec err_not_authorized(binary(), binary()) -> error().
 err_not_authorized(Text, Lang) ->
     err(auth, 'not-authorized', 401, Text, Lang).
 
@@ -488,7 +479,7 @@ err_not_authorized(Text, Lang) ->
 err_payment_required() ->
     err(auth, 'not-authorized', 402).
 
--spec err_payment_required(binary(), binary() | undefined) -> error().
+-spec err_payment_required(binary(), binary()) -> error().
 err_payment_required(Text, Lang) ->
     err(auth, 'not-authorized', 402, Text, Lang).
 
@@ -498,7 +489,7 @@ err_payment_required(Text, Lang) ->
 err_policy_violation() ->
     err(modify, 'policy-violation', 403).
 
--spec err_policy_violation(binary(), binary() | undefined) -> error().
+-spec err_policy_violation(binary(), binary()) -> error().
 err_policy_violation(Text, Lang) ->
     err(modify, 'policy-violation', 403, Text, Lang).
 
@@ -506,7 +497,7 @@ err_policy_violation(Text, Lang) ->
 err_recipient_unavailable() ->
     err(wait, 'recipient-unavailable', 404).
 
--spec err_recipient_unavailable(binary(), binary() | undefined) -> error().
+-spec err_recipient_unavailable(binary(), binary()) -> error().
 err_recipient_unavailable(Text, Lang) ->
     err(wait, 'recipient-unavailable', 404, Text, Lang).
 
@@ -514,7 +505,7 @@ err_recipient_unavailable(Text, Lang) ->
 err_redirect() ->
     err(modify, 'redirect', 302).
 
--spec err_redirect(binary(), binary() | undefined) -> error().
+-spec err_redirect(binary(), binary()) -> error().
 err_redirect(Text, Lang) ->
     err(modify, 'redirect', 302, Text, Lang).
 
@@ -522,7 +513,7 @@ err_redirect(Text, Lang) ->
 err_registration_required() ->
     err(auth, 'registration-required', 407).
 
--spec err_registration_required(binary(), binary() | undefined) -> error().
+-spec err_registration_required(binary(), binary()) -> error().
 err_registration_required(Text, Lang) ->
     err(auth, 'registration-required', 407, Text, Lang).
 
@@ -530,7 +521,7 @@ err_registration_required(Text, Lang) ->
 err_remote_server_not_found() ->
     err(cancel, 'remote-server-not-found', 404).
 
--spec err_remote_server_not_found(binary(), binary() | undefined) -> error().
+-spec err_remote_server_not_found(binary(), binary()) -> error().
 err_remote_server_not_found(Text, Lang) ->
     err(cancel, 'remote-server-not-found', 404, Text, Lang).
 
@@ -538,7 +529,7 @@ err_remote_server_not_found(Text, Lang) ->
 err_remote_server_timeout() ->
     err(wait, 'remote-server-timeout', 504).
 
--spec err_remote_server_timeout(binary(), binary() | undefined) -> error().
+-spec err_remote_server_timeout(binary(), binary()) -> error().
 err_remote_server_timeout(Text, Lang) ->
     err(wait, 'remote-server-timeout', 504, Text, Lang).
 
@@ -546,7 +537,7 @@ err_remote_server_timeout(Text, Lang) ->
 err_resource_constraint() ->
     err(wait, 'resource-constraint', 500).
 
--spec err_resource_constraint(binary(), binary() | undefined) -> error().
+-spec err_resource_constraint(binary(), binary()) -> error().
 err_resource_constraint(Text, Lang) ->
     err(wait, 'resource-constraint', 500, Text, Lang).
 
@@ -554,7 +545,7 @@ err_resource_constraint(Text, Lang) ->
 err_service_unavailable() ->
     err(cancel, 'service-unavailable', 503).
 
--spec err_service_unavailable(binary(), binary() | undefined) -> error().
+-spec err_service_unavailable(binary(), binary()) -> error().
 err_service_unavailable(Text, Lang) ->
     err(cancel, 'service-unavailable', 503, Text, Lang).
 
@@ -562,7 +553,7 @@ err_service_unavailable(Text, Lang) ->
 err_subscription_required() ->
     err(auth, 'subscription-required', 407).
 
--spec err_subscription_required(binary(), binary() | undefined) -> error().
+-spec err_subscription_required(binary(), binary()) -> error().
 err_subscription_required(Text, Lang) ->
     err(auth, 'subscription-required', 407, Text, Lang).
 
@@ -574,7 +565,7 @@ err_undefined_condition(Type) ->
     err(Type, 'undefined-condition', 500).
 
 -spec err_undefined_condition('auth' | 'cancel' | 'continue' | 'modify' | 'wait',
-                             binary(), binary() | undefined) -> error().
+                             binary(), binary()) -> error().
 err_undefined_condition(Type, Text, Lang) ->
     err(Type, 'undefined-condition', 500, Text, Lang).
 
@@ -584,7 +575,7 @@ err_undefined_condition(Type, Text, Lang) ->
 err_unexpected_request() ->
     err(wait, 'unexpected-request', 400).
 
--spec err_unexpected_request(binary(), binary() | undefined) -> error().
+-spec err_unexpected_request(binary(), binary()) -> error().
 err_unexpected_request(Text, Lang) ->
     err(wait, 'unexpected-request', 400, Text, Lang).
 
@@ -595,7 +586,7 @@ err_unexpected_request(Text, Lang) ->
 serr_bad_format() ->
     serr('bad-format').
 
--spec serr_bad_format(binary(), binary() | undefined) -> stream_error().
+-spec serr_bad_format(binary(), binary()) -> stream_error().
 serr_bad_format(Text, Lang) ->
     serr('bad-format', Text, Lang).
 
@@ -603,7 +594,7 @@ serr_bad_format(Text, Lang) ->
 serr_bad_namespace_prefix() ->
     serr('bad-namespace-prefix').
 
--spec serr_bad_namespace_prefix(binary(), binary() | undefined) -> stream_error().
+-spec serr_bad_namespace_prefix(binary(), binary()) -> stream_error().
 serr_bad_namespace_prefix(Text, Lang) ->
     serr('bad-namespace-prefix', Text, Lang).
 
@@ -611,7 +602,7 @@ serr_bad_namespace_prefix(Text, Lang) ->
 serr_conflict() ->
     serr('conflict').
 
--spec serr_conflict(binary(), binary() | undefined) -> stream_error().
+-spec serr_conflict(binary(), binary()) -> stream_error().
 serr_conflict(Text, Lang) ->
     serr('conflict', Text, Lang).
 
@@ -619,7 +610,7 @@ serr_conflict(Text, Lang) ->
 serr_connection_timeout() ->
     serr('connection-timeout').
 
--spec serr_connection_timeout(binary(), binary() | undefined) -> stream_error().
+-spec serr_connection_timeout(binary(), binary()) -> stream_error().
 serr_connection_timeout(Text, Lang) ->
     serr('connection-timeout', Text, Lang).
 
@@ -627,7 +618,7 @@ serr_connection_timeout(Text, Lang) ->
 serr_host_gone() ->
     serr('host-gone').
 
--spec serr_host_gone(binary(), binary() | undefined) -> stream_error().
+-spec serr_host_gone(binary(), binary()) -> stream_error().
 serr_host_gone(Text, Lang) ->
     serr('host-gone', Text, Lang).
 
@@ -635,7 +626,7 @@ serr_host_gone(Text, Lang) ->
 serr_host_unknown() ->
     serr('host-unknown').
 
--spec serr_host_unknown(binary(), binary() | undefined) -> stream_error().
+-spec serr_host_unknown(binary(), binary()) -> stream_error().
 serr_host_unknown(Text, Lang) ->
     serr('host-unknown', Text, Lang).
 
@@ -643,7 +634,7 @@ serr_host_unknown(Text, Lang) ->
 serr_improper_addressing() ->
     serr('improper-addressing').
 
--spec serr_improper_addressing(binary(), binary() | undefined) -> stream_error().
+-spec serr_improper_addressing(binary(), binary()) -> stream_error().
 serr_improper_addressing(Text, Lang) ->
     serr('improper-addressing', Text, Lang).
 
@@ -651,7 +642,7 @@ serr_improper_addressing(Text, Lang) ->
 serr_internal_server_error() ->
     serr('internal-server-error').
 
--spec serr_internal_server_error(binary(), binary() | undefined) -> stream_error().
+-spec serr_internal_server_error(binary(), binary()) -> stream_error().
 serr_internal_server_error(Text, Lang) ->
     serr('internal-server-error', Text, Lang).
 
@@ -659,7 +650,7 @@ serr_internal_server_error(Text, Lang) ->
 serr_invalid_from() ->
     serr('invalid-from').
 
--spec serr_invalid_from(binary(), binary() | undefined) -> stream_error().
+-spec serr_invalid_from(binary(), binary()) -> stream_error().
 serr_invalid_from(Text, Lang) ->
     serr('invalid-from', Text, Lang).
 
@@ -667,7 +658,7 @@ serr_invalid_from(Text, Lang) ->
 serr_invalid_id() ->
     serr('invalid-id').
 
--spec serr_invalid_id(binary(), binary() | undefined) -> stream_error().
+-spec serr_invalid_id(binary(), binary()) -> stream_error().
 serr_invalid_id(Text, Lang) ->
     serr('invalid-id', Text, Lang).
 
@@ -675,7 +666,7 @@ serr_invalid_id(Text, Lang) ->
 serr_invalid_namespace() ->
     serr('invalid-namespace').
 
--spec serr_invalid_namespace(binary(), binary() | undefined) -> stream_error().
+-spec serr_invalid_namespace(binary(), binary()) -> stream_error().
 serr_invalid_namespace(Text, Lang) ->
     serr('invalid-namespace', Text, Lang).
 
@@ -683,7 +674,7 @@ serr_invalid_namespace(Text, Lang) ->
 serr_invalid_xml() ->
     serr('invalid-xml').
 
--spec serr_invalid_xml(binary(), binary() | undefined) -> stream_error().
+-spec serr_invalid_xml(binary(), binary()) -> stream_error().
 serr_invalid_xml(Text, Lang) ->
     serr('invalid-xml', Text, Lang).
 
@@ -691,7 +682,7 @@ serr_invalid_xml(Text, Lang) ->
 serr_not_authorized() ->
     serr('not-authorized').
 
--spec serr_not_authorized(binary(), binary() | undefined) -> stream_error().
+-spec serr_not_authorized(binary(), binary()) -> stream_error().
 serr_not_authorized(Text, Lang) ->
     serr('not-authorized', Text, Lang).
 
@@ -699,7 +690,7 @@ serr_not_authorized(Text, Lang) ->
 serr_not_well_formed() ->
     serr('not-well-formed').
 
--spec serr_not_well_formed(binary(), binary() | undefined) -> stream_error().
+-spec serr_not_well_formed(binary(), binary()) -> stream_error().
 serr_not_well_formed(Text, Lang) ->
     serr('not-well-formed', Text, Lang).
 
@@ -707,7 +698,7 @@ serr_not_well_formed(Text, Lang) ->
 serr_policy_violation() ->
     serr('policy-violation').
 
--spec serr_policy_violation(binary(), binary() | undefined) -> stream_error().
+-spec serr_policy_violation(binary(), binary()) -> stream_error().
 serr_policy_violation(Text, Lang) ->
     serr('policy-violation', Text, Lang).
 
@@ -715,7 +706,7 @@ serr_policy_violation(Text, Lang) ->
 serr_remote_connection_failed() ->
     serr('remote-connection-failed').
 
--spec serr_remote_connection_failed(binary(), binary() | undefined) -> stream_error().
+-spec serr_remote_connection_failed(binary(), binary()) -> stream_error().
 serr_remote_connection_failed(Text, Lang) ->
     serr('remote-connection-failed', Text, Lang).
 
@@ -723,7 +714,7 @@ serr_remote_connection_failed(Text, Lang) ->
 serr_reset() ->
     serr('reset').
 
--spec serr_reset(binary(), binary() | undefined) -> stream_error().
+-spec serr_reset(binary(), binary()) -> stream_error().
 serr_reset(Text, Lang) ->
     serr('reset', Text, Lang).
 
@@ -731,7 +722,7 @@ serr_reset(Text, Lang) ->
 serr_resource_constraint() ->
     serr('resource-constraint').
 
--spec serr_resource_constraint(binary(), binary() | undefined) -> stream_error().
+-spec serr_resource_constraint(binary(), binary()) -> stream_error().
 serr_resource_constraint(Text, Lang) ->
     serr('resource-constraint', Text, Lang).
 
@@ -739,7 +730,7 @@ serr_resource_constraint(Text, Lang) ->
 serr_restricted_xml() ->
     serr('restricted-xml').
 
--spec serr_restricted_xml(binary(), binary() | undefined) -> stream_error().
+-spec serr_restricted_xml(binary(), binary()) -> stream_error().
 serr_restricted_xml(Text, Lang) ->
     serr('restricted-xml', Text, Lang).
 
@@ -747,7 +738,7 @@ serr_restricted_xml(Text, Lang) ->
 serr_see_other_host() ->
     serr('see-other-host').
 
--spec serr_see_other_host(binary(), binary() | undefined) -> stream_error().
+-spec serr_see_other_host(binary(), binary()) -> stream_error().
 serr_see_other_host(Text, Lang) ->
     serr('see-other-host', Text, Lang).
 
@@ -755,7 +746,7 @@ serr_see_other_host(Text, Lang) ->
 serr_system_shutdown() ->
     serr('system-shutdown').
 
--spec serr_system_shutdown(binary(), binary() | undefined) -> stream_error().
+-spec serr_system_shutdown(binary(), binary()) -> stream_error().
 serr_system_shutdown(Text, Lang) ->
     serr('system-shutdown', Text, Lang).
 
@@ -763,7 +754,7 @@ serr_system_shutdown(Text, Lang) ->
 serr_undefined_condition() ->
     serr('undefined-condition').
 
--spec serr_undefined_condition(binary(), binary() | undefined) -> stream_error().
+-spec serr_undefined_condition(binary(), binary()) -> stream_error().
 serr_undefined_condition(Text, Lang) ->
     serr('undefined-condition', Text, Lang).
 
@@ -771,7 +762,7 @@ serr_undefined_condition(Text, Lang) ->
 serr_unsupported_encoding() ->
     serr('unsupported-encoding').
 
--spec serr_unsupported_encoding(binary(), binary() | undefined) -> stream_error().
+-spec serr_unsupported_encoding(binary(), binary()) -> stream_error().
 serr_unsupported_encoding(Text, Lang) ->
     serr('unsupported-encoding', Text, Lang).
 
@@ -779,7 +770,7 @@ serr_unsupported_encoding(Text, Lang) ->
 serr_unsupported_stanza_type() ->
     serr('unsupported-stanza-type').
 
--spec serr_unsupported_stanza_type(binary(), binary() | undefined) -> stream_error().
+-spec serr_unsupported_stanza_type(binary(), binary()) -> stream_error().
 serr_unsupported_stanza_type(Text, Lang) ->
     serr('unsupported-stanza-type', Text, Lang).
 
@@ -787,7 +778,7 @@ serr_unsupported_stanza_type(Text, Lang) ->
 serr_unsupported_version() ->
     serr('unsupported-version').
 
--spec serr_unsupported_version(binary(), binary() | undefined) -> stream_error().
+-spec serr_unsupported_version(binary(), binary()) -> stream_error().
 serr_unsupported_version(Text, Lang) ->
     serr('unsupported-version', Text, Lang).
 
@@ -801,7 +792,7 @@ err(Type, Reason, Code) ->
 
 -spec err('auth' | 'cancel' | 'continue' | 'modify' | 'wait',
          atom() | gone() | redirect(), non_neg_integer(),
-         binary(), binary() | undefined) -> error().
+         binary(), binary()) -> error().
 err(Type, Reason, Code, Text, Lang) ->
     #error{type = Type, reason = Reason, code = Code,
           text = #text{lang = Lang,
@@ -812,7 +803,7 @@ serr(Reason) ->
     #stream_error{reason = Reason}.
 
 -spec serr(atom() | 'see-other-host'(), binary(),
-          binary() | undefined) -> stream_error().
+          binary()) -> stream_error().
 serr(Reason, Text, Lang) ->
     #stream_error{reason = Reason,
                  text = #text{lang = Lang,
index e0a5d47c9fc946fdadaec1fbec84d326479003cf..905e48f3cfad423cf78a6ad593d5a5130785157c 100644 (file)
@@ -2399,7 +2399,7 @@ encode({vcard_temp, _, _, _, _, _, _, _, _, _, _, _, _,
           Vcard) ->
     encode_vcard_temp(Vcard,
                      [{<<"xmlns">>, <<"vcard-temp">>}]);
-encode({vcard_xupdate, undefined, _} = X) ->
+encode({vcard_xupdate, _, _} = X) ->
     encode_vcard_xupdate(X,
                         [{<<"xmlns">>, <<"vcard-temp:x:update">>}]);
 encode({xdata_option, _, _} = Option) ->
@@ -2801,7 +2801,7 @@ get_name({vcard_temp, _, _, _, _, _, _, _, _, _, _, _,
          _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
          _}) ->
     <<"vCard">>;
-get_name({vcard_xupdate, undefined, _}) -> <<"x">>;
+get_name({vcard_xupdate, _, _}) -> <<"x">>;
 get_name({xdata_option, _, _}) -> <<"option">>;
 get_name({xdata_field, _, _, _, _, _, _, _, _}) ->
     <<"field">>;
@@ -3033,7 +3033,7 @@ get_ns({vcard_key, _, _}) -> <<"vcard-temp">>;
 get_ns({vcard_temp, _, _, _, _, _, _, _, _, _, _, _, _,
        _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _}) ->
     <<"vcard-temp">>;
-get_ns({vcard_xupdate, undefined, _}) ->
+get_ns({vcard_xupdate, _, _}) ->
     <<"vcard-temp:x:update">>;
 get_ns({xdata_option, _, _}) -> <<"jabber:x:data">>;
 get_ns({xdata_field, _, _, _, _, _, _, _, _}) ->
@@ -3331,7 +3331,6 @@ pp(vcard_temp, 29) ->
      email, jabberid, mailer, tz, geo, title, role, logo,
      org, categories, note, prodid, rev, sort_string, sound,
      uid, url, class, key, desc];
-pp(vcard_xupdate, 2) -> [us, hash];
 pp(xdata_option, 2) -> [label, value];
 pp(xdata_field, 8) ->
     [label, type, var, required, desc, values, options,
@@ -3355,7 +3354,6 @@ pp(pubsub, 8) ->
     [subscriptions, affiliations, publish, subscribe,
      unsubscribe, options, items, retract];
 pp(shim, 1) -> [headers];
-pp(chatstate, 1) -> [type];
 pp(delay, 3) -> [stamp, from, desc];
 pp(streamhost, 3) -> [jid, host, port];
 pp(bytestreams, 6) ->
@@ -3396,7 +3394,6 @@ pp(carbons_private, 0) -> [];
 pp(carbons_received, 1) -> [forwarded];
 pp(carbons_sent, 1) -> [forwarded];
 pp(feature_csi, 1) -> [xmlns];
-pp(csi, 1) -> [type];
 pp(feature_sm, 1) -> [xmlns];
 pp(sm_enable, 3) -> [max, resume, xmlns];
 pp(sm_enabled, 5) -> [id, location, max, resume, xmlns];
@@ -3410,7 +3407,6 @@ pp(offline, 3) -> [items, purge, fetch];
 pp(mix_join, 2) -> [jid, subscribe];
 pp(mix_leave, 0) -> [];
 pp(mix_participant, 2) -> [jid, nick];
-pp(hint, 1) -> [type];
 pp(search_item, 5) -> [jid, first, last, nick, email];
 pp(search, 7) ->
     [instructions, first, last, nick, email, items, xdata];
@@ -3445,6 +3441,27 @@ pp(upload_slot, 3) -> [get, put, xmlns];
 pp(thumbnail, 4) -> [uri, 'media-type', width, height];
 pp(_, _) -> no.
 
+enc_host_port(Host) when is_binary(Host) -> Host;
+enc_host_port({{_, _, _, _, _, _, _, _} = IPv6,
+              Port}) ->
+    enc_host_port({<<$[, (enc_ip(IPv6))/binary, $]>>,
+                  Port});
+enc_host_port({{_, _, _, _} = IPv4, Port}) ->
+    enc_host_port({enc_ip(IPv4), Port});
+enc_host_port({Host, Port}) ->
+    <<Host/binary, $:, (integer_to_binary(Port))/binary>>;
+enc_host_port(Addr) -> enc_ip(Addr).
+
+dec_host_port(<<$[, T/binary>>) ->
+    [IP, <<$:, Port/binary>>] = binary:split(T, <<$]>>),
+    {dec_ip(IP), dec_int(Port, 0, 65535)};
+dec_host_port(S) ->
+    case binary:split(S, <<$:>>) of
+      [S] -> try dec_ip(S) catch _:_ -> S end;
+      [S, P] ->
+         {try dec_ip(S) catch _:_ -> S end, dec_int(P, 0, 65535)}
+    end.
+
 enc_ip({0, 0, 0, 0, 0, 65535, A, B}) ->
     enc_ip({(A bsr 8) band 255, A band 255,
            (B bsr 8) band 255, B band 255});
@@ -3693,10 +3710,10 @@ encode_upload_slot({upload_slot, Get, Put, Xmlns},
     [encode_upload_get(Get, []) | _acc].
 
 decode_upload_slot_attr_xmlns(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_upload_slot_attr_xmlns(__TopXMLNS, _val) -> _val.
 
-encode_upload_slot_attr_xmlns(undefined, _acc) -> _acc;
+encode_upload_slot_attr_xmlns(<<>>, _acc) -> _acc;
 encode_upload_slot_attr_xmlns(_val, _acc) ->
     [{<<"xmlns">>, _val} | _acc].
 
@@ -3916,12 +3933,11 @@ encode_upload_request({upload_request, Filename, Size,
 
 decode_upload_request_attr_xmlns(__TopXMLNS,
                                 undefined) ->
-    undefined;
+    <<>>;
 decode_upload_request_attr_xmlns(__TopXMLNS, _val) ->
     _val.
 
-encode_upload_request_attr_xmlns(undefined, _acc) ->
-    _acc;
+encode_upload_request_attr_xmlns(<<>>, _acc) -> _acc;
 encode_upload_request_attr_xmlns(_val, _acc) ->
     [{<<"xmlns">>, _val} | _acc].
 
@@ -4094,11 +4110,10 @@ encode_sic({sic, Ip, Port, Xmlns}, _xmlns_attrs) ->
 'encode_sic_$port'(Port, _acc) ->
     [encode_sip_port(Port, []) | _acc].
 
-decode_sic_attr_xmlns(__TopXMLNS, undefined) ->
-    undefined;
+decode_sic_attr_xmlns(__TopXMLNS, undefined) -> <<>>;
 decode_sic_attr_xmlns(__TopXMLNS, _val) -> _val.
 
-encode_sic_attr_xmlns(undefined, _acc) -> _acc;
+encode_sic_attr_xmlns(<<>>, _acc) -> _acc;
 encode_sic_attr_xmlns(_val, _acc) ->
     [{<<"xmlns">>, _val} | _acc].
 
@@ -4571,10 +4586,10 @@ encode_bob_data_attr_cid(_val, _acc) ->
     [{<<"max-age">>, enc_int(_val)} | _acc].
 
 decode_bob_data_attr_type(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_bob_data_attr_type(__TopXMLNS, _val) -> _val.
 
-encode_bob_data_attr_type(undefined, _acc) -> _acc;
+encode_bob_data_attr_type(<<>>, _acc) -> _acc;
 encode_bob_data_attr_type(_val, _acc) ->
     [{<<"type">>, _val} | _acc].
 
@@ -4707,11 +4722,11 @@ encode_stream_start_attr_to(_val, _acc) ->
     [{<<"to">>, enc_jid(_val)} | _acc].
 
 decode_stream_start_attr_xmlns(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_stream_start_attr_xmlns(__TopXMLNS, _val) ->
     _val.
 
-encode_stream_start_attr_xmlns(undefined, _acc) -> _acc;
+encode_stream_start_attr_xmlns(<<>>, _acc) -> _acc;
 encode_stream_start_attr_xmlns(_val, _acc) ->
     [{<<"xmlns">>, _val} | _acc].
 
@@ -5207,24 +5222,23 @@ encode_adhoc_command_attr_node(_val, _acc) ->
 
 'decode_adhoc_command_attr_xml:lang'(__TopXMLNS,
                                     undefined) ->
-    undefined;
+    <<>>;
 'decode_adhoc_command_attr_xml:lang'(__TopXMLNS,
                                     _val) ->
     _val.
 
-'encode_adhoc_command_attr_xml:lang'(undefined, _acc) ->
+'encode_adhoc_command_attr_xml:lang'(<<>>, _acc) ->
     _acc;
 'encode_adhoc_command_attr_xml:lang'(_val, _acc) ->
     [{<<"xml:lang">>, _val} | _acc].
 
 decode_adhoc_command_attr_sessionid(__TopXMLNS,
                                    undefined) ->
-    undefined;
+    <<>>;
 decode_adhoc_command_attr_sessionid(__TopXMLNS, _val) ->
     _val.
 
-encode_adhoc_command_attr_sessionid(undefined, _acc) ->
-    _acc;
+encode_adhoc_command_attr_sessionid(<<>>, _acc) -> _acc;
 encode_adhoc_command_attr_sessionid(_val, _acc) ->
     [{<<"sessionid">>, _val} | _acc].
 
@@ -5723,19 +5737,17 @@ encode_address_attr_jid(undefined, _acc) -> _acc;
 encode_address_attr_jid(_val, _acc) ->
     [{<<"jid">>, enc_jid(_val)} | _acc].
 
-decode_address_attr_desc(__TopXMLNS, undefined) ->
-    undefined;
+decode_address_attr_desc(__TopXMLNS, undefined) -> <<>>;
 decode_address_attr_desc(__TopXMLNS, _val) -> _val.
 
-encode_address_attr_desc(undefined, _acc) -> _acc;
+encode_address_attr_desc(<<>>, _acc) -> _acc;
 encode_address_attr_desc(_val, _acc) ->
     [{<<"desc">>, _val} | _acc].
 
-decode_address_attr_node(__TopXMLNS, undefined) ->
-    undefined;
+decode_address_attr_node(__TopXMLNS, undefined) -> <<>>;
 decode_address_attr_node(__TopXMLNS, _val) -> _val.
 
-encode_address_attr_node(undefined, _acc) -> _acc;
+encode_address_attr_node(<<>>, _acc) -> _acc;
 encode_address_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
@@ -6001,10 +6013,10 @@ encode_xevent_id(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"id">>, _attrs, _els}.
 
-decode_xevent_id_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_xevent_id_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_xevent_id_cdata(__TopXMLNS, _val) -> _val.
 
-encode_xevent_id_cdata(undefined, _acc) -> _acc;
+encode_xevent_id_cdata(<<>>, _acc) -> _acc;
 encode_xevent_id_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -6519,12 +6531,11 @@ encode_search_instructions(Cdata, _xmlns_attrs) ->
     {xmlel, <<"instructions">>, _attrs, _els}.
 
 decode_search_instructions_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+    <<>>;
 decode_search_instructions_cdata(__TopXMLNS, _val) ->
     _val.
 
-encode_search_instructions_cdata(undefined, _acc) ->
-    _acc;
+encode_search_instructions_cdata(<<>>, _acc) -> _acc;
 encode_search_instructions_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -6641,12 +6652,11 @@ encode_mix_participant_attr_jid(_val, _acc) ->
 
 decode_mix_participant_attr_nick(__TopXMLNS,
                                 undefined) ->
-    undefined;
+    <<>>;
 decode_mix_participant_attr_nick(__TopXMLNS, _val) ->
     _val.
 
-encode_mix_participant_attr_nick(undefined, _acc) ->
-    _acc;
+encode_mix_participant_attr_nick(<<>>, _acc) -> _acc;
 encode_mix_participant_attr_nick(_val, _acc) ->
     [{<<"nick">>, _val} | _acc].
 
@@ -6889,10 +6899,10 @@ encode_offline_item({offline_item, Node, Action},
     {xmlel, <<"item">>, _attrs, _els}.
 
 decode_offline_item_attr_node(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_offline_item_attr_node(__TopXMLNS, _val) -> _val.
 
-encode_offline_item_attr_node(undefined, _acc) -> _acc;
+encode_offline_item_attr_node(<<>>, _acc) -> _acc;
 encode_offline_item_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
@@ -7413,10 +7423,10 @@ encode_sm_failed_attr_h(_val, _acc) ->
     [{<<"h">>, enc_int(_val)} | _acc].
 
 decode_sm_failed_attr_xmlns(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_sm_failed_attr_xmlns(__TopXMLNS, _val) -> _val.
 
-encode_sm_failed_attr_xmlns(undefined, _acc) -> _acc;
+encode_sm_failed_attr_xmlns(<<>>, _acc) -> _acc;
 encode_sm_failed_attr_xmlns(_val, _acc) ->
     [{<<"xmlns">>, _val} | _acc].
 
@@ -7458,11 +7468,10 @@ decode_sm_a_attr_h(__TopXMLNS, _val) ->
 encode_sm_a_attr_h(_val, _acc) ->
     [{<<"h">>, enc_int(_val)} | _acc].
 
-decode_sm_a_attr_xmlns(__TopXMLNS, undefined) ->
-    undefined;
+decode_sm_a_attr_xmlns(__TopXMLNS, undefined) -> <<>>;
 decode_sm_a_attr_xmlns(__TopXMLNS, _val) -> _val.
 
-encode_sm_a_attr_xmlns(undefined, _acc) -> _acc;
+encode_sm_a_attr_xmlns(<<>>, _acc) -> _acc;
 encode_sm_a_attr_xmlns(_val, _acc) ->
     [{<<"xmlns">>, _val} | _acc].
 
@@ -7485,11 +7494,10 @@ encode_sm_r({sm_r, Xmlns}, _xmlns_attrs) ->
     _attrs = encode_sm_r_attr_xmlns(Xmlns, _xmlns_attrs),
     {xmlel, <<"r">>, _attrs, _els}.
 
-decode_sm_r_attr_xmlns(__TopXMLNS, undefined) ->
-    undefined;
+decode_sm_r_attr_xmlns(__TopXMLNS, undefined) -> <<>>;
 decode_sm_r_attr_xmlns(__TopXMLNS, _val) -> _val.
 
-encode_sm_r_attr_xmlns(undefined, _acc) -> _acc;
+encode_sm_r_attr_xmlns(<<>>, _acc) -> _acc;
 encode_sm_r_attr_xmlns(_val, _acc) ->
     [{<<"xmlns">>, _val} | _acc].
 
@@ -7546,10 +7554,10 @@ encode_sm_resumed_attr_h(_val, _acc) ->
     [{<<"h">>, enc_int(_val)} | _acc].
 
 decode_sm_resumed_attr_xmlns(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_sm_resumed_attr_xmlns(__TopXMLNS, _val) -> _val.
 
-encode_sm_resumed_attr_xmlns(undefined, _acc) -> _acc;
+encode_sm_resumed_attr_xmlns(<<>>, _acc) -> _acc;
 encode_sm_resumed_attr_xmlns(_val, _acc) ->
     [{<<"xmlns">>, _val} | _acc].
 
@@ -7615,10 +7623,10 @@ encode_sm_resume_attr_h(_val, _acc) ->
     [{<<"h">>, enc_int(_val)} | _acc].
 
 decode_sm_resume_attr_xmlns(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_sm_resume_attr_xmlns(__TopXMLNS, _val) -> _val.
 
-encode_sm_resume_attr_xmlns(undefined, _acc) -> _acc;
+encode_sm_resume_attr_xmlns(<<>>, _acc) -> _acc;
 encode_sm_resume_attr_xmlns(_val, _acc) ->
     [{<<"xmlns">>, _val} | _acc].
 
@@ -7688,29 +7696,28 @@ encode_sm_enabled({sm_enabled, Id, Location, Max,
     {xmlel, <<"enabled">>, _attrs, _els}.
 
 decode_sm_enabled_attr_id(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_sm_enabled_attr_id(__TopXMLNS, _val) -> _val.
 
-encode_sm_enabled_attr_id(undefined, _acc) -> _acc;
+encode_sm_enabled_attr_id(<<>>, _acc) -> _acc;
 encode_sm_enabled_attr_id(_val, _acc) ->
     [{<<"id">>, _val} | _acc].
 
 decode_sm_enabled_attr_location(__TopXMLNS,
                                undefined) ->
-    undefined;
+    <<>>;
 decode_sm_enabled_attr_location(__TopXMLNS, _val) ->
     _val.
 
-encode_sm_enabled_attr_location(undefined, _acc) ->
-    _acc;
+encode_sm_enabled_attr_location(<<>>, _acc) -> _acc;
 encode_sm_enabled_attr_location(_val, _acc) ->
     [{<<"location">>, _val} | _acc].
 
 decode_sm_enabled_attr_xmlns(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_sm_enabled_attr_xmlns(__TopXMLNS, _val) -> _val.
 
-encode_sm_enabled_attr_xmlns(undefined, _acc) -> _acc;
+encode_sm_enabled_attr_xmlns(<<>>, _acc) -> _acc;
 encode_sm_enabled_attr_xmlns(_val, _acc) ->
     [{<<"xmlns">>, _val} | _acc].
 
@@ -7797,10 +7804,10 @@ encode_sm_enable_attr_max(_val, _acc) ->
     [{<<"max">>, enc_int(_val)} | _acc].
 
 decode_sm_enable_attr_xmlns(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_sm_enable_attr_xmlns(__TopXMLNS, _val) -> _val.
 
-encode_sm_enable_attr_xmlns(undefined, _acc) -> _acc;
+encode_sm_enable_attr_xmlns(<<>>, _acc) -> _acc;
 encode_sm_enable_attr_xmlns(_val, _acc) ->
     [{<<"xmlns">>, _val} | _acc].
 
@@ -7841,10 +7848,10 @@ encode_feature_sm({feature_sm, Xmlns}, _xmlns_attrs) ->
     {xmlel, <<"sm">>, _attrs, _els}.
 
 decode_feature_sm_attr_xmlns(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_feature_sm_attr_xmlns(__TopXMLNS, _val) -> _val.
 
-encode_feature_sm_attr_xmlns(undefined, _acc) -> _acc;
+encode_feature_sm_attr_xmlns(<<>>, _acc) -> _acc;
 encode_feature_sm_attr_xmlns(_val, _acc) ->
     [{<<"xmlns">>, _val} | _acc].
 
@@ -7889,10 +7896,10 @@ encode_feature_csi({feature_csi, Xmlns},
     {xmlel, <<"csi">>, _attrs, _els}.
 
 decode_feature_csi_attr_xmlns(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_feature_csi_attr_xmlns(__TopXMLNS, _val) -> _val.
 
-encode_feature_csi_attr_xmlns(undefined, _acc) -> _acc;
+encode_feature_csi_attr_xmlns(<<>>, _acc) -> _acc;
 encode_feature_csi_attr_xmlns(_val, _acc) ->
     [{<<"xmlns">>, _val} | _acc].
 
@@ -8137,10 +8144,10 @@ encode_mam_fin({mam_fin, Id, Rsm, Stable, Complete},
      | _acc].
 
 decode_mam_fin_attr_queryid(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_mam_fin_attr_queryid(__TopXMLNS, _val) -> _val.
 
-encode_mam_fin_attr_queryid(undefined, _acc) -> _acc;
+encode_mam_fin_attr_queryid(<<>>, _acc) -> _acc;
 encode_mam_fin_attr_queryid(_val, _acc) ->
     [{<<"queryid">>, _val} | _acc].
 
@@ -8301,10 +8308,10 @@ encode_mam_prefs_attr_default(_val, _acc) ->
     [{<<"default">>, enc_enum(_val)} | _acc].
 
 decode_mam_prefs_attr_xmlns(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_mam_prefs_attr_xmlns(__TopXMLNS, _val) -> _val.
 
-encode_mam_prefs_attr_xmlns(undefined, _acc) -> _acc;
+encode_mam_prefs_attr_xmlns(<<>>, _acc) -> _acc;
 encode_mam_prefs_attr_xmlns(_val, _acc) ->
     [{<<"xmlns">>, _val} | _acc].
 
@@ -8325,36 +8332,23 @@ decode_mam_always_els(__TopXMLNS, __IgnoreEls,
               __TopXMLNS == <<"urn:xmpp:mam:0">>;
               __TopXMLNS == <<"urn:xmpp:mam:tmp">> ->
          decode_mam_always_els(__TopXMLNS, __IgnoreEls, _els,
-                               case decode_mam_jid(__TopXMLNS, __IgnoreEls,
-                                                   _el)
-                                   of
-                                 undefined -> Jids;
-                                 _new_el -> [_new_el | Jids]
-                               end);
+                               [decode_mam_jid(__TopXMLNS, __IgnoreEls, _el)
+                                | Jids]);
       <<"urn:xmpp:mam:0">> ->
          decode_mam_always_els(__TopXMLNS, __IgnoreEls, _els,
-                               case decode_mam_jid(<<"urn:xmpp:mam:0">>,
-                                                   __IgnoreEls, _el)
-                                   of
-                                 undefined -> Jids;
-                                 _new_el -> [_new_el | Jids]
-                               end);
+                               [decode_mam_jid(<<"urn:xmpp:mam:0">>,
+                                               __IgnoreEls, _el)
+                                | Jids]);
       <<"urn:xmpp:mam:1">> ->
          decode_mam_always_els(__TopXMLNS, __IgnoreEls, _els,
-                               case decode_mam_jid(<<"urn:xmpp:mam:1">>,
-                                                   __IgnoreEls, _el)
-                                   of
-                                 undefined -> Jids;
-                                 _new_el -> [_new_el | Jids]
-                               end);
+                               [decode_mam_jid(<<"urn:xmpp:mam:1">>,
+                                               __IgnoreEls, _el)
+                                | Jids]);
       <<"urn:xmpp:mam:tmp">> ->
          decode_mam_always_els(__TopXMLNS, __IgnoreEls, _els,
-                               case decode_mam_jid(<<"urn:xmpp:mam:tmp">>,
-                                                   __IgnoreEls, _el)
-                                   of
-                                 undefined -> Jids;
-                                 _new_el -> [_new_el | Jids]
-                               end);
+                               [decode_mam_jid(<<"urn:xmpp:mam:tmp">>,
+                                               __IgnoreEls, _el)
+                                | Jids]);
       _ ->
          decode_mam_always_els(__TopXMLNS, __IgnoreEls, _els,
                                Jids)
@@ -8392,35 +8386,23 @@ decode_mam_never_els(__TopXMLNS, __IgnoreEls,
               __TopXMLNS == <<"urn:xmpp:mam:0">>;
               __TopXMLNS == <<"urn:xmpp:mam:tmp">> ->
          decode_mam_never_els(__TopXMLNS, __IgnoreEls, _els,
-                              case decode_mam_jid(__TopXMLNS, __IgnoreEls, _el)
-                                  of
-                                undefined -> Jids;
-                                _new_el -> [_new_el | Jids]
-                              end);
+                              [decode_mam_jid(__TopXMLNS, __IgnoreEls, _el)
+                               | Jids]);
       <<"urn:xmpp:mam:0">> ->
          decode_mam_never_els(__TopXMLNS, __IgnoreEls, _els,
-                              case decode_mam_jid(<<"urn:xmpp:mam:0">>,
-                                                  __IgnoreEls, _el)
-                                  of
-                                undefined -> Jids;
-                                _new_el -> [_new_el | Jids]
-                              end);
+                              [decode_mam_jid(<<"urn:xmpp:mam:0">>,
+                                              __IgnoreEls, _el)
+                               | Jids]);
       <<"urn:xmpp:mam:1">> ->
          decode_mam_never_els(__TopXMLNS, __IgnoreEls, _els,
-                              case decode_mam_jid(<<"urn:xmpp:mam:1">>,
-                                                  __IgnoreEls, _el)
-                                  of
-                                undefined -> Jids;
-                                _new_el -> [_new_el | Jids]
-                              end);
+                              [decode_mam_jid(<<"urn:xmpp:mam:1">>,
+                                              __IgnoreEls, _el)
+                               | Jids]);
       <<"urn:xmpp:mam:tmp">> ->
          decode_mam_never_els(__TopXMLNS, __IgnoreEls, _els,
-                              case decode_mam_jid(<<"urn:xmpp:mam:tmp">>,
-                                                  __IgnoreEls, _el)
-                                  of
-                                undefined -> Jids;
-                                _new_el -> [_new_el | Jids]
-                              end);
+                              [decode_mam_jid(<<"urn:xmpp:mam:tmp">>,
+                                              __IgnoreEls, _el)
+                               | Jids]);
       _ ->
          decode_mam_never_els(__TopXMLNS, __IgnoreEls, _els,
                               Jids)
@@ -8544,27 +8526,27 @@ encode_mam_result({mam_result, Xmlns, Queryid, Id,
     {xmlel, <<"result">>, _attrs, _els}.
 
 decode_mam_result_attr_queryid(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_mam_result_attr_queryid(__TopXMLNS, _val) ->
     _val.
 
-encode_mam_result_attr_queryid(undefined, _acc) -> _acc;
+encode_mam_result_attr_queryid(<<>>, _acc) -> _acc;
 encode_mam_result_attr_queryid(_val, _acc) ->
     [{<<"queryid">>, _val} | _acc].
 
 decode_mam_result_attr_xmlns(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_mam_result_attr_xmlns(__TopXMLNS, _val) -> _val.
 
-encode_mam_result_attr_xmlns(undefined, _acc) -> _acc;
+encode_mam_result_attr_xmlns(<<>>, _acc) -> _acc;
 encode_mam_result_attr_xmlns(_val, _acc) ->
     [{<<"xmlns">>, _val} | _acc].
 
 decode_mam_result_attr_id(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_mam_result_attr_id(__TopXMLNS, _val) -> _val.
 
-encode_mam_result_attr_id(undefined, _acc) -> _acc;
+encode_mam_result_attr_id(<<>>, _acc) -> _acc;
 encode_mam_result_attr_id(_val, _acc) ->
     [{<<"id">>, _val} | _acc].
 
@@ -8596,10 +8578,10 @@ encode_mam_archived({mam_archived, By, Id},
     {xmlel, <<"archived">>, _attrs, _els}.
 
 decode_mam_archived_attr_id(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_mam_archived_attr_id(__TopXMLNS, _val) -> _val.
 
-encode_mam_archived_attr_id(undefined, _acc) -> _acc;
+encode_mam_archived_attr_id(<<>>, _acc) -> _acc;
 encode_mam_archived_attr_id(_val, _acc) ->
     [{<<"id">>, _val} | _acc].
 
@@ -8797,18 +8779,18 @@ encode_mam_query({mam_query, Xmlns, Id, Start, End,
      | _acc].
 
 decode_mam_query_attr_queryid(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_mam_query_attr_queryid(__TopXMLNS, _val) -> _val.
 
-encode_mam_query_attr_queryid(undefined, _acc) -> _acc;
+encode_mam_query_attr_queryid(<<>>, _acc) -> _acc;
 encode_mam_query_attr_queryid(_val, _acc) ->
     [{<<"queryid">>, _val} | _acc].
 
 decode_mam_query_attr_xmlns(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_mam_query_attr_xmlns(__TopXMLNS, _val) -> _val.
 
-encode_mam_query_attr_xmlns(undefined, _acc) -> _acc;
+encode_mam_query_attr_xmlns(<<>>, _acc) -> _acc;
 encode_mam_query_attr_xmlns(_val, _acc) ->
     [{<<"xmlns">>, _val} | _acc].
 
@@ -9205,10 +9187,10 @@ encode_rsm_first_attr_index(undefined, _acc) -> _acc;
 encode_rsm_first_attr_index(_val, _acc) ->
     [{<<"index">>, enc_int(_val)} | _acc].
 
-decode_rsm_first_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_rsm_first_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_rsm_first_cdata(__TopXMLNS, _val) -> _val.
 
-encode_rsm_first_cdata(undefined, _acc) -> _acc;
+encode_rsm_first_cdata(<<>>, _acc) -> _acc;
 encode_rsm_first_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -9343,10 +9325,10 @@ encode_rsm_last(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"last">>, _attrs, _els}.
 
-decode_rsm_last_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_rsm_last_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_rsm_last_cdata(__TopXMLNS, _val) -> _val.
 
-encode_rsm_last_cdata(undefined, _acc) -> _acc;
+encode_rsm_last_cdata(<<>>, _acc) -> _acc;
 encode_rsm_last_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -9403,10 +9385,10 @@ encode_rsm_after(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"after">>, _attrs, _els}.
 
-decode_rsm_after_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_rsm_after_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_rsm_after_cdata(__TopXMLNS, _val) -> _val.
 
-encode_rsm_after_cdata(undefined, _acc) -> _acc;
+encode_rsm_after_cdata(<<>>, _acc) -> _acc;
 encode_rsm_after_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -9540,24 +9522,17 @@ decode_muc_subscriptions_els(__TopXMLNS, __IgnoreEls,
       <<"">> when __TopXMLNS == <<"urn:xmpp:mucsub:0">> ->
          decode_muc_subscriptions_els(__TopXMLNS, __IgnoreEls,
                                       _els,
-                                      case decode_muc_subscription(__TopXMLNS,
-                                                                   __IgnoreEls,
-                                                                   _el)
-                                          of
-                                        undefined -> List;
-                                        _new_el -> [_new_el | List]
-                                      end);
+                                      [decode_muc_subscription(__TopXMLNS,
+                                                               __IgnoreEls,
+                                                               _el)
+                                       | List]);
       <<"urn:xmpp:mucsub:0">> ->
          decode_muc_subscriptions_els(__TopXMLNS, __IgnoreEls,
                                       _els,
-                                      case
-                                        decode_muc_subscription(<<"urn:xmpp:mucsub:0">>,
-                                                                __IgnoreEls,
-                                                                _el)
-                                          of
-                                        undefined -> List;
-                                        _new_el -> [_new_el | List]
-                                      end);
+                                      [decode_muc_subscription(<<"urn:xmpp:mucsub:0">>,
+                                                               __IgnoreEls,
+                                                               _el)
+                                       | List]);
       _ ->
          decode_muc_subscriptions_els(__TopXMLNS, __IgnoreEls,
                                       _els, List)
@@ -9913,13 +9888,12 @@ encode_muc_admin_continue(Thread, _xmlns_attrs) ->
 
 decode_muc_admin_continue_attr_thread(__TopXMLNS,
                                      undefined) ->
-    undefined;
+    <<>>;
 decode_muc_admin_continue_attr_thread(__TopXMLNS,
                                      _val) ->
     _val.
 
-encode_muc_admin_continue_attr_thread(undefined,
-                                     _acc) ->
+encode_muc_admin_continue_attr_thread(<<>>, _acc) ->
     _acc;
 encode_muc_admin_continue_attr_thread(_val, _acc) ->
     [{<<"thread">>, _val} | _acc].
@@ -9973,12 +9947,11 @@ encode_muc_admin_actor_attr_jid(_val, _acc) ->
 
 decode_muc_admin_actor_attr_nick(__TopXMLNS,
                                 undefined) ->
-    undefined;
+    <<>>;
 decode_muc_admin_actor_attr_nick(__TopXMLNS, _val) ->
     _val.
 
-encode_muc_admin_actor_attr_nick(undefined, _acc) ->
-    _acc;
+encode_muc_admin_actor_attr_nick(<<>>, _acc) -> _acc;
 encode_muc_admin_actor_attr_nick(_val, _acc) ->
     [{<<"nick">>, _val} | _acc].
 
@@ -10188,12 +10161,11 @@ encode_muc_admin_item_attr_jid(_val, _acc) ->
 
 decode_muc_admin_item_attr_nick(__TopXMLNS,
                                undefined) ->
-    undefined;
+    <<>>;
 decode_muc_admin_item_attr_nick(__TopXMLNS, _val) ->
     _val.
 
-encode_muc_admin_item_attr_nick(undefined, _acc) ->
-    _acc;
+encode_muc_admin_item_attr_nick(<<>>, _acc) -> _acc;
 encode_muc_admin_item_attr_nick(_val, _acc) ->
     [{<<"nick">>, _val} | _acc].
 
@@ -10394,12 +10366,11 @@ encode_muc_owner_item_attr_jid(_val, _acc) ->
 
 decode_muc_owner_item_attr_nick(__TopXMLNS,
                                undefined) ->
-    undefined;
+    <<>>;
 decode_muc_owner_item_attr_nick(__TopXMLNS, _val) ->
     _val.
 
-encode_muc_owner_item_attr_nick(undefined, _acc) ->
-    _acc;
+encode_muc_owner_item_attr_nick(<<>>, _acc) -> _acc;
 encode_muc_owner_item_attr_nick(_val, _acc) ->
     [{<<"nick">>, _val} | _acc].
 
@@ -10526,11 +10497,10 @@ encode_muc_password(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"password">>, _attrs, _els}.
 
-decode_muc_password_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_muc_password_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_muc_password_cdata(__TopXMLNS, _val) -> _val.
 
-encode_muc_password_cdata(undefined, _acc) -> _acc;
+encode_muc_password_cdata(<<>>, _acc) -> _acc;
 encode_muc_password_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -10969,11 +10939,11 @@ encode_muc_user_item_attr_jid(_val, _acc) ->
     [{<<"jid">>, enc_jid(_val)} | _acc].
 
 decode_muc_user_item_attr_nick(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_muc_user_item_attr_nick(__TopXMLNS, _val) ->
     _val.
 
-encode_muc_user_item_attr_nick(undefined, _acc) -> _acc;
+encode_muc_user_item_attr_nick(<<>>, _acc) -> _acc;
 encode_muc_user_item_attr_nick(_val, _acc) ->
     [{<<"nick">>, _val} | _acc].
 
@@ -11042,12 +11012,12 @@ encode_muc_user_continue(Thread, _xmlns_attrs) ->
 
 decode_muc_user_continue_attr_thread(__TopXMLNS,
                                     undefined) ->
-    undefined;
+    <<>>;
 decode_muc_user_continue_attr_thread(__TopXMLNS,
                                     _val) ->
     _val.
 
-encode_muc_user_continue_attr_thread(undefined, _acc) ->
+encode_muc_user_continue_attr_thread(<<>>, _acc) ->
     _acc;
 encode_muc_user_continue_attr_thread(_val, _acc) ->
     [{<<"thread">>, _val} | _acc].
@@ -11099,12 +11069,11 @@ encode_muc_user_actor_attr_jid(_val, _acc) ->
 
 decode_muc_user_actor_attr_nick(__TopXMLNS,
                                undefined) ->
-    undefined;
+    <<>>;
 decode_muc_user_actor_attr_nick(__TopXMLNS, _val) ->
     _val.
 
-encode_muc_user_actor_attr_nick(undefined, _acc) ->
-    _acc;
+encode_muc_user_actor_attr_nick(<<>>, _acc) -> _acc;
 encode_muc_user_actor_attr_nick(_val, _acc) ->
     [{<<"nick">>, _val} | _acc].
 
@@ -11378,10 +11347,10 @@ encode_muc_destroy_attr_jid(_val, _acc) ->
     [{<<"jid">>, enc_jid(_val)} | _acc].
 
 decode_muc_destroy_attr_xmlns(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_muc_destroy_attr_xmlns(__TopXMLNS, _val) -> _val.
 
-encode_muc_destroy_attr_xmlns(undefined, _acc) -> _acc;
+encode_muc_destroy_attr_xmlns(<<>>, _acc) -> _acc;
 encode_muc_destroy_attr_xmlns(_val, _acc) ->
     [{<<"xmlns">>, _val} | _acc].
 
@@ -11518,10 +11487,10 @@ encode_muc_reason(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"reason">>, _attrs, _els}.
 
-decode_muc_reason_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_muc_reason_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_muc_reason_cdata(__TopXMLNS, _val) -> _val.
 
-encode_muc_reason_cdata(undefined, _acc) -> _acc;
+encode_muc_reason_cdata(<<>>, _acc) -> _acc;
 encode_muc_reason_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -11781,20 +11750,19 @@ encode_bytestreams({bytestreams, Hosts, Used, Activate,
 
 decode_bytestreams_attr_dstaddr(__TopXMLNS,
                                undefined) ->
-    undefined;
+    <<>>;
 decode_bytestreams_attr_dstaddr(__TopXMLNS, _val) ->
     _val.
 
-encode_bytestreams_attr_dstaddr(undefined, _acc) ->
-    _acc;
+encode_bytestreams_attr_dstaddr(<<>>, _acc) -> _acc;
 encode_bytestreams_attr_dstaddr(_val, _acc) ->
     [{<<"dstaddr">>, _val} | _acc].
 
 decode_bytestreams_attr_sid(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_bytestreams_attr_sid(__TopXMLNS, _val) -> _val.
 
-encode_bytestreams_attr_sid(undefined, _acc) -> _acc;
+encode_bytestreams_attr_sid(<<>>, _acc) -> _acc;
 encode_bytestreams_attr_sid(_val, _acc) ->
     [{<<"sid">>, _val} | _acc].
 
@@ -12206,10 +12174,10 @@ decode_shim_header_attr_name(__TopXMLNS, _val) -> _val.
 encode_shim_header_attr_name(_val, _acc) ->
     [{<<"name">>, _val} | _acc].
 
-decode_shim_header_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_shim_header_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_shim_header_cdata(__TopXMLNS, _val) -> _val.
 
-encode_shim_header_cdata(undefined, _acc) -> _acc;
+encode_shim_header_cdata(<<>>, _acc) -> _acc;
 encode_shim_header_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -12642,23 +12610,21 @@ encode_pubsub_options({pubsub_options, Node, Jid, Subid,
 
 decode_pubsub_options_attr_node(__TopXMLNS,
                                undefined) ->
-    undefined;
+    <<>>;
 decode_pubsub_options_attr_node(__TopXMLNS, _val) ->
     _val.
 
-encode_pubsub_options_attr_node(undefined, _acc) ->
-    _acc;
+encode_pubsub_options_attr_node(<<>>, _acc) -> _acc;
 encode_pubsub_options_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
 decode_pubsub_options_attr_subid(__TopXMLNS,
                                 undefined) ->
-    undefined;
+    <<>>;
 decode_pubsub_options_attr_subid(__TopXMLNS, _val) ->
     _val.
 
-encode_pubsub_options_attr_subid(undefined, _acc) ->
-    _acc;
+encode_pubsub_options_attr_subid(<<>>, _acc) -> _acc;
 encode_pubsub_options_attr_subid(_val, _acc) ->
     [{<<"subid">>, _val} | _acc].
 
@@ -12790,23 +12756,22 @@ encode_pubsub_unsubscribe({pubsub_unsubscribe, Node,
 
 decode_pubsub_unsubscribe_attr_node(__TopXMLNS,
                                    undefined) ->
-    undefined;
+    <<>>;
 decode_pubsub_unsubscribe_attr_node(__TopXMLNS, _val) ->
     _val.
 
-encode_pubsub_unsubscribe_attr_node(undefined, _acc) ->
-    _acc;
+encode_pubsub_unsubscribe_attr_node(<<>>, _acc) -> _acc;
 encode_pubsub_unsubscribe_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
 decode_pubsub_unsubscribe_attr_subid(__TopXMLNS,
                                     undefined) ->
-    undefined;
+    <<>>;
 decode_pubsub_unsubscribe_attr_subid(__TopXMLNS,
                                     _val) ->
     _val.
 
-encode_pubsub_unsubscribe_attr_subid(undefined, _acc) ->
+encode_pubsub_unsubscribe_attr_subid(<<>>, _acc) ->
     _acc;
 encode_pubsub_unsubscribe_attr_subid(_val, _acc) ->
     [{<<"subid">>, _val} | _acc].
@@ -12861,12 +12826,11 @@ encode_pubsub_subscribe({pubsub_subscribe, Node, Jid},
 
 decode_pubsub_subscribe_attr_node(__TopXMLNS,
                                  undefined) ->
-    undefined;
+    <<>>;
 decode_pubsub_subscribe_attr_node(__TopXMLNS, _val) ->
     _val.
 
-encode_pubsub_subscribe_attr_node(undefined, _acc) ->
-    _acc;
+encode_pubsub_subscribe_attr_node(<<>>, _acc) -> _acc;
 encode_pubsub_subscribe_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
@@ -13021,12 +12985,12 @@ encode_pubsub_subscriptions({Node, Subscriptions},
 
 decode_pubsub_subscriptions_attr_node(__TopXMLNS,
                                      undefined) ->
-    none;
+    <<>>;
 decode_pubsub_subscriptions_attr_node(__TopXMLNS,
                                      _val) ->
     _val.
 
-encode_pubsub_subscriptions_attr_node(none, _acc) ->
+encode_pubsub_subscriptions_attr_node(<<>>, _acc) ->
     _acc;
 encode_pubsub_subscriptions_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
@@ -13251,35 +13215,32 @@ encode_pubsub_event_item({pubsub_event_item, Id, Node,
 
 decode_pubsub_event_item_attr_id(__TopXMLNS,
                                 undefined) ->
-    undefined;
+    <<>>;
 decode_pubsub_event_item_attr_id(__TopXMLNS, _val) ->
     _val.
 
-encode_pubsub_event_item_attr_id(undefined, _acc) ->
-    _acc;
+encode_pubsub_event_item_attr_id(<<>>, _acc) -> _acc;
 encode_pubsub_event_item_attr_id(_val, _acc) ->
     [{<<"id">>, _val} | _acc].
 
 decode_pubsub_event_item_attr_node(__TopXMLNS,
                                   undefined) ->
-    undefined;
+    <<>>;
 decode_pubsub_event_item_attr_node(__TopXMLNS, _val) ->
     _val.
 
-encode_pubsub_event_item_attr_node(undefined, _acc) ->
-    _acc;
+encode_pubsub_event_item_attr_node(<<>>, _acc) -> _acc;
 encode_pubsub_event_item_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
 decode_pubsub_event_item_attr_publisher(__TopXMLNS,
                                        undefined) ->
-    undefined;
+    <<>>;
 decode_pubsub_event_item_attr_publisher(__TopXMLNS,
                                        _val) ->
     _val.
 
-encode_pubsub_event_item_attr_publisher(undefined,
-                                       _acc) ->
+encode_pubsub_event_item_attr_publisher(<<>>, _acc) ->
     _acc;
 encode_pubsub_event_item_attr_publisher(_val, _acc) ->
     [{<<"publisher">>, _val} | _acc].
@@ -13421,11 +13382,11 @@ encode_pubsub_items_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
 decode_pubsub_items_attr_subid(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_pubsub_items_attr_subid(__TopXMLNS, _val) ->
     _val.
 
-encode_pubsub_items_attr_subid(undefined, _acc) -> _acc;
+encode_pubsub_items_attr_subid(<<>>, _acc) -> _acc;
 encode_pubsub_items_attr_subid(_val, _acc) ->
     [{<<"subid">>, _val} | _acc].
 
@@ -13465,10 +13426,10 @@ encode_pubsub_item({pubsub_item, Id, __Xmls},
     {xmlel, <<"item">>, _attrs, _els}.
 
 decode_pubsub_item_attr_id(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_pubsub_item_attr_id(__TopXMLNS, _val) -> _val.
 
-encode_pubsub_item_attr_id(undefined, _acc) -> _acc;
+encode_pubsub_item_attr_id(<<>>, _acc) -> _acc;
 encode_pubsub_item_attr_id(_val, _acc) ->
     [{<<"id">>, _val} | _acc].
 
@@ -13613,25 +13574,24 @@ encode_pubsub_subscription_attr_jid(_val, _acc) ->
 
 decode_pubsub_subscription_attr_node(__TopXMLNS,
                                     undefined) ->
-    undefined;
+    <<>>;
 decode_pubsub_subscription_attr_node(__TopXMLNS,
                                     _val) ->
     _val.
 
-encode_pubsub_subscription_attr_node(undefined, _acc) ->
+encode_pubsub_subscription_attr_node(<<>>, _acc) ->
     _acc;
 encode_pubsub_subscription_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
 decode_pubsub_subscription_attr_subid(__TopXMLNS,
                                      undefined) ->
-    undefined;
+    <<>>;
 decode_pubsub_subscription_attr_subid(__TopXMLNS,
                                      _val) ->
     _val.
 
-encode_pubsub_subscription_attr_subid(undefined,
-                                     _acc) ->
+encode_pubsub_subscription_attr_subid(<<>>, _acc) ->
     _acc;
 encode_pubsub_subscription_attr_subid(_val, _acc) ->
     [{<<"subid">>, _val} | _acc].
@@ -13679,22 +13639,16 @@ decode_xdata_els(__TopXMLNS, __IgnoreEls,
       <<"">> when __TopXMLNS == <<"jabber:x:data">> ->
          decode_xdata_els(__TopXMLNS, __IgnoreEls, _els, Fields,
                           Items,
-                          case decode_xdata_instructions(__TopXMLNS,
-                                                         __IgnoreEls, _el)
-                              of
-                            undefined -> Instructions;
-                            _new_el -> [_new_el | Instructions]
-                          end,
+                          [decode_xdata_instructions(__TopXMLNS, __IgnoreEls,
+                                                     _el)
+                           | Instructions],
                           Reported, Title);
       <<"jabber:x:data">> ->
          decode_xdata_els(__TopXMLNS, __IgnoreEls, _els, Fields,
                           Items,
-                          case decode_xdata_instructions(<<"jabber:x:data">>,
-                                                         __IgnoreEls, _el)
-                              of
-                            undefined -> Instructions;
-                            _new_el -> [_new_el | Instructions]
-                          end,
+                          [decode_xdata_instructions(<<"jabber:x:data">>,
+                                                     __IgnoreEls, _el)
+                           | Instructions],
                           Reported, Title);
       _ ->
          decode_xdata_els(__TopXMLNS, __IgnoreEls, _els, Fields,
@@ -13951,10 +13905,10 @@ encode_xdata_title(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"title">>, _attrs, _els}.
 
-decode_xdata_title_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_xdata_title_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_xdata_title_cdata(__TopXMLNS, _val) -> _val.
 
-encode_xdata_title_cdata(undefined, _acc) -> _acc;
+encode_xdata_title_cdata(<<>>, _acc) -> _acc;
 encode_xdata_title_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -13982,12 +13936,11 @@ encode_xdata_instructions(Cdata, _xmlns_attrs) ->
     {xmlel, <<"instructions">>, _attrs, _els}.
 
 decode_xdata_instructions_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+    <<>>;
 decode_xdata_instructions_cdata(__TopXMLNS, _val) ->
     _val.
 
-encode_xdata_instructions_cdata(undefined, _acc) ->
-    _acc;
+encode_xdata_instructions_cdata(<<>>, _acc) -> _acc;
 encode_xdata_instructions_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -14053,23 +14006,16 @@ decode_xdata_field_els(__TopXMLNS, __IgnoreEls,
       <<"">> when __TopXMLNS == <<"jabber:x:data">> ->
          decode_xdata_field_els(__TopXMLNS, __IgnoreEls, _els,
                                 Options,
-                                case decode_xdata_field_value(__TopXMLNS,
-                                                              __IgnoreEls, _el)
-                                    of
-                                  undefined -> Values;
-                                  _new_el -> [_new_el | Values]
-                                end,
+                                [decode_xdata_field_value(__TopXMLNS,
+                                                          __IgnoreEls, _el)
+                                 | Values],
                                 Desc, Required, __Els);
       <<"jabber:x:data">> ->
          decode_xdata_field_els(__TopXMLNS, __IgnoreEls, _els,
                                 Options,
-                                case
-                                  decode_xdata_field_value(<<"jabber:x:data">>,
-                                                           __IgnoreEls, _el)
-                                    of
-                                  undefined -> Values;
-                                  _new_el -> [_new_el | Values]
-                                end,
+                                [decode_xdata_field_value(<<"jabber:x:data">>,
+                                                          __IgnoreEls, _el)
+                                 | Values],
                                 Desc, Required, __Els);
       _ ->
          decode_xdata_field_els(__TopXMLNS, __IgnoreEls, _els,
@@ -14175,10 +14121,10 @@ encode_xdata_field({xdata_field, Label, Type, Var,
     [encode_xdata_field_required(Required, []) | _acc].
 
 decode_xdata_field_attr_label(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_xdata_field_attr_label(__TopXMLNS, _val) -> _val.
 
-encode_xdata_field_attr_label(undefined, _acc) -> _acc;
+encode_xdata_field_attr_label(<<>>, _acc) -> _acc;
 encode_xdata_field_attr_label(_val, _acc) ->
     [{<<"label">>, _val} | _acc].
 
@@ -14201,10 +14147,10 @@ encode_xdata_field_attr_type(_val, _acc) ->
     [{<<"type">>, enc_enum(_val)} | _acc].
 
 decode_xdata_field_attr_var(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_xdata_field_attr_var(__TopXMLNS, _val) -> _val.
 
-encode_xdata_field_attr_var(undefined, _acc) -> _acc;
+encode_xdata_field_attr_var(<<>>, _acc) -> _acc;
 encode_xdata_field_attr_var(_val, _acc) ->
     [{<<"var">>, _val} | _acc].
 
@@ -14277,12 +14223,12 @@ encode_xdata_field_option({xdata_option, Label, Value},
 
 decode_xdata_field_option_attr_label(__TopXMLNS,
                                     undefined) ->
-    undefined;
+    <<>>;
 decode_xdata_field_option_attr_label(__TopXMLNS,
                                     _val) ->
     _val.
 
-encode_xdata_field_option_attr_label(undefined, _acc) ->
+encode_xdata_field_option_attr_label(<<>>, _acc) ->
     _acc;
 encode_xdata_field_option_attr_label(_val, _acc) ->
     [{<<"label">>, _val} | _acc].
@@ -14311,11 +14257,11 @@ encode_xdata_field_value(Cdata, _xmlns_attrs) ->
     {xmlel, <<"value">>, _attrs, _els}.
 
 decode_xdata_field_value_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+    <<>>;
 decode_xdata_field_value_cdata(__TopXMLNS, _val) ->
     _val.
 
-encode_xdata_field_value_cdata(undefined, _acc) -> _acc;
+encode_xdata_field_value_cdata(<<>>, _acc) -> _acc;
 encode_xdata_field_value_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -14342,11 +14288,10 @@ encode_xdata_field_desc(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"desc">>, _attrs, _els}.
 
-decode_xdata_field_desc_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_xdata_field_desc_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_xdata_field_desc_cdata(__TopXMLNS, _val) -> _val.
 
-encode_xdata_field_desc_cdata(undefined, _acc) -> _acc;
+encode_xdata_field_desc_cdata(<<>>, _acc) -> _acc;
 encode_xdata_field_desc_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -14363,7 +14308,7 @@ decode_vcard_xupdate(__TopXMLNS, __IgnoreEls,
                     {xmlel, <<"x">>, _attrs, _els}) ->
     Hash = decode_vcard_xupdate_els(__TopXMLNS, __IgnoreEls,
                                    _els, undefined),
-    {vcard_xupdate, undefined, Hash}.
+    {vcard_xupdate, {<<>>, <<>>}, Hash}.
 
 decode_vcard_xupdate_els(__TopXMLNS, __IgnoreEls, [],
                         Hash) ->
@@ -14391,7 +14336,7 @@ decode_vcard_xupdate_els(__TopXMLNS, __IgnoreEls,
     decode_vcard_xupdate_els(__TopXMLNS, __IgnoreEls, _els,
                             Hash).
 
-encode_vcard_xupdate({vcard_xupdate, undefined, Hash},
+encode_vcard_xupdate({vcard_xupdate, _, Hash},
                     _xmlns_attrs) ->
     _els = lists:reverse('encode_vcard_xupdate_$hash'(Hash,
                                                      [])),
@@ -14426,12 +14371,11 @@ encode_vcard_xupdate_photo(Cdata, _xmlns_attrs) ->
     {xmlel, <<"photo">>, _attrs, _els}.
 
 decode_vcard_xupdate_photo_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+    <<>>;
 decode_vcard_xupdate_photo_cdata(__TopXMLNS, _val) ->
     _val.
 
-encode_vcard_xupdate_photo_cdata(undefined, _acc) ->
-    _acc;
+encode_vcard_xupdate_photo_cdata(<<>>, _acc) -> _acc;
 encode_vcard_xupdate_photo_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -15677,23 +15621,15 @@ decode_vcard_CATEGORIES_els(__TopXMLNS, __IgnoreEls,
       <<"">> when __TopXMLNS == <<"vcard-temp">> ->
          decode_vcard_CATEGORIES_els(__TopXMLNS, __IgnoreEls,
                                      _els,
-                                     case decode_vcard_KEYWORD(__TopXMLNS,
-                                                               __IgnoreEls,
-                                                               _el)
-                                         of
-                                       undefined -> Keywords;
-                                       _new_el -> [_new_el | Keywords]
-                                     end);
+                                     [decode_vcard_KEYWORD(__TopXMLNS,
+                                                           __IgnoreEls, _el)
+                                      | Keywords]);
       <<"vcard-temp">> ->
          decode_vcard_CATEGORIES_els(__TopXMLNS, __IgnoreEls,
                                      _els,
-                                     case
-                                       decode_vcard_KEYWORD(<<"vcard-temp">>,
-                                                            __IgnoreEls, _el)
-                                         of
-                                       undefined -> Keywords;
-                                       _new_el -> [_new_el | Keywords]
-                                     end);
+                                     [decode_vcard_KEYWORD(<<"vcard-temp">>,
+                                                           __IgnoreEls, _el)
+                                      | Keywords]);
       _ ->
          decode_vcard_CATEGORIES_els(__TopXMLNS, __IgnoreEls,
                                      _els, Keywords)
@@ -15909,21 +15845,15 @@ decode_vcard_ORG_els(__TopXMLNS, __IgnoreEls,
     case get_attr(<<"xmlns">>, _attrs) of
       <<"">> when __TopXMLNS == <<"vcard-temp">> ->
          decode_vcard_ORG_els(__TopXMLNS, __IgnoreEls, _els,
-                              case decode_vcard_ORGUNIT(__TopXMLNS,
-                                                        __IgnoreEls, _el)
-                                  of
-                                undefined -> Units;
-                                _new_el -> [_new_el | Units]
-                              end,
+                              [decode_vcard_ORGUNIT(__TopXMLNS, __IgnoreEls,
+                                                    _el)
+                               | Units],
                               Name);
       <<"vcard-temp">> ->
          decode_vcard_ORG_els(__TopXMLNS, __IgnoreEls, _els,
-                              case decode_vcard_ORGUNIT(<<"vcard-temp">>,
-                                                        __IgnoreEls, _el)
-                                  of
-                                undefined -> Units;
-                                _new_el -> [_new_el | Units]
-                              end,
+                              [decode_vcard_ORGUNIT(<<"vcard-temp">>,
+                                                    __IgnoreEls, _el)
+                               | Units],
                               Name);
       _ ->
          decode_vcard_ORG_els(__TopXMLNS, __IgnoreEls, _els,
@@ -16157,8 +16087,7 @@ encode_vcard_BINVAL(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"BINVAL">>, _attrs, _els}.
 
-decode_vcard_BINVAL_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_vcard_BINVAL_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_BINVAL_cdata(__TopXMLNS, _val) ->
     case catch base64:decode(_val) of
       {'EXIT', _} ->
@@ -16167,7 +16096,7 @@ decode_vcard_BINVAL_cdata(__TopXMLNS, _val) ->
       _res -> _res
     end.
 
-encode_vcard_BINVAL_cdata(undefined, _acc) -> _acc;
+encode_vcard_BINVAL_cdata(<<>>, _acc) -> _acc;
 encode_vcard_BINVAL_cdata(_val, _acc) ->
     [{xmlcdata, base64:encode(_val)} | _acc].
 
@@ -16977,21 +16906,15 @@ decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls,
     case get_attr(<<"xmlns">>, _attrs) of
       <<"">> when __TopXMLNS == <<"vcard-temp">> ->
          decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                case decode_vcard_LINE(__TopXMLNS, __IgnoreEls,
-                                                       _el)
-                                    of
-                                  undefined -> Line;
-                                  _new_el -> [_new_el | Line]
-                                end,
+                                [decode_vcard_LINE(__TopXMLNS, __IgnoreEls,
+                                                   _el)
+                                 | Line],
                                 Home, Pref, Work, Intl, Parcel, Postal, Dom);
       <<"vcard-temp">> ->
          decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                case decode_vcard_LINE(<<"vcard-temp">>,
-                                                       __IgnoreEls, _el)
-                                    of
-                                  undefined -> Line;
-                                  _new_el -> [_new_el | Line]
-                                end,
+                                [decode_vcard_LINE(<<"vcard-temp">>,
+                                                   __IgnoreEls, _el)
+                                 | Line],
                                 Home, Pref, Work, Intl, Parcel, Postal, Dom);
       _ ->
          decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
@@ -17679,11 +17602,10 @@ encode_vcard_EXTVAL(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"EXTVAL">>, _attrs, _els}.
 
-decode_vcard_EXTVAL_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_vcard_EXTVAL_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_EXTVAL_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_EXTVAL_cdata(undefined, _acc) -> _acc;
+encode_vcard_EXTVAL_cdata(<<>>, _acc) -> _acc;
 encode_vcard_EXTVAL_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -17710,10 +17632,10 @@ encode_vcard_TYPE(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"TYPE">>, _attrs, _els}.
 
-decode_vcard_TYPE_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_TYPE_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_TYPE_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_TYPE_cdata(undefined, _acc) -> _acc;
+encode_vcard_TYPE_cdata(<<>>, _acc) -> _acc;
 encode_vcard_TYPE_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -17740,10 +17662,10 @@ encode_vcard_DESC(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"DESC">>, _attrs, _els}.
 
-decode_vcard_DESC_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_DESC_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_DESC_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_DESC_cdata(undefined, _acc) -> _acc;
+encode_vcard_DESC_cdata(<<>>, _acc) -> _acc;
 encode_vcard_DESC_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -17770,10 +17692,10 @@ encode_vcard_URL(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"URL">>, _attrs, _els}.
 
-decode_vcard_URL_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_URL_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_URL_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_URL_cdata(undefined, _acc) -> _acc;
+encode_vcard_URL_cdata(<<>>, _acc) -> _acc;
 encode_vcard_URL_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -17800,10 +17722,10 @@ encode_vcard_UID(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"UID">>, _attrs, _els}.
 
-decode_vcard_UID_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_UID_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_UID_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_UID_cdata(undefined, _acc) -> _acc;
+encode_vcard_UID_cdata(<<>>, _acc) -> _acc;
 encode_vcard_UID_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -17831,11 +17753,11 @@ encode_vcard_SORT_STRING(Cdata, _xmlns_attrs) ->
     {xmlel, <<"SORT-STRING">>, _attrs, _els}.
 
 decode_vcard_SORT_STRING_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+    <<>>;
 decode_vcard_SORT_STRING_cdata(__TopXMLNS, _val) ->
     _val.
 
-encode_vcard_SORT_STRING_cdata(undefined, _acc) -> _acc;
+encode_vcard_SORT_STRING_cdata(<<>>, _acc) -> _acc;
 encode_vcard_SORT_STRING_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -17862,10 +17784,10 @@ encode_vcard_REV(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"REV">>, _attrs, _els}.
 
-decode_vcard_REV_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_REV_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_REV_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_REV_cdata(undefined, _acc) -> _acc;
+encode_vcard_REV_cdata(<<>>, _acc) -> _acc;
 encode_vcard_REV_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -17892,11 +17814,10 @@ encode_vcard_PRODID(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"PRODID">>, _attrs, _els}.
 
-decode_vcard_PRODID_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_vcard_PRODID_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_PRODID_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_PRODID_cdata(undefined, _acc) -> _acc;
+encode_vcard_PRODID_cdata(<<>>, _acc) -> _acc;
 encode_vcard_PRODID_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -17923,10 +17844,10 @@ encode_vcard_NOTE(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"NOTE">>, _attrs, _els}.
 
-decode_vcard_NOTE_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_NOTE_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_NOTE_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_NOTE_cdata(undefined, _acc) -> _acc;
+encode_vcard_NOTE_cdata(<<>>, _acc) -> _acc;
 encode_vcard_NOTE_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -17953,11 +17874,10 @@ encode_vcard_KEYWORD(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"KEYWORD">>, _attrs, _els}.
 
-decode_vcard_KEYWORD_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_vcard_KEYWORD_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_KEYWORD_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_KEYWORD_cdata(undefined, _acc) -> _acc;
+encode_vcard_KEYWORD_cdata(<<>>, _acc) -> _acc;
 encode_vcard_KEYWORD_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -17984,10 +17904,10 @@ encode_vcard_ROLE(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"ROLE">>, _attrs, _els}.
 
-decode_vcard_ROLE_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_ROLE_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_ROLE_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_ROLE_cdata(undefined, _acc) -> _acc;
+encode_vcard_ROLE_cdata(<<>>, _acc) -> _acc;
 encode_vcard_ROLE_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18014,10 +17934,10 @@ encode_vcard_TITLE(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"TITLE">>, _attrs, _els}.
 
-decode_vcard_TITLE_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_TITLE_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_TITLE_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_TITLE_cdata(undefined, _acc) -> _acc;
+encode_vcard_TITLE_cdata(<<>>, _acc) -> _acc;
 encode_vcard_TITLE_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18044,10 +17964,10 @@ encode_vcard_TZ(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"TZ">>, _attrs, _els}.
 
-decode_vcard_TZ_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_TZ_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_TZ_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_TZ_cdata(undefined, _acc) -> _acc;
+encode_vcard_TZ_cdata(<<>>, _acc) -> _acc;
 encode_vcard_TZ_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18074,11 +17994,10 @@ encode_vcard_MAILER(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"MAILER">>, _attrs, _els}.
 
-decode_vcard_MAILER_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_vcard_MAILER_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_MAILER_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_MAILER_cdata(undefined, _acc) -> _acc;
+encode_vcard_MAILER_cdata(<<>>, _acc) -> _acc;
 encode_vcard_MAILER_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18105,11 +18024,10 @@ encode_vcard_JABBERID(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"JABBERID">>, _attrs, _els}.
 
-decode_vcard_JABBERID_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_vcard_JABBERID_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_JABBERID_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_JABBERID_cdata(undefined, _acc) -> _acc;
+encode_vcard_JABBERID_cdata(<<>>, _acc) -> _acc;
 encode_vcard_JABBERID_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18136,10 +18054,10 @@ encode_vcard_BDAY(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"BDAY">>, _attrs, _els}.
 
-decode_vcard_BDAY_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_BDAY_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_BDAY_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_BDAY_cdata(undefined, _acc) -> _acc;
+encode_vcard_BDAY_cdata(<<>>, _acc) -> _acc;
 encode_vcard_BDAY_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18166,11 +18084,10 @@ encode_vcard_NICKNAME(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"NICKNAME">>, _attrs, _els}.
 
-decode_vcard_NICKNAME_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_vcard_NICKNAME_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_NICKNAME_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_NICKNAME_cdata(undefined, _acc) -> _acc;
+encode_vcard_NICKNAME_cdata(<<>>, _acc) -> _acc;
 encode_vcard_NICKNAME_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18197,10 +18114,10 @@ encode_vcard_FN(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"FN">>, _attrs, _els}.
 
-decode_vcard_FN_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_FN_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_FN_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_FN_cdata(undefined, _acc) -> _acc;
+encode_vcard_FN_cdata(<<>>, _acc) -> _acc;
 encode_vcard_FN_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18227,11 +18144,10 @@ encode_vcard_VERSION(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"VERSION">>, _attrs, _els}.
 
-decode_vcard_VERSION_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_vcard_VERSION_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_VERSION_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_VERSION_cdata(undefined, _acc) -> _acc;
+encode_vcard_VERSION_cdata(<<>>, _acc) -> _acc;
 encode_vcard_VERSION_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18258,10 +18174,10 @@ encode_vcard_CRED(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"CRED">>, _attrs, _els}.
 
-decode_vcard_CRED_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_CRED_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_CRED_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_CRED_cdata(undefined, _acc) -> _acc;
+encode_vcard_CRED_cdata(<<>>, _acc) -> _acc;
 encode_vcard_CRED_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18288,11 +18204,10 @@ encode_vcard_PHONETIC(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"PHONETIC">>, _attrs, _els}.
 
-decode_vcard_PHONETIC_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_vcard_PHONETIC_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_PHONETIC_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_PHONETIC_cdata(undefined, _acc) -> _acc;
+encode_vcard_PHONETIC_cdata(<<>>, _acc) -> _acc;
 encode_vcard_PHONETIC_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18319,11 +18234,10 @@ encode_vcard_ORGUNIT(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"ORGUNIT">>, _attrs, _els}.
 
-decode_vcard_ORGUNIT_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_vcard_ORGUNIT_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_ORGUNIT_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_ORGUNIT_cdata(undefined, _acc) -> _acc;
+encode_vcard_ORGUNIT_cdata(<<>>, _acc) -> _acc;
 encode_vcard_ORGUNIT_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18350,11 +18264,10 @@ encode_vcard_ORGNAME(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"ORGNAME">>, _attrs, _els}.
 
-decode_vcard_ORGNAME_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_vcard_ORGNAME_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_ORGNAME_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_ORGNAME_cdata(undefined, _acc) -> _acc;
+encode_vcard_ORGNAME_cdata(<<>>, _acc) -> _acc;
 encode_vcard_ORGNAME_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18381,10 +18294,10 @@ encode_vcard_LON(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"LON">>, _attrs, _els}.
 
-decode_vcard_LON_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_LON_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_LON_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_LON_cdata(undefined, _acc) -> _acc;
+encode_vcard_LON_cdata(<<>>, _acc) -> _acc;
 encode_vcard_LON_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18411,10 +18324,10 @@ encode_vcard_LAT(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"LAT">>, _attrs, _els}.
 
-decode_vcard_LAT_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_LAT_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_LAT_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_LAT_cdata(undefined, _acc) -> _acc;
+encode_vcard_LAT_cdata(<<>>, _acc) -> _acc;
 encode_vcard_LAT_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18441,11 +18354,10 @@ encode_vcard_USERID(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"USERID">>, _attrs, _els}.
 
-decode_vcard_USERID_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_vcard_USERID_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_USERID_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_USERID_cdata(undefined, _acc) -> _acc;
+encode_vcard_USERID_cdata(<<>>, _acc) -> _acc;
 encode_vcard_USERID_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18472,11 +18384,10 @@ encode_vcard_NUMBER(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"NUMBER">>, _attrs, _els}.
 
-decode_vcard_NUMBER_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_vcard_NUMBER_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_NUMBER_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_NUMBER_cdata(undefined, _acc) -> _acc;
+encode_vcard_NUMBER_cdata(<<>>, _acc) -> _acc;
 encode_vcard_NUMBER_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18503,10 +18414,10 @@ encode_vcard_LINE(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"LINE">>, _attrs, _els}.
 
-decode_vcard_LINE_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_LINE_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_LINE_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_LINE_cdata(undefined, _acc) -> _acc;
+encode_vcard_LINE_cdata(<<>>, _acc) -> _acc;
 encode_vcard_LINE_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18533,10 +18444,10 @@ encode_vcard_CTRY(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"CTRY">>, _attrs, _els}.
 
-decode_vcard_CTRY_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_CTRY_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_CTRY_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_CTRY_cdata(undefined, _acc) -> _acc;
+encode_vcard_CTRY_cdata(<<>>, _acc) -> _acc;
 encode_vcard_CTRY_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18563,10 +18474,10 @@ encode_vcard_PCODE(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"PCODE">>, _attrs, _els}.
 
-decode_vcard_PCODE_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_PCODE_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_PCODE_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_PCODE_cdata(undefined, _acc) -> _acc;
+encode_vcard_PCODE_cdata(<<>>, _acc) -> _acc;
 encode_vcard_PCODE_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18593,11 +18504,10 @@ encode_vcard_REGION(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"REGION">>, _attrs, _els}.
 
-decode_vcard_REGION_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_vcard_REGION_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_REGION_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_REGION_cdata(undefined, _acc) -> _acc;
+encode_vcard_REGION_cdata(<<>>, _acc) -> _acc;
 encode_vcard_REGION_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18624,11 +18534,10 @@ encode_vcard_LOCALITY(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"LOCALITY">>, _attrs, _els}.
 
-decode_vcard_LOCALITY_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_vcard_LOCALITY_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_LOCALITY_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_LOCALITY_cdata(undefined, _acc) -> _acc;
+encode_vcard_LOCALITY_cdata(<<>>, _acc) -> _acc;
 encode_vcard_LOCALITY_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18655,11 +18564,10 @@ encode_vcard_STREET(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"STREET">>, _attrs, _els}.
 
-decode_vcard_STREET_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_vcard_STREET_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_STREET_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_STREET_cdata(undefined, _acc) -> _acc;
+encode_vcard_STREET_cdata(<<>>, _acc) -> _acc;
 encode_vcard_STREET_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18686,11 +18594,10 @@ encode_vcard_EXTADD(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"EXTADD">>, _attrs, _els}.
 
-decode_vcard_EXTADD_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_vcard_EXTADD_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_EXTADD_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_EXTADD_cdata(undefined, _acc) -> _acc;
+encode_vcard_EXTADD_cdata(<<>>, _acc) -> _acc;
 encode_vcard_EXTADD_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18717,10 +18624,10 @@ encode_vcard_POBOX(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"POBOX">>, _attrs, _els}.
 
-decode_vcard_POBOX_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_POBOX_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_POBOX_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_POBOX_cdata(undefined, _acc) -> _acc;
+encode_vcard_POBOX_cdata(<<>>, _acc) -> _acc;
 encode_vcard_POBOX_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18747,11 +18654,10 @@ encode_vcard_SUFFIX(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"SUFFIX">>, _attrs, _els}.
 
-decode_vcard_SUFFIX_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_vcard_SUFFIX_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_SUFFIX_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_SUFFIX_cdata(undefined, _acc) -> _acc;
+encode_vcard_SUFFIX_cdata(<<>>, _acc) -> _acc;
 encode_vcard_SUFFIX_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18778,11 +18684,10 @@ encode_vcard_PREFIX(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"PREFIX">>, _attrs, _els}.
 
-decode_vcard_PREFIX_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_vcard_PREFIX_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_PREFIX_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_PREFIX_cdata(undefined, _acc) -> _acc;
+encode_vcard_PREFIX_cdata(<<>>, _acc) -> _acc;
 encode_vcard_PREFIX_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18809,11 +18714,10 @@ encode_vcard_MIDDLE(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"MIDDLE">>, _attrs, _els}.
 
-decode_vcard_MIDDLE_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_vcard_MIDDLE_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_MIDDLE_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_MIDDLE_cdata(undefined, _acc) -> _acc;
+encode_vcard_MIDDLE_cdata(<<>>, _acc) -> _acc;
 encode_vcard_MIDDLE_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18840,10 +18744,10 @@ encode_vcard_GIVEN(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"GIVEN">>, _attrs, _els}.
 
-decode_vcard_GIVEN_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_vcard_GIVEN_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_GIVEN_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_GIVEN_cdata(undefined, _acc) -> _acc;
+encode_vcard_GIVEN_cdata(<<>>, _acc) -> _acc;
 encode_vcard_GIVEN_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -18870,11 +18774,10 @@ encode_vcard_FAMILY(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"FAMILY">>, _attrs, _els}.
 
-decode_vcard_FAMILY_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_vcard_FAMILY_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_vcard_FAMILY_cdata(__TopXMLNS, _val) -> _val.
 
-encode_vcard_FAMILY_cdata(undefined, _acc) -> _acc;
+encode_vcard_FAMILY_cdata(<<>>, _acc) -> _acc;
 encode_vcard_FAMILY_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -19722,10 +19625,16 @@ decode_stream_error_see_other_host_cdata(__TopXMLNS,
                   __TopXMLNS}});
 decode_stream_error_see_other_host_cdata(__TopXMLNS,
                                         _val) ->
-    _val.
+    case catch dec_host_port(_val) of
+      {'EXIT', _} ->
+         erlang:error({xmpp_codec,
+                       {bad_cdata_value, <<>>, <<"see-other-host">>,
+                        __TopXMLNS}});
+      _res -> _res
+    end.
 
 encode_stream_error_see_other_host_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
+    [{xmlcdata, enc_host_port(_val)} | _acc].
 
 decode_stream_error_restricted_xml(__TopXMLNS,
                                   __IgnoreEls,
@@ -19981,23 +19890,22 @@ encode_stream_error_text({text, Lang, Data},
 
 'decode_stream_error_text_attr_xml:lang'(__TopXMLNS,
                                         undefined) ->
-    undefined;
+    <<>>;
 'decode_stream_error_text_attr_xml:lang'(__TopXMLNS,
                                         _val) ->
     _val.
 
-'encode_stream_error_text_attr_xml:lang'(undefined,
-                                        _acc) ->
+'encode_stream_error_text_attr_xml:lang'(<<>>, _acc) ->
     _acc;
 'encode_stream_error_text_attr_xml:lang'(_val, _acc) ->
     [{<<"xml:lang">>, _val} | _acc].
 
 decode_stream_error_text_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+    <<>>;
 decode_stream_error_text_cdata(__TopXMLNS, _val) ->
     _val.
 
-encode_stream_error_text_cdata(undefined, _acc) -> _acc;
+encode_stream_error_text_cdata(<<>>, _acc) -> _acc;
 encode_stream_error_text_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -20993,10 +20901,10 @@ encode_register_key(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"key">>, _attrs, _els}.
 
-decode_register_key_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_key_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_register_key_cdata(__TopXMLNS, _val) -> _val.
 
-encode_register_key_cdata(none, _acc) -> _acc;
+encode_register_key_cdata(<<>>, _acc) -> _acc;
 encode_register_key_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -21023,10 +20931,10 @@ encode_register_text(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"text">>, _attrs, _els}.
 
-decode_register_text_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_text_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_register_text_cdata(__TopXMLNS, _val) -> _val.
 
-encode_register_text_cdata(none, _acc) -> _acc;
+encode_register_text_cdata(<<>>, _acc) -> _acc;
 encode_register_text_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -21053,10 +20961,10 @@ encode_register_misc(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"misc">>, _attrs, _els}.
 
-decode_register_misc_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_misc_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_register_misc_cdata(__TopXMLNS, _val) -> _val.
 
-encode_register_misc_cdata(none, _acc) -> _acc;
+encode_register_misc_cdata(<<>>, _acc) -> _acc;
 encode_register_misc_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -21083,10 +20991,10 @@ encode_register_date(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"date">>, _attrs, _els}.
 
-decode_register_date_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_date_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_register_date_cdata(__TopXMLNS, _val) -> _val.
 
-encode_register_date_cdata(none, _acc) -> _acc;
+encode_register_date_cdata(<<>>, _acc) -> _acc;
 encode_register_date_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -21113,10 +21021,10 @@ encode_register_url(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"url">>, _attrs, _els}.
 
-decode_register_url_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_url_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_register_url_cdata(__TopXMLNS, _val) -> _val.
 
-encode_register_url_cdata(none, _acc) -> _acc;
+encode_register_url_cdata(<<>>, _acc) -> _acc;
 encode_register_url_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -21143,10 +21051,10 @@ encode_register_phone(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"phone">>, _attrs, _els}.
 
-decode_register_phone_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_phone_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_register_phone_cdata(__TopXMLNS, _val) -> _val.
 
-encode_register_phone_cdata(none, _acc) -> _acc;
+encode_register_phone_cdata(<<>>, _acc) -> _acc;
 encode_register_phone_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -21173,10 +21081,10 @@ encode_register_zip(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"zip">>, _attrs, _els}.
 
-decode_register_zip_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_zip_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_register_zip_cdata(__TopXMLNS, _val) -> _val.
 
-encode_register_zip_cdata(none, _acc) -> _acc;
+encode_register_zip_cdata(<<>>, _acc) -> _acc;
 encode_register_zip_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -21203,10 +21111,10 @@ encode_register_state(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"state">>, _attrs, _els}.
 
-decode_register_state_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_state_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_register_state_cdata(__TopXMLNS, _val) -> _val.
 
-encode_register_state_cdata(none, _acc) -> _acc;
+encode_register_state_cdata(<<>>, _acc) -> _acc;
 encode_register_state_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -21233,10 +21141,10 @@ encode_register_city(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"city">>, _attrs, _els}.
 
-decode_register_city_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_city_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_register_city_cdata(__TopXMLNS, _val) -> _val.
 
-encode_register_city_cdata(none, _acc) -> _acc;
+encode_register_city_cdata(<<>>, _acc) -> _acc;
 encode_register_city_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -21263,10 +21171,10 @@ encode_register_address(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"address">>, _attrs, _els}.
 
-decode_register_address_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_address_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_register_address_cdata(__TopXMLNS, _val) -> _val.
 
-encode_register_address_cdata(none, _acc) -> _acc;
+encode_register_address_cdata(<<>>, _acc) -> _acc;
 encode_register_address_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -21293,10 +21201,10 @@ encode_register_email(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"email">>, _attrs, _els}.
 
-decode_register_email_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_email_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_register_email_cdata(__TopXMLNS, _val) -> _val.
 
-encode_register_email_cdata(none, _acc) -> _acc;
+encode_register_email_cdata(<<>>, _acc) -> _acc;
 encode_register_email_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -21323,10 +21231,10 @@ encode_register_last(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"last">>, _attrs, _els}.
 
-decode_register_last_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_last_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_register_last_cdata(__TopXMLNS, _val) -> _val.
 
-encode_register_last_cdata(none, _acc) -> _acc;
+encode_register_last_cdata(<<>>, _acc) -> _acc;
 encode_register_last_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -21353,10 +21261,10 @@ encode_register_first(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"first">>, _attrs, _els}.
 
-decode_register_first_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_first_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_register_first_cdata(__TopXMLNS, _val) -> _val.
 
-encode_register_first_cdata(none, _acc) -> _acc;
+encode_register_first_cdata(<<>>, _acc) -> _acc;
 encode_register_first_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -21383,10 +21291,10 @@ encode_register_name(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"name">>, _attrs, _els}.
 
-decode_register_name_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_name_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_register_name_cdata(__TopXMLNS, _val) -> _val.
 
-encode_register_name_cdata(none, _acc) -> _acc;
+encode_register_name_cdata(<<>>, _acc) -> _acc;
 encode_register_name_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -21414,11 +21322,11 @@ encode_register_password(Cdata, _xmlns_attrs) ->
     {xmlel, <<"password">>, _attrs, _els}.
 
 decode_register_password_cdata(__TopXMLNS, <<>>) ->
-    none;
+    <<>>;
 decode_register_password_cdata(__TopXMLNS, _val) ->
     _val.
 
-encode_register_password_cdata(none, _acc) -> _acc;
+encode_register_password_cdata(<<>>, _acc) -> _acc;
 encode_register_password_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -21445,10 +21353,10 @@ encode_register_nick(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"nick">>, _attrs, _els}.
 
-decode_register_nick_cdata(__TopXMLNS, <<>>) -> none;
+decode_register_nick_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_register_nick_cdata(__TopXMLNS, _val) -> _val.
 
-encode_register_nick_cdata(none, _acc) -> _acc;
+encode_register_nick_cdata(<<>>, _acc) -> _acc;
 encode_register_nick_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -21476,11 +21384,11 @@ encode_register_username(Cdata, _xmlns_attrs) ->
     {xmlel, <<"username">>, _attrs, _els}.
 
 decode_register_username_cdata(__TopXMLNS, <<>>) ->
-    none;
+    <<>>;
 decode_register_username_cdata(__TopXMLNS, _val) ->
     _val.
 
-encode_register_username_cdata(none, _acc) -> _acc;
+encode_register_username_cdata(<<>>, _acc) -> _acc;
 encode_register_username_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -21510,12 +21418,11 @@ encode_register_instructions(Cdata, _xmlns_attrs) ->
     {xmlel, <<"instructions">>, _attrs, _els}.
 
 decode_register_instructions_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+    <<>>;
 decode_register_instructions_cdata(__TopXMLNS, _val) ->
     _val.
 
-encode_register_instructions_cdata(undefined, _acc) ->
-    _acc;
+encode_register_instructions_cdata(<<>>, _acc) -> _acc;
 encode_register_instructions_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -21595,19 +21502,17 @@ encode_caps({caps, Node, Version, Hash, Exts},
                                                                                                   _xmlns_attrs)))),
     {xmlel, <<"c">>, _attrs, _els}.
 
-decode_caps_attr_hash(__TopXMLNS, undefined) ->
-    undefined;
+decode_caps_attr_hash(__TopXMLNS, undefined) -> <<>>;
 decode_caps_attr_hash(__TopXMLNS, _val) -> _val.
 
-encode_caps_attr_hash(undefined, _acc) -> _acc;
+encode_caps_attr_hash(<<>>, _acc) -> _acc;
 encode_caps_attr_hash(_val, _acc) ->
     [{<<"hash">>, _val} | _acc].
 
-decode_caps_attr_node(__TopXMLNS, undefined) ->
-    undefined;
+decode_caps_attr_node(__TopXMLNS, undefined) -> <<>>;
 decode_caps_attr_node(__TopXMLNS, _val) -> _val.
 
-encode_caps_attr_node(undefined, _acc) -> _acc;
+encode_caps_attr_node(<<>>, _acc) -> _acc;
 encode_caps_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
@@ -21624,11 +21529,10 @@ encode_caps_attr_ext([], _acc) -> _acc;
 encode_caps_attr_ext(_val, _acc) ->
     [{<<"ext">>, join(_val, 32)} | _acc].
 
-decode_caps_attr_ver(__TopXMLNS, undefined) ->
-    undefined;
+decode_caps_attr_ver(__TopXMLNS, undefined) -> <<>>;
 decode_caps_attr_ver(__TopXMLNS, _val) -> _val.
 
-encode_caps_attr_ver(undefined, _acc) -> _acc;
+encode_caps_attr_ver(<<>>, _acc) -> _acc;
 encode_caps_attr_ver(_val, _acc) ->
     [{<<"ver">>, _val} | _acc].
 
@@ -21711,22 +21615,14 @@ decode_compression_els(__TopXMLNS, __IgnoreEls,
          when __TopXMLNS ==
                 <<"http://jabber.org/features/compress">> ->
          decode_compression_els(__TopXMLNS, __IgnoreEls, _els,
-                                case decode_compression_method(__TopXMLNS,
-                                                               __IgnoreEls,
-                                                               _el)
-                                    of
-                                  undefined -> Methods;
-                                  _new_el -> [_new_el | Methods]
-                                end);
+                                [decode_compression_method(__TopXMLNS,
+                                                           __IgnoreEls, _el)
+                                 | Methods]);
       <<"http://jabber.org/features/compress">> ->
          decode_compression_els(__TopXMLNS, __IgnoreEls, _els,
-                                case
-                                  decode_compression_method(<<"http://jabber.org/features/compress">>,
-                                                            __IgnoreEls, _el)
-                                    of
-                                  undefined -> Methods;
-                                  _new_el -> [_new_el | Methods]
-                                end);
+                                [decode_compression_method(<<"http://jabber.org/features/compress">>,
+                                                           __IgnoreEls, _el)
+                                 | Methods]);
       _ ->
          decode_compression_els(__TopXMLNS, __IgnoreEls, _els,
                                 Methods)
@@ -21774,12 +21670,11 @@ encode_compression_method(Cdata, _xmlns_attrs) ->
     {xmlel, <<"method">>, _attrs, _els}.
 
 decode_compression_method_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+    <<>>;
 decode_compression_method_cdata(__TopXMLNS, _val) ->
     _val.
 
-encode_compression_method_cdata(undefined, _acc) ->
-    _acc;
+encode_compression_method_cdata(<<>>, _acc) -> _acc;
 encode_compression_method_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -21809,21 +21704,14 @@ decode_compress_els(__TopXMLNS, __IgnoreEls,
          when __TopXMLNS ==
                 <<"http://jabber.org/protocol/compress">> ->
          decode_compress_els(__TopXMLNS, __IgnoreEls, _els,
-                             case decode_compress_method(__TopXMLNS,
-                                                         __IgnoreEls, _el)
-                                 of
-                               undefined -> Methods;
-                               _new_el -> [_new_el | Methods]
-                             end);
+                             [decode_compress_method(__TopXMLNS, __IgnoreEls,
+                                                     _el)
+                              | Methods]);
       <<"http://jabber.org/protocol/compress">> ->
          decode_compress_els(__TopXMLNS, __IgnoreEls, _els,
-                             case
-                               decode_compress_method(<<"http://jabber.org/protocol/compress">>,
-                                                      __IgnoreEls, _el)
-                                 of
-                               undefined -> Methods;
-                               _new_el -> [_new_el | Methods]
-                             end);
+                             [decode_compress_method(<<"http://jabber.org/protocol/compress">>,
+                                                     __IgnoreEls, _el)
+                              | Methods]);
       _ ->
          decode_compress_els(__TopXMLNS, __IgnoreEls, _els,
                              Methods)
@@ -21867,11 +21755,10 @@ encode_compress_method(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"method">>, _attrs, _els}.
 
-decode_compress_method_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_compress_method_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_compress_method_cdata(__TopXMLNS, _val) -> _val.
 
-encode_compress_method_cdata(undefined, _acc) -> _acc;
+encode_compress_method_cdata(<<>>, _acc) -> _acc;
 encode_compress_method_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -22110,23 +21997,15 @@ decode_sasl_mechanisms_els(__TopXMLNS, __IgnoreEls,
                 <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
          decode_sasl_mechanisms_els(__TopXMLNS, __IgnoreEls,
                                     _els,
-                                    case decode_sasl_mechanism(__TopXMLNS,
-                                                               __IgnoreEls,
-                                                               _el)
-                                        of
-                                      undefined -> List;
-                                      _new_el -> [_new_el | List]
-                                    end);
+                                    [decode_sasl_mechanism(__TopXMLNS,
+                                                           __IgnoreEls, _el)
+                                     | List]);
       <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
          decode_sasl_mechanisms_els(__TopXMLNS, __IgnoreEls,
                                     _els,
-                                    case
-                                      decode_sasl_mechanism(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                            __IgnoreEls, _el)
-                                        of
-                                      undefined -> List;
-                                      _new_el -> [_new_el | List]
-                                    end);
+                                    [decode_sasl_mechanism(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+                                                           __IgnoreEls, _el)
+                                     | List]);
       _ ->
          decode_sasl_mechanisms_els(__TopXMLNS, __IgnoreEls,
                                     _els, List)
@@ -22171,11 +22050,10 @@ encode_sasl_mechanism(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"mechanism">>, _attrs, _els}.
 
-decode_sasl_mechanism_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_sasl_mechanism_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_sasl_mechanism_cdata(__TopXMLNS, _val) -> _val.
 
-encode_sasl_mechanism_cdata(undefined, _acc) -> _acc;
+encode_sasl_mechanism_cdata(<<>>, _acc) -> _acc;
 encode_sasl_mechanism_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -22737,23 +22615,22 @@ encode_sasl_failure_text({text, Lang, Data},
 
 'decode_sasl_failure_text_attr_xml:lang'(__TopXMLNS,
                                         undefined) ->
-    undefined;
+    <<>>;
 'decode_sasl_failure_text_attr_xml:lang'(__TopXMLNS,
                                         _val) ->
     _val.
 
-'encode_sasl_failure_text_attr_xml:lang'(undefined,
-                                        _acc) ->
+'encode_sasl_failure_text_attr_xml:lang'(<<>>, _acc) ->
     _acc;
 'encode_sasl_failure_text_attr_xml:lang'(_val, _acc) ->
     [{<<"xml:lang">>, _val} | _acc].
 
 decode_sasl_failure_text_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+    <<>>;
 decode_sasl_failure_text_cdata(__TopXMLNS, _val) ->
     _val.
 
-encode_sasl_failure_text_cdata(undefined, _acc) -> _acc;
+encode_sasl_failure_text_cdata(<<>>, _acc) -> _acc;
 encode_sasl_failure_text_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -22781,8 +22658,7 @@ encode_sasl_success({sasl_success, Text},
     _attrs = _xmlns_attrs,
     {xmlel, <<"success">>, _attrs, _els}.
 
-decode_sasl_success_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_sasl_success_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_sasl_success_cdata(__TopXMLNS, _val) ->
     case catch base64:decode(_val) of
       {'EXIT', _} ->
@@ -22791,7 +22667,7 @@ decode_sasl_success_cdata(__TopXMLNS, _val) ->
       _res -> _res
     end.
 
-encode_sasl_success_cdata(undefined, _acc) -> _acc;
+encode_sasl_success_cdata(<<>>, _acc) -> _acc;
 encode_sasl_success_cdata(_val, _acc) ->
     [{xmlcdata, base64:encode(_val)} | _acc].
 
@@ -22819,8 +22695,7 @@ encode_sasl_response({sasl_response, Text},
     _attrs = _xmlns_attrs,
     {xmlel, <<"response">>, _attrs, _els}.
 
-decode_sasl_response_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_sasl_response_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_sasl_response_cdata(__TopXMLNS, _val) ->
     case catch base64:decode(_val) of
       {'EXIT', _} ->
@@ -22829,7 +22704,7 @@ decode_sasl_response_cdata(__TopXMLNS, _val) ->
       _res -> _res
     end.
 
-encode_sasl_response_cdata(undefined, _acc) -> _acc;
+encode_sasl_response_cdata(<<>>, _acc) -> _acc;
 encode_sasl_response_cdata(_val, _acc) ->
     [{xmlcdata, base64:encode(_val)} | _acc].
 
@@ -22857,8 +22732,7 @@ encode_sasl_challenge({sasl_challenge, Text},
     _attrs = _xmlns_attrs,
     {xmlel, <<"challenge">>, _attrs, _els}.
 
-decode_sasl_challenge_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_sasl_challenge_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_sasl_challenge_cdata(__TopXMLNS, _val) ->
     case catch base64:decode(_val) of
       {'EXIT', _} ->
@@ -22867,7 +22741,7 @@ decode_sasl_challenge_cdata(__TopXMLNS, _val) ->
       _res -> _res
     end.
 
-encode_sasl_challenge_cdata(undefined, _acc) -> _acc;
+encode_sasl_challenge_cdata(<<>>, _acc) -> _acc;
 encode_sasl_challenge_cdata(_val, _acc) ->
     [{xmlcdata, base64:encode(_val)} | _acc].
 
@@ -22927,7 +22801,7 @@ decode_sasl_auth_attr_mechanism(__TopXMLNS, _val) ->
 encode_sasl_auth_attr_mechanism(_val, _acc) ->
     [{<<"mechanism">>, _val} | _acc].
 
-decode_sasl_auth_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_sasl_auth_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_sasl_auth_cdata(__TopXMLNS, _val) ->
     case catch base64:decode(_val) of
       {'EXIT', _} ->
@@ -22936,7 +22810,7 @@ decode_sasl_auth_cdata(__TopXMLNS, _val) ->
       _res -> _res
     end.
 
-encode_sasl_auth_cdata(undefined, _acc) -> _acc;
+encode_sasl_auth_cdata(<<>>, _acc) -> _acc;
 encode_sasl_auth_cdata(_val, _acc) ->
     [{xmlcdata, base64:encode(_val)} | _acc].
 
@@ -23083,11 +22957,11 @@ encode_legacy_auth_resource(Cdata, _xmlns_attrs) ->
     {xmlel, <<"resource">>, _attrs, _els}.
 
 decode_legacy_auth_resource_cdata(__TopXMLNS, <<>>) ->
-    none;
+    <<>>;
 decode_legacy_auth_resource_cdata(__TopXMLNS, _val) ->
     _val.
 
-encode_legacy_auth_resource_cdata(none, _acc) -> _acc;
+encode_legacy_auth_resource_cdata(<<>>, _acc) -> _acc;
 encode_legacy_auth_resource_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -23115,11 +22989,11 @@ encode_legacy_auth_digest(Cdata, _xmlns_attrs) ->
     {xmlel, <<"digest">>, _attrs, _els}.
 
 decode_legacy_auth_digest_cdata(__TopXMLNS, <<>>) ->
-    none;
+    <<>>;
 decode_legacy_auth_digest_cdata(__TopXMLNS, _val) ->
     _val.
 
-encode_legacy_auth_digest_cdata(none, _acc) -> _acc;
+encode_legacy_auth_digest_cdata(<<>>, _acc) -> _acc;
 encode_legacy_auth_digest_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -23147,11 +23021,11 @@ encode_legacy_auth_password(Cdata, _xmlns_attrs) ->
     {xmlel, <<"password">>, _attrs, _els}.
 
 decode_legacy_auth_password_cdata(__TopXMLNS, <<>>) ->
-    none;
+    <<>>;
 decode_legacy_auth_password_cdata(__TopXMLNS, _val) ->
     _val.
 
-encode_legacy_auth_password_cdata(none, _acc) -> _acc;
+encode_legacy_auth_password_cdata(<<>>, _acc) -> _acc;
 encode_legacy_auth_password_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -23179,11 +23053,11 @@ encode_legacy_auth_username(Cdata, _xmlns_attrs) ->
     {xmlel, <<"username">>, _attrs, _els}.
 
 decode_legacy_auth_username_cdata(__TopXMLNS, <<>>) ->
-    none;
+    <<>>;
 decode_legacy_auth_username_cdata(__TopXMLNS, _val) ->
     _val.
 
-encode_legacy_auth_username_cdata(none, _acc) -> _acc;
+encode_legacy_auth_username_cdata(<<>>, _acc) -> _acc;
 encode_legacy_auth_username_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -23275,8 +23149,7 @@ encode_bind_resource(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"resource">>, _attrs, _els}.
 
-decode_bind_resource_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_bind_resource_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_bind_resource_cdata(__TopXMLNS, _val) ->
     case catch resourceprep(_val) of
       {'EXIT', _} ->
@@ -23285,7 +23158,7 @@ decode_bind_resource_cdata(__TopXMLNS, _val) ->
       _res -> _res
     end.
 
-encode_bind_resource_cdata(undefined, _acc) -> _acc;
+encode_bind_resource_cdata(<<>>, _acc) -> _acc;
 encode_bind_resource_cdata(_val, _acc) ->
     [{xmlcdata, resourceprep(_val)} | _acc].
 
@@ -23889,11 +23762,10 @@ encode_error_attr_code(undefined, _acc) -> _acc;
 encode_error_attr_code(_val, _acc) ->
     [{<<"code">>, enc_int(_val)} | _acc].
 
-decode_error_attr_by(__TopXMLNS, undefined) ->
-    undefined;
+decode_error_attr_by(__TopXMLNS, undefined) -> <<>>;
 decode_error_attr_by(__TopXMLNS, _val) -> _val.
 
-encode_error_attr_by(undefined, _acc) -> _acc;
+encode_error_attr_by(<<>>, _acc) -> _acc;
 encode_error_attr_by(_val, _acc) ->
     [{<<"by">>, _val} | _acc].
 
@@ -23934,19 +23806,18 @@ encode_error_text({text, Lang, Data}, _xmlns_attrs) ->
 
 'decode_error_text_attr_xml:lang'(__TopXMLNS,
                                  undefined) ->
-    undefined;
+    <<>>;
 'decode_error_text_attr_xml:lang'(__TopXMLNS, _val) ->
     _val.
 
-'encode_error_text_attr_xml:lang'(undefined, _acc) ->
-    _acc;
+'encode_error_text_attr_xml:lang'(<<>>, _acc) -> _acc;
 'encode_error_text_attr_xml:lang'(_val, _acc) ->
     [{<<"xml:lang">>, _val} | _acc].
 
-decode_error_text_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_error_text_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_error_text_cdata(__TopXMLNS, _val) -> _val.
 
-encode_error_text_cdata(undefined, _acc) -> _acc;
+encode_error_text_cdata(<<>>, _acc) -> _acc;
 encode_error_text_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -24068,11 +23939,10 @@ encode_error_redirect({redirect, Uri}, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"redirect">>, _attrs, _els}.
 
-decode_error_redirect_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_error_redirect_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_error_redirect_cdata(__TopXMLNS, _val) -> _val.
 
-encode_error_redirect_cdata(undefined, _acc) -> _acc;
+encode_error_redirect_cdata(<<>>, _acc) -> _acc;
 encode_error_redirect_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -24192,10 +24062,10 @@ encode_error_gone({gone, Uri}, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"gone">>, _attrs, _els}.
 
-decode_error_gone_cdata(__TopXMLNS, <<>>) -> undefined;
+decode_error_gone_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_error_gone_cdata(__TopXMLNS, _val) -> _val.
 
-encode_error_gone_cdata(undefined, _acc) -> _acc;
+encode_error_gone_cdata(<<>>, _acc) -> _acc;
 encode_error_gone_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -24401,11 +24271,10 @@ encode_presence({presence, Id, Type, Lang, From, To,
 'encode_presence_$priority'(Priority, _acc) ->
     [encode_presence_priority(Priority, []) | _acc].
 
-decode_presence_attr_id(__TopXMLNS, undefined) ->
-    undefined;
+decode_presence_attr_id(__TopXMLNS, undefined) -> <<>>;
 decode_presence_attr_id(__TopXMLNS, _val) -> _val.
 
-encode_presence_attr_id(undefined, _acc) -> _acc;
+encode_presence_attr_id(<<>>, _acc) -> _acc;
 encode_presence_attr_id(_val, _acc) ->
     [{<<"id">>, _val} | _acc].
 
@@ -24459,12 +24328,11 @@ encode_presence_attr_to(_val, _acc) ->
 
 'decode_presence_attr_xml:lang'(__TopXMLNS,
                                undefined) ->
-    undefined;
+    <<>>;
 'decode_presence_attr_xml:lang'(__TopXMLNS, _val) ->
     _val.
 
-'encode_presence_attr_xml:lang'(undefined, _acc) ->
-    _acc;
+'encode_presence_attr_xml:lang'(<<>>, _acc) -> _acc;
 'encode_presence_attr_xml:lang'(_val, _acc) ->
     [{<<"xml:lang">>, _val} | _acc].
 
@@ -24544,22 +24412,20 @@ encode_presence_status({text, Lang, Data},
 
 'decode_presence_status_attr_xml:lang'(__TopXMLNS,
                                       undefined) ->
-    undefined;
+    <<>>;
 'decode_presence_status_attr_xml:lang'(__TopXMLNS,
                                       _val) ->
     _val.
 
-'encode_presence_status_attr_xml:lang'(undefined,
-                                      _acc) ->
+'encode_presence_status_attr_xml:lang'(<<>>, _acc) ->
     _acc;
 'encode_presence_status_attr_xml:lang'(_val, _acc) ->
     [{<<"xml:lang">>, _val} | _acc].
 
-decode_presence_status_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_presence_status_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_presence_status_cdata(__TopXMLNS, _val) -> _val.
 
-encode_presence_status_cdata(undefined, _acc) -> _acc;
+encode_presence_status_cdata(<<>>, _acc) -> _acc;
 encode_presence_status_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -24765,11 +24631,10 @@ encode_message({message, Id, Type, Lang, From, To,
     'encode_message_$body'(_els,
                           [encode_message_body(Body, []) | _acc]).
 
-decode_message_attr_id(__TopXMLNS, undefined) ->
-    undefined;
+decode_message_attr_id(__TopXMLNS, undefined) -> <<>>;
 decode_message_attr_id(__TopXMLNS, _val) -> _val.
 
-encode_message_attr_id(undefined, _acc) -> _acc;
+encode_message_attr_id(<<>>, _acc) -> _acc;
 encode_message_attr_id(_val, _acc) ->
     [{<<"id">>, _val} | _acc].
 
@@ -24820,11 +24685,11 @@ encode_message_attr_to(_val, _acc) ->
     [{<<"to">>, enc_jid(_val)} | _acc].
 
 'decode_message_attr_xml:lang'(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 'decode_message_attr_xml:lang'(__TopXMLNS, _val) ->
     _val.
 
-'encode_message_attr_xml:lang'(undefined, _acc) -> _acc;
+'encode_message_attr_xml:lang'(<<>>, _acc) -> _acc;
 'encode_message_attr_xml:lang'(_val, _acc) ->
     [{<<"xml:lang">>, _val} | _acc].
 
@@ -24851,11 +24716,10 @@ encode_message_thread(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"thread">>, _attrs, _els}.
 
-decode_message_thread_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_message_thread_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_message_thread_cdata(__TopXMLNS, _val) -> _val.
 
-encode_message_thread_cdata(undefined, _acc) -> _acc;
+encode_message_thread_cdata(<<>>, _acc) -> _acc;
 encode_message_thread_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -24896,20 +24760,18 @@ encode_message_body({text, Lang, Data}, _xmlns_attrs) ->
 
 'decode_message_body_attr_xml:lang'(__TopXMLNS,
                                    undefined) ->
-    undefined;
+    <<>>;
 'decode_message_body_attr_xml:lang'(__TopXMLNS, _val) ->
     _val.
 
-'encode_message_body_attr_xml:lang'(undefined, _acc) ->
-    _acc;
+'encode_message_body_attr_xml:lang'(<<>>, _acc) -> _acc;
 'encode_message_body_attr_xml:lang'(_val, _acc) ->
     [{<<"xml:lang">>, _val} | _acc].
 
-decode_message_body_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_message_body_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_message_body_cdata(__TopXMLNS, _val) -> _val.
 
-encode_message_body_cdata(undefined, _acc) -> _acc;
+encode_message_body_cdata(<<>>, _acc) -> _acc;
 encode_message_body_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -24952,22 +24814,20 @@ encode_message_subject({text, Lang, Data},
 
 'decode_message_subject_attr_xml:lang'(__TopXMLNS,
                                       undefined) ->
-    undefined;
+    <<>>;
 'decode_message_subject_attr_xml:lang'(__TopXMLNS,
                                       _val) ->
     _val.
 
-'encode_message_subject_attr_xml:lang'(undefined,
-                                      _acc) ->
+'encode_message_subject_attr_xml:lang'(<<>>, _acc) ->
     _acc;
 'encode_message_subject_attr_xml:lang'(_val, _acc) ->
     [{<<"xml:lang">>, _val} | _acc].
 
-decode_message_subject_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_message_subject_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_message_subject_cdata(__TopXMLNS, _val) -> _val.
 
-encode_message_subject_cdata(undefined, _acc) -> _acc;
+encode_message_subject_cdata(<<>>, _acc) -> _acc;
 encode_message_subject_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -25096,10 +24956,10 @@ encode_iq_attr_to(_val, _acc) ->
     [{<<"to">>, enc_jid(_val)} | _acc].
 
 'decode_iq_attr_xml:lang'(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 'decode_iq_attr_xml:lang'(__TopXMLNS, _val) -> _val.
 
-'encode_iq_attr_xml:lang'(undefined, _acc) -> _acc;
+'encode_iq_attr_xml:lang'(<<>>, _acc) -> _acc;
 'encode_iq_attr_xml:lang'(_val, _acc) ->
     [{<<"xml:lang">>, _val} | _acc].
 
@@ -25618,12 +25478,11 @@ encode_conference_password(Cdata, _xmlns_attrs) ->
     {xmlel, <<"password">>, _attrs, _els}.
 
 decode_conference_password_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+    <<>>;
 decode_conference_password_cdata(__TopXMLNS, _val) ->
     _val.
 
-encode_conference_password_cdata(undefined, _acc) ->
-    _acc;
+encode_conference_password_cdata(<<>>, _acc) -> _acc;
 encode_conference_password_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -25650,11 +25509,10 @@ encode_conference_nick(Cdata, _xmlns_attrs) ->
     _attrs = _xmlns_attrs,
     {xmlel, <<"nick">>, _attrs, _els}.
 
-decode_conference_nick_cdata(__TopXMLNS, <<>>) ->
-    undefined;
+decode_conference_nick_cdata(__TopXMLNS, <<>>) -> <<>>;
 decode_conference_nick_cdata(__TopXMLNS, _val) -> _val.
 
-encode_conference_nick_cdata(undefined, _acc) -> _acc;
+encode_conference_nick_cdata(<<>>, _acc) -> _acc;
 encode_conference_nick_cdata(_val, _acc) ->
     [{xmlcdata, _val} | _acc].
 
@@ -25762,10 +25620,10 @@ encode_disco_items({disco_items, Node, Items, Rsm},
      | _acc].
 
 decode_disco_items_attr_node(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_disco_items_attr_node(__TopXMLNS, _val) -> _val.
 
-encode_disco_items_attr_node(undefined, _acc) -> _acc;
+encode_disco_items_attr_node(<<>>, _acc) -> _acc;
 encode_disco_items_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
@@ -25822,18 +25680,18 @@ encode_disco_item_attr_jid(_val, _acc) ->
     [{<<"jid">>, enc_jid(_val)} | _acc].
 
 decode_disco_item_attr_name(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_disco_item_attr_name(__TopXMLNS, _val) -> _val.
 
-encode_disco_item_attr_name(undefined, _acc) -> _acc;
+encode_disco_item_attr_name(<<>>, _acc) -> _acc;
 encode_disco_item_attr_name(_val, _acc) ->
     [{<<"name">>, _val} | _acc].
 
 decode_disco_item_attr_node(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_disco_item_attr_node(__TopXMLNS, _val) -> _val.
 
-encode_disco_item_attr_node(undefined, _acc) -> _acc;
+encode_disco_item_attr_node(<<>>, _acc) -> _acc;
 encode_disco_item_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
@@ -25957,10 +25815,10 @@ encode_disco_info({disco_info, Node, Identities,
                                     | _acc]).
 
 decode_disco_info_attr_node(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_disco_info_attr_node(__TopXMLNS, _val) -> _val.
 
-encode_disco_info_attr_node(undefined, _acc) -> _acc;
+encode_disco_info_attr_node(<<>>, _acc) -> _acc;
 encode_disco_info_attr_node(_val, _acc) ->
     [{<<"node">>, _val} | _acc].
 
@@ -26067,25 +25925,23 @@ encode_disco_identity_attr_type(_val, _acc) ->
 
 'decode_disco_identity_attr_xml:lang'(__TopXMLNS,
                                      undefined) ->
-    undefined;
+    <<>>;
 'decode_disco_identity_attr_xml:lang'(__TopXMLNS,
                                      _val) ->
     _val.
 
-'encode_disco_identity_attr_xml:lang'(undefined,
-                                     _acc) ->
+'encode_disco_identity_attr_xml:lang'(<<>>, _acc) ->
     _acc;
 'encode_disco_identity_attr_xml:lang'(_val, _acc) ->
     [{<<"xml:lang">>, _val} | _acc].
 
 decode_disco_identity_attr_name(__TopXMLNS,
                                undefined) ->
-    undefined;
+    <<>>;
 decode_disco_identity_attr_name(__TopXMLNS, _val) ->
     _val.
 
-encode_disco_identity_attr_name(undefined, _acc) ->
-    _acc;
+encode_disco_identity_attr_name(<<>>, _acc) -> _acc;
 encode_disco_identity_attr_name(_val, _acc) ->
     [{<<"name">>, _val} | _acc].
 
@@ -26103,20 +25959,13 @@ decode_block_list_els(__TopXMLNS, __IgnoreEls,
     case get_attr(<<"xmlns">>, _attrs) of
       <<"">> when __TopXMLNS == <<"urn:xmpp:blocking">> ->
          decode_block_list_els(__TopXMLNS, __IgnoreEls, _els,
-                               case decode_block_item(__TopXMLNS, __IgnoreEls,
-                                                      _el)
-                                   of
-                                 undefined -> Items;
-                                 _new_el -> [_new_el | Items]
-                               end);
+                               [decode_block_item(__TopXMLNS, __IgnoreEls, _el)
+                                | Items]);
       <<"urn:xmpp:blocking">> ->
          decode_block_list_els(__TopXMLNS, __IgnoreEls, _els,
-                               case decode_block_item(<<"urn:xmpp:blocking">>,
-                                                      __IgnoreEls, _el)
-                                   of
-                                 undefined -> Items;
-                                 _new_el -> [_new_el | Items]
-                               end);
+                               [decode_block_item(<<"urn:xmpp:blocking">>,
+                                                  __IgnoreEls, _el)
+                                | Items]);
       _ ->
          decode_block_list_els(__TopXMLNS, __IgnoreEls, _els,
                                Items)
@@ -26151,20 +26000,13 @@ decode_unblock_els(__TopXMLNS, __IgnoreEls,
     case get_attr(<<"xmlns">>, _attrs) of
       <<"">> when __TopXMLNS == <<"urn:xmpp:blocking">> ->
          decode_unblock_els(__TopXMLNS, __IgnoreEls, _els,
-                            case decode_block_item(__TopXMLNS, __IgnoreEls,
-                                                   _el)
-                                of
-                              undefined -> Items;
-                              _new_el -> [_new_el | Items]
-                            end);
+                            [decode_block_item(__TopXMLNS, __IgnoreEls, _el)
+                             | Items]);
       <<"urn:xmpp:blocking">> ->
          decode_unblock_els(__TopXMLNS, __IgnoreEls, _els,
-                            case decode_block_item(<<"urn:xmpp:blocking">>,
-                                                   __IgnoreEls, _el)
-                                of
-                              undefined -> Items;
-                              _new_el -> [_new_el | Items]
-                            end);
+                            [decode_block_item(<<"urn:xmpp:blocking">>,
+                                               __IgnoreEls, _el)
+                             | Items]);
       _ ->
          decode_unblock_els(__TopXMLNS, __IgnoreEls, _els, Items)
     end;
@@ -26197,19 +26039,13 @@ decode_block_els(__TopXMLNS, __IgnoreEls,
     case get_attr(<<"xmlns">>, _attrs) of
       <<"">> when __TopXMLNS == <<"urn:xmpp:blocking">> ->
          decode_block_els(__TopXMLNS, __IgnoreEls, _els,
-                          case decode_block_item(__TopXMLNS, __IgnoreEls, _el)
-                              of
-                            undefined -> Items;
-                            _new_el -> [_new_el | Items]
-                          end);
+                          [decode_block_item(__TopXMLNS, __IgnoreEls, _el)
+                           | Items]);
       <<"urn:xmpp:blocking">> ->
          decode_block_els(__TopXMLNS, __IgnoreEls, _els,
-                          case decode_block_item(<<"urn:xmpp:blocking">>,
-                                                 __IgnoreEls, _el)
-                              of
-                            undefined -> Items;
-                            _new_el -> [_new_el | Items]
-                          end);
+                          [decode_block_item(<<"urn:xmpp:blocking">>,
+                                             __IgnoreEls, _el)
+                           | Items]);
       _ ->
          decode_block_els(__TopXMLNS, __IgnoreEls, _els, Items)
     end;
@@ -26692,11 +26528,11 @@ encode_privacy_item_attr_type(_val, _acc) ->
     [{<<"type">>, enc_enum(_val)} | _acc].
 
 decode_privacy_item_attr_value(__TopXMLNS, undefined) ->
-    undefined;
+    <<>>;
 decode_privacy_item_attr_value(__TopXMLNS, _val) ->
     _val.
 
-encode_privacy_item_attr_value(undefined, _acc) -> _acc;
+encode_privacy_item_attr_value(<<>>, _acc) -> _acc;
 encode_privacy_item_attr_value(_val, _acc) ->
     [{<<"value">>, _val} | _acc].
 
index a4f37c92606d7d13d3f085a7f75806462a8e7537..20231fffa15e917bc8ee3af961b38a0dd41c3ba6 100644 (file)
@@ -94,7 +94,7 @@ make_adhoc_response(#adhoc_command{lang = Lang, node = Node, sid = SID},
     Command#adhoc_command{lang = Lang, node = Node, sid = SID}.
 
 -spec make_adhoc_response(adhoc_command()) -> adhoc_command().
-make_adhoc_response(#adhoc_command{sid = undefined} = Command) ->
+make_adhoc_response(#adhoc_command{sid = <<"">>} = Command) ->
     SID = jlib:now_to_utc_string(p1_time_compat:timestamp()),
     Command#adhoc_command{sid = SID};
 make_adhoc_response(Command) ->
index a50b58b59d2cb3314b7e22b9843f8d408d9163b4..0b8f3b66874d65d4cc82d228d21d89bb855e123f 100644 (file)
@@ -69,7 +69,7 @@
      #elem{name = <<"query">>,
            xmlns = <<"jabber:iq:roster">>,
            result = {roster_query, '$items', '$ver'},
-           attrs = [#attr{name = <<"ver">>}],
+           attrs = [#attr{name = <<"ver">>, default = undefined}],
            refs = [#ref{name = roster_item, label = '$items'}]}).
 
 -xml(rosterver_feature,
 -xml(legacy_auth_username,
      #elem{name = <<"username">>,
           xmlns = <<"jabber:iq:auth">>,
-          cdata = #cdata{default = none},
           result = '$cdata'}).
 -xml(legacy_auth_password,
      #elem{name = <<"password">>,
           xmlns = <<"jabber:iq:auth">>,
-          cdata = #cdata{default = none},
           result = '$cdata'}).
 -xml(legacy_auth_digest,
      #elem{name = <<"digest">>,
           xmlns = <<"jabber:iq:auth">>,
-          cdata = #cdata{default = none},
           result = '$cdata'}).
 -xml(legacy_auth_resource,
      #elem{name = <<"resource">>,
           xmlns = <<"jabber:iq:auth">>,
-          cdata = #cdata{default = none},
           result = '$cdata'}).
 
 -xml(legacy_auth,
 -xml(register_username,
      #elem{name = <<"username">>,
            xmlns = <<"jabber:iq:register">>,
-           cdata = #cdata{default = none},
            result = '$cdata'}).
 -xml(register_nick,
      #elem{name = <<"nick">>,
            xmlns = <<"jabber:iq:register">>,
-           cdata = #cdata{default = none},
            result = '$cdata'}).
 -xml(register_password,
      #elem{name = <<"password">>,
            xmlns = <<"jabber:iq:register">>,
-           cdata = #cdata{default = none},
            result = '$cdata'}).
 -xml(register_name,
      #elem{name = <<"name">>,
            xmlns = <<"jabber:iq:register">>,
-           cdata = #cdata{default = none},
            result = '$cdata'}).
 -xml(register_first,
      #elem{name = <<"first">>,
            xmlns = <<"jabber:iq:register">>,
-           cdata = #cdata{default = none},
            result = '$cdata'}).
 -xml(register_last,
      #elem{name = <<"last">>,
            xmlns = <<"jabber:iq:register">>,
-           cdata = #cdata{default = none},
            result = '$cdata'}).
 -xml(register_email,
      #elem{name = <<"email">>,
            xmlns = <<"jabber:iq:register">>,
-           cdata = #cdata{default = none},
            result = '$cdata'}).
 -xml(register_address,
      #elem{name = <<"address">>,
            xmlns = <<"jabber:iq:register">>,
-           cdata = #cdata{default = none},
            result = '$cdata'}).
 -xml(register_city,
      #elem{name = <<"city">>,
            xmlns = <<"jabber:iq:register">>,
-           cdata = #cdata{default = none},
            result = '$cdata'}).
 -xml(register_state,
      #elem{name = <<"state">>,
            xmlns = <<"jabber:iq:register">>,
-           cdata = #cdata{default = none},
            result = '$cdata'}).
 -xml(register_zip,
      #elem{name = <<"zip">>,
            xmlns = <<"jabber:iq:register">>,
-           cdata = #cdata{default = none},
            result = '$cdata'}).
 -xml(register_phone,
      #elem{name = <<"phone">>,
            xmlns = <<"jabber:iq:register">>,
-           cdata = #cdata{default = none},
            result = '$cdata'}).
 -xml(register_url,
      #elem{name = <<"url">>,
            xmlns = <<"jabber:iq:register">>,
-           cdata = #cdata{default = none},
            result = '$cdata'}).
 -xml(register_date,
      #elem{name = <<"date">>,
            xmlns = <<"jabber:iq:register">>,
-           cdata = #cdata{default = none},
            result = '$cdata'}).
 -xml(register_misc,
      #elem{name = <<"misc">>,
            xmlns = <<"jabber:iq:register">>,
-           cdata = #cdata{default = none},
            result = '$cdata'}).
 -xml(register_text,
      #elem{name = <<"text">>,
            xmlns = <<"jabber:iq:register">>,
-           cdata = #cdata{default = none},
            result = '$cdata'}).
 -xml(register_key,
      #elem{name = <<"key">>,
            xmlns = <<"jabber:iq:register">>,
-           cdata = #cdata{default = none},
            result = '$cdata'}).
 
 -xml(register,
            xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
 -xml(stream_error_see_other_host,
      #elem{name = <<"see-other-host">>,
-           cdata = #cdata{required = true, label = '$host'},
+           cdata = #cdata{required = true, label = '$host',
+                         dec = {dec_host_port, []},
+                         enc = {enc_host_port, []}},
            result = {'see-other-host', '$host'},
            xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
 -xml(stream_error_system_shutdown,
           xmlns = <<"vcard-temp:x:update">>,
           result = '$cdata'}).
 
--record(vcard_xupdate, {us :: {binary(), binary()},
+-record(vcard_xupdate, {us = {<<>>, <<>>} :: {binary(), binary()},
                        hash :: binary()}).
 -type vcard_xupdate() :: #vcard_xupdate{}.
 
 -xml(vcard_xupdate,
      #elem{name = <<"x">>,
           xmlns = <<"vcard-temp:x:update">>,
-          result = {vcard_xupdate, undefined, '$hash'},
+          result = {vcard_xupdate, '$_', '$hash'},
           refs = [#ref{name = vcard_xupdate_photo, min = 0, max = 1,
                        label = '$hash'}]}).
 
      #elem{name = <<"subscriptions">>,
            xmlns = <<"http://jabber.org/protocol/pubsub">>,
            result = {'$node', '$subscriptions'},
-           attrs = [#attr{name = <<"node">>,
-                          default = none}],
+           attrs = [#attr{name = <<"node">>}],
            refs = [#ref{name = pubsub_subscription, label = '$subscriptions'}]}).
 
 -xml(pubsub_affiliations,
                          dec = {dec_int, [0, infinity]},
                          enc = {enc_int, []}}]}).
 
+-spec dec_tzo(_) -> {integer(), integer()}.
 dec_tzo(Val) ->
     [H1, M1] = str:tokens(Val, <<":">>),
     H = jlib:binary_to_integer(H1),
@@ -3104,12 +3085,14 @@ enc_tzo({H, M}) ->
            end,
     list_to_binary([Sign, io_lib:format("~2..0w:~2..0w", [H, M])]).
 
+-spec dec_utc(_) -> erlang:timestamp().
 dec_utc(Val) ->
     {_, _, _} = jlib:datetime_string_to_timestamp(Val).
 
 enc_utc(Val) ->
     jlib:now_to_utc_string(Val).
 
+-spec dec_jid(_) -> jid:jid().
 dec_jid(Val) ->
     case jid:from_string(Val) of
         error ->
@@ -3121,6 +3104,7 @@ dec_jid(Val) ->
 enc_jid(J) ->            
     jid:to_string(J).
 
+-spec resourceprep(_) -> binary().
 resourceprep(R) ->
     case jid:resourceprep(R) of
         error ->
@@ -3129,6 +3113,7 @@ resourceprep(R) ->
             R1
     end.
 
+-spec dec_bool(_) -> boolean().
 dec_bool(<<"false">>) -> false;
 dec_bool(<<"0">>) -> false;
 dec_bool(<<"true">>) -> true;
@@ -3141,6 +3126,7 @@ join([], _Sep) -> <<>>;
 join([H | T], Sep) ->
     <<H/binary, (<< <<Sep, X/binary>> || X <- T >>)/binary>>.
 
+-spec dec_ip(_) -> inet:ip_address().
 dec_ip(S) ->
     {ok, Addr} = inet_parse:address(binary_to_list(S)),
     Addr.
@@ -3151,6 +3137,33 @@ enc_ip({0,0,0,0,0,16#ffff,A,B}) ->
 enc_ip(Addr) ->
     list_to_binary(inet_parse:ntoa(Addr)).
 
+-spec re:split(_, _) -> binary().
+-spec base64:decode(_) -> binary().
+
+-spec dec_host_port(_) -> binary() | inet:ip_address() |
+                         {binary() | inet:ip_address(), non_neg_integer()}.
+dec_host_port(<<$[, T/binary>>) ->
+    [IP, <<$:, Port/binary>>] = binary:split(T, <<$]>>),
+    {dec_ip(IP), dec_int(Port, 0, 65535)};
+dec_host_port(S) ->
+    case binary:split(S, <<$:>>) of
+       [S] ->
+           try dec_ip(S) catch _:_ -> S end;
+       [S, P] ->
+           {try dec_ip(S) catch _:_ -> S end, dec_int(P, 0, 65535)}
+    end.
+
+enc_host_port(Host) when is_binary(Host) ->
+    Host;
+enc_host_port({{_,_,_,_,_,_,_,_} = IPv6, Port}) ->
+    enc_host_port({<<$[, (enc_ip(IPv6))/binary, $]>>, Port});
+enc_host_port({{_,_,_,_} = IPv4, Port}) ->
+    enc_host_port({enc_ip(IPv4), Port});
+enc_host_port({Host, Port}) ->
+    <<Host/binary, $:, (integer_to_binary(Port))/binary>>;
+enc_host_port(Addr) ->
+    enc_ip(Addr).
+
 %% Local Variables:
 %% mode: erlang
 %% End: