Index: channels/chan_sip.c =================================================================== --- channels/chan_sip.c (revision 167372) +++ channels/chan_sip.c (working copy) @@ -23076,10 +23076,15 @@ if (ucfg) { struct ast_variable *gen; int genhassip, genregistersip; - const char *hassip, *registersip; - + const char *hassip, *registersip, *gentype, *type; + genhassip = ast_true(ast_variable_retrieve(ucfg, "general", "hassip")); genregistersip = ast_true(ast_variable_retrieve(ucfg, "general", "registersip")); + gentype = ast_variable_retrieve(ucfg, "general", "siptype"); + if (!gentype) { + gentype = "friend"; + ast_log(LOG_DEBUG, "SIP type not specified in general section, assuming 'friend'\n"); + } gen = ast_variable_browse(ucfg, "general"); cat = ast_category_browse(ucfg, NULL); while (cat) { @@ -23087,7 +23092,23 @@ hassip = ast_variable_retrieve(ucfg, cat, "hassip"); registersip = ast_variable_retrieve(ucfg, cat, "registersip"); if (ast_true(hassip) || (!hassip && genhassip)) { - peer = build_peer(cat, gen, ast_variable_browse(ucfg, cat), 0, FALSE); + + type = ast_variable_retrieve(ucfg, cat, "siptype"); + if (!type) { + type = gentype; + } + + if ( !strcasecmp(type, "peer") ) { + ast_log(LOG_DEBUG, "generating SIP peer for '%s' in %s\n", cat, "users.conf"); + peer = build_peer(cat, gen, ast_variable_browse(ucfg, cat), 0, TRUE); + } else if (!strcasecmp(type, "user") || !strcasecmp(type, "friend")) { + ast_log(LOG_DEBUG, "generating SIP user/friend for '%s' in %s\n", cat, "users.conf"); + peer = build_peer(cat, gen, ast_variable_browse(ucfg, cat), 0, FALSE); + } else { + ast_log(LOG_WARNING, "Unknown type '%s' for '%s' in %s, ignoring ...\n", type, cat, "sip.conf"); + continue; + } + if (peer) { ao2_t_link(peers, peer, "link peer into peer table"); if (peer->addr.sin_addr.s_addr) { Index: configs/users.conf.sample =================================================================== --- configs/users.conf.sample (revision 167372) +++ configs/users.conf.sample (working copy) @@ -30,10 +30,17 @@ ; vmsecret = 1234 ; -; Create SIP Peer +; Create SIP user/peer ; hassip = yes ; +; Specify SIP type, default is 'friend' +; Can be overruled on a per-user basis by using siptype=.... +; +;siptype = peer +; +hassip = yes +; ; Create IAX friend ; hasiax = yes @@ -77,6 +84,7 @@ ;hasmanager = no ;callwaiting = no ;context = international +;siptype = peer ; ; Some administrators choose alphanumeric extensions, but still want their ; users to be reachable by traditional numeric extensions, specified by the