[svn-commits] oej: branch oej/codename-pineapple r47766 - in /team/oej/codename-pineapple/c...

svn-commits at lists.digium.com svn-commits at lists.digium.com
Thu Nov 16 14:36:34 MST 2006


Author: oej
Date: Thu Nov 16 15:36:33 2006
New Revision: 47766

URL: http://svn.digium.com/view/asterisk?view=rev&rev=47766
Log:
Moving network functions to sip3_network.c, encapsulating the sipnet and global objects for future
separation.

Modified:
    team/oej/codename-pineapple/channels/chan_sip3.c
    team/oej/codename-pineapple/channels/sip3/sip3_config.c
    team/oej/codename-pineapple/channels/sip3/sip3_network.c
    team/oej/codename-pineapple/channels/sip3/sip3funcs.h

Modified: team/oej/codename-pineapple/channels/chan_sip3.c
URL: http://svn.digium.com/view/asterisk/team/oej/codename-pineapple/channels/chan_sip3.c?view=diff&rev=47766&r1=47765&r2=47766
==============================================================================
--- team/oej/codename-pineapple/channels/chan_sip3.c (original)
+++ team/oej/codename-pineapple/channels/chan_sip3.c Thu Nov 16 15:36:33 2006
@@ -7089,17 +7089,21 @@
 		ast_log(LOG_ERROR, "Unable to create scheduler context\n");
 		return AST_MODULE_LOAD_FAILURE;
 	}
+	logdebug(4, "SIP3 :: Scheduler initialized...\n");
 
 	if (!(io = io_context_create())) {
 		ast_log(LOG_ERROR, "Unable to create I/O context\n");
 		sched_context_destroy(sched);
 		return AST_MODULE_LOAD_FAILURE;
 	}
+	logdebug(4, "SIP3 :: IO context initialized...\n");
 
 	sip_reloadreason = CHANNEL_MODULE_LOAD;
 
 	if(reload_config(sip_reloadreason))	/* Load the configuration from sip.conf */
 		return AST_MODULE_LOAD_DECLINE;
+
+	logdebug(4, "SIP3 :: Configuration loaded\n");
 
 	/* Make sure we can register our sip channel type */
 	if (ast_channel_register(&sip_tech)) {
@@ -7110,9 +7114,11 @@
 		/* Isn't there more to destroy here? */
 		return AST_MODULE_LOAD_FAILURE;
 	}
+	logdebug(4, "SIP3 :: Registered channel to PBX.\n");
 
 	/* Tell the RTP and UDPTL subdriver that we're here */
 	register_rtp_and_udptl();	/* See sip3_sdprtp.c */
+	logdebug(4, "SIP3 :: Initialized RTP and UDPTL. Ready for action\n");
 
 	/* Register dialplan applications */
 	ast_register_application(app_dtmfmode, sip_dtmfmode, synopsis_dtmfmode, descrip_dtmfmode);
@@ -7126,11 +7132,15 @@
 
 	/* Register manager commands */
 	sip_cli_and_manager_commands_register();
+	logdebug(4, "SIP3 :: Registered CLI and manager commands\n");
 	sip_poke_all_peers();	
+	logdebug(4, "SIP3 :: Scheduled poke of all peers\n");
 	sip_send_all_registers();
+	logdebug(4, "SIP3 :: Scheduled registration of services\n");
 	
 	/* And start the monitor for the first time */
 	restart_monitor();
+	logdebug(4, "SIP3 :: Monitor started. Ready for rock'n'roll! ---------------------------\n");
 
 	return AST_MODULE_LOAD_SUCCESS;
 }

Modified: team/oej/codename-pineapple/channels/sip3/sip3_config.c
URL: http://svn.digium.com/view/asterisk/team/oej/codename-pineapple/channels/sip3/sip3_config.c?view=diff&rev=47766&r1=47765&r2=47766
==============================================================================
--- team/oej/codename-pineapple/channels/sip3/sip3_config.c (original)
+++ team/oej/codename-pineapple/channels/sip3/sip3_config.c Thu Nov 16 15:36:33 2006
@@ -310,7 +310,7 @@
 /*! \brief Build peer from configuration (file or realtime static/dynamic) */
 static struct sip_peer *build_device(const char *name, struct ast_variable *v, struct ast_variable *alt, int realtime)
 {
-	struct sip_peer *peer = NULL;
+	struct sip_peer *device = NULL;
 	struct ast_ha *oldha = NULL;
 	int obproxyfound=0;
 	int found = 0;
@@ -327,40 +327,40 @@
 		   that case changes made to the peer name will be properly handled
 		   during reload
 		*/
-		peer = ASTOBJ_CONTAINER_FIND_UNLINK_FULL(&devicelist, name, name, 0, 0, strcmp);
-
-	if (peer) {
+		device = ASTOBJ_CONTAINER_FIND_UNLINK_FULL(&devicelist, name, name, 0, 0, strcmp);
+
+	if (device) {
 		/* Already in the list, remove it and it will be added back (or FREE'd)  */
 		found++;
-		if (!(peer->objflags & ASTOBJ_FLAG_MARKED))
+		if (!(device->objflags & ASTOBJ_FLAG_MARKED))
 			firstpass = 0;
  	} else {
-		if (!(peer = ast_calloc(1, sizeof(*peer))))
+		if (!(device = ast_calloc(1, sizeof(*device))))
 			return NULL;
 
 		if (realtime)
 			sipcounters.realtime_peers++;
 		else
 			sipcounters.static_peers++;
-		ASTOBJ_INIT(peer);
-	}
-	peer->type &= SIP_PEER;
+		ASTOBJ_INIT(device);
+	}
+	device->type &= SIP_PEER;
 
 	/* Note that our peer HAS had its reference count incrased */
 
 	if (firstpass) {
-		peer->lastmsgssent = -1;
-		oldha = peer->ha;
-		peer->ha = NULL;
-		set_device_defaults(peer);	/* Set peer defaults */
+		device->lastmsgssent = -1;
+		oldha = device->ha;
+		device->ha = NULL;
+		set_device_defaults(device);	/* Set peer defaults */
 	}
 	if (!found && name)
-			ast_copy_string(peer->name, name, sizeof(peer->name));
+			ast_copy_string(device->name, name, sizeof(device->name));
 
 	/* If we have channel variables, remove them (reload) */
-	if (peer->chanvars) {
-		ast_variables_destroy(peer->chanvars);
-		peer->chanvars = NULL;
+	if (device->chanvars) {
+		ast_variables_destroy(device->chanvars);
+		device->chanvars = NULL;
 		/* XXX should unregister ? */
 	}
 	for (; v || ((v = alt) && !(alt=NULL)); v = v->next) {
@@ -369,208 +369,208 @@
 		if (realtime && !strcasecmp(v->name, "regseconds")) {
 			ast_get_time_t(v->value, &regseconds, 0, NULL);
 		} else if (!strcasecmp(v->name, "domain")) {
-			ast_copy_string(peer->domain, v->value, sizeof(peer->domain));
+			ast_copy_string(device->domain, v->value, sizeof(device->domain));
 		} else if (realtime && !strcasecmp(v->name, "ipaddr") && !ast_strlen_zero(v->value) ) {
-			inet_aton(v->value, &(peer->addr.sin_addr));
+			inet_aton(v->value, &(device->addr.sin_addr));
 		} else if (realtime && !strcasecmp(v->name, "name"))
-			ast_copy_string(peer->name, v->value, sizeof(peer->name));
+			ast_copy_string(device->name, v->value, sizeof(device->name));
 		else if (realtime && !strcasecmp(v->name, "fullcontact")) {
-			ast_copy_string(peer->fullcontact, v->value, sizeof(peer->fullcontact));
-			ast_set_flag(&peer->flags[1], SIP_PAGE2_RT_FROMCONTACT);
+			ast_copy_string(device->fullcontact, v->value, sizeof(device->fullcontact));
+			ast_set_flag(&device->flags[1], SIP_PAGE2_RT_FROMCONTACT);
 		} else if (!strcasecmp(v->name, "secret")) 
-			ast_copy_string(peer->secret, v->value, sizeof(peer->secret));
+			ast_copy_string(device->secret, v->value, sizeof(device->secret));
 		else if (!strcasecmp(v->name, "authuser")) 
-			ast_copy_string(peer->authuser, v->value, sizeof(peer->authuser));
+			ast_copy_string(device->authuser, v->value, sizeof(device->authuser));
 		else if (!strcasecmp(v->name, "md5secret")) 
-			ast_copy_string(peer->md5secret, v->value, sizeof(peer->md5secret));
+			ast_copy_string(device->md5secret, v->value, sizeof(device->md5secret));
 		else if (!strcasecmp(v->name, "auth"))
-			peer->auth = add_realm_authentication(peer->auth, v->value, v->lineno);
+			device->auth = add_realm_authentication(device->auth, v->value, v->lineno);
 		else if (!strcasecmp(v->name, "callerid")) {
-			ast_callerid_split(v->value, peer->cid_name, sizeof(peer->cid_name), peer->cid_num, sizeof(peer->cid_num));
+			ast_callerid_split(v->value, device->cid_name, sizeof(device->cid_name), device->cid_num, sizeof(device->cid_num));
 		} else if (!strcasecmp(v->name, "fullname")) {
-			ast_copy_string(peer->cid_name, v->value, sizeof(peer->cid_name));
+			ast_copy_string(device->cid_name, v->value, sizeof(device->cid_name));
 		} else if (!strcasecmp(v->name, "cid_number")) {
-			ast_copy_string(peer->cid_num, v->value, sizeof(peer->cid_num));
+			ast_copy_string(device->cid_num, v->value, sizeof(device->cid_num));
 		} else if (!strcasecmp(v->name, "context")) {
-			ast_copy_string(peer->context, v->value, sizeof(peer->context));
+			ast_copy_string(device->context, v->value, sizeof(device->context));
 		} else if (!strcasecmp(v->name, "subscribecontext")) {
-			ast_copy_string(peer->subscribecontext, v->value, sizeof(peer->subscribecontext));
+			ast_copy_string(device->subscribecontext, v->value, sizeof(device->subscribecontext));
 		} else if (!strcasecmp(v->name, "fromdomain")) {
-			ast_copy_string(peer->fromdomain, v->value, sizeof(peer->fromdomain));
+			ast_copy_string(device->fromdomain, v->value, sizeof(device->fromdomain));
 		} else if (!strcasecmp(v->name, "usereqphone")) {
-			ast_set2_flag(&peer->flags[0], ast_true(v->value), SIP_USEREQPHONE);
+			ast_set2_flag(&device->flags[0], ast_true(v->value), SIP_USEREQPHONE);
 		} else if (!strcasecmp(v->name, "fromuser")) {
-			ast_copy_string(peer->fromuser, v->value, sizeof(peer->fromuser));
+			ast_copy_string(device->fromuser, v->value, sizeof(device->fromuser));
 		} else if (!strcasecmp(v->name, "host") || !strcasecmp(v->name, "outboundproxy")) {
 			if (!strcasecmp(v->value, "dynamic")) {
 				if (!strcasecmp(v->name, "outboundproxy") || obproxyfound) {
 					ast_log(LOG_WARNING, "You can't have a dynamic outbound proxy, you big silly head at line %d.\n", v->lineno);
 				} else {
 					/* They'll register with us */
-					ast_set_flag(&peer->flags[1], SIP_PAGE2_DYNAMIC);
+					ast_set_flag(&device->flags[1], SIP_PAGE2_DYNAMIC);
 					if (!found) {
 						/* Initialize stuff iff we're not found, otherwise
 						   we keep going with what we had */
-						memset(&peer->addr.sin_addr, 0, 4);
-						if (peer->addr.sin_port) {
+						memset(&device->addr.sin_addr, 0, 4);
+						if (device->addr.sin_port) {
 							/* If we've already got a port, make it the default rather than absolute */
-							peer->defaddr.sin_port = peer->addr.sin_port;
-							peer->addr.sin_port = 0;
+							device->defaddr.sin_port = device->addr.sin_port;
+							device->addr.sin_port = 0;
 						}
 					}
 				}
 			} else {
 				/* Non-dynamic.  Make sure we become that way if we're not */
-				if (peer->expire > -1)
-					ast_sched_del(sched, peer->expire);
-				peer->expire = -1;
-				ast_clear_flag(&peer->flags[1], SIP_PAGE2_DYNAMIC);
+				if (device->expire > -1)
+					ast_sched_del(sched, device->expire);
+				device->expire = -1;
+				ast_clear_flag(&device->flags[1], SIP_PAGE2_DYNAMIC);
 				if (!obproxyfound || !strcasecmp(v->name, "outboundproxy")) {
-					if (ast_get_ip_or_srv(&peer->addr, v->value, global.srvlookup ? "_sip._udp" : NULL)) {
-						ASTOBJ_UNREF(peer, sip_destroy_device);
+					if (ast_get_ip_or_srv(&device->addr, v->value, global.srvlookup ? "_sip._udp" : NULL)) {
+						ASTOBJ_UNREF(device, sip_destroy_device);
 						return NULL;
 					}
 				}
 				if (!strcasecmp(v->name, "outboundproxy"))
 					obproxyfound=1;
 				else {
-					ast_copy_string(peer->tohost, v->value, sizeof(peer->tohost));
-					if (!peer->addr.sin_port)
-						peer->addr.sin_port = htons(STANDARD_SIP_PORT);
+					ast_copy_string(device->tohost, v->value, sizeof(device->tohost));
+					if (!device->addr.sin_port)
+						device->addr.sin_port = htons(STANDARD_SIP_PORT);
 				}
 			}
 		} else if (!strcasecmp(v->name, "defaultip")) {
-			if (ast_get_ip(&peer->defaddr, v->value)) {
-				ASTOBJ_UNREF(peer, sip_destroy_device);
+			if (ast_get_ip(&device->defaddr, v->value)) {
+				ASTOBJ_UNREF(device, sip_destroy_device);
 				return NULL;
 			}
 		} else if (!strcasecmp(v->name, "permit") || !strcasecmp(v->name, "deny")) {
-			peer->ha = ast_append_ha(v->name, v->value, peer->ha);
+			device->ha = ast_append_ha(v->name, v->value, device->ha);
 		} else if (!strcasecmp(v->name, "port")) {
-			if (!realtime && ast_test_flag(&peer->flags[1], SIP_PAGE2_DYNAMIC))
-				peer->defaddr.sin_port = htons(atoi(v->value));
+			if (!realtime && ast_test_flag(&device->flags[1], SIP_PAGE2_DYNAMIC))
+				device->defaddr.sin_port = htons(atoi(v->value));
 			else
-				peer->addr.sin_port = htons(atoi(v->value));
+				device->addr.sin_port = htons(atoi(v->value));
 		} else if (!strcasecmp(v->name, "callingpres")) {
-			peer->callingpres = ast_parse_caller_presentation(v->value);
-			if (peer->callingpres == -1)
-				peer->callingpres = atoi(v->value);
+			device->callingpres = ast_parse_caller_presentation(v->value);
+			if (device->callingpres == -1)
+				device->callingpres = atoi(v->value);
 		} else if (!strcasecmp(v->name, "defaultuser")) {
-			ast_copy_string(peer->defaultuser, v->value, sizeof(peer->defaultuser));
+			ast_copy_string(device->defaultuser, v->value, sizeof(device->defaultuser));
 		} else if (!strcasecmp(v->name, "language")) {
-			ast_copy_string(peer->language, v->value, sizeof(peer->language));
+			ast_copy_string(device->language, v->value, sizeof(device->language));
 		} else if (!strcasecmp(v->name, "regexten")) {
-			ast_copy_string(peer->regexten, v->value, sizeof(peer->regexten));
+			ast_copy_string(device->regexten, v->value, sizeof(device->regexten));
 		} else if (!strcasecmp(v->name, "call-limit")) {
-			peer->call_limit = atoi(v->value);
-			if (peer->call_limit < 0)
-				peer->call_limit = 0;
+			device->call_limit = atoi(v->value);
+			if (device->call_limit < 0)
+				device->call_limit = 0;
 		} else if (!strcasecmp(v->name, "amaflags")) {
 			format = ast_cdr_amaflags2int(v->value);
 			if (format < 0) {
 				ast_log(LOG_WARNING, "Invalid AMA Flags for peer: %s at line %d\n", v->value, v->lineno);
 			} else {
-				peer->amaflags = format;
+				device->amaflags = format;
 			}
 		} else if (!strcasecmp(v->name, "accountcode")) {
-			ast_copy_string(peer->accountcode, v->value, sizeof(peer->accountcode));
+			ast_copy_string(device->accountcode, v->value, sizeof(device->accountcode));
 		} else if (!strcasecmp(v->name, "mohinterpret")
 			|| !strcasecmp(v->name, "musicclass") || !strcasecmp(v->name, "musiconhold")) {
-			ast_copy_string(peer->mohinterpret, v->value, sizeof(peer->mohinterpret));
+			ast_copy_string(device->mohinterpret, v->value, sizeof(device->mohinterpret));
 		} else if (!strcasecmp(v->name, "mohsuggest")) {
-			ast_copy_string(peer->mohsuggest, v->value, sizeof(peer->mohsuggest));
+			ast_copy_string(device->mohsuggest, v->value, sizeof(device->mohsuggest));
 		} else if (!strcasecmp(v->name, "mailbox")) {
-			ast_copy_string(peer->mailbox, v->value, sizeof(peer->mailbox));
+			ast_copy_string(device->mailbox, v->value, sizeof(device->mailbox));
 		} else if (!strcasecmp(v->name, "subscribemwi")) {
-			ast_set2_flag(&peer->flags[1], ast_true(v->value), SIP_PAGE2_SUBSCRIBEMWIONLY);
+			ast_set2_flag(&device->flags[1], ast_true(v->value), SIP_PAGE2_SUBSCRIBEMWIONLY);
 		} else if (!strcasecmp(v->name, "vmexten")) {
-			ast_copy_string(peer->vmexten, v->value, sizeof(peer->vmexten));
+			ast_copy_string(device->vmexten, v->value, sizeof(device->vmexten));
 		} else if (!strcasecmp(v->name, "callgroup")) {
-			peer->callgroup = ast_get_group(v->value);
+			device->callgroup = ast_get_group(v->value);
 		} else if (!strcasecmp(v->name, "allowtransfer")) {
-			peer->allowtransfer = ast_true(v->value) ? TRANSFER_OPENFORALL : TRANSFER_CLOSED;
+			device->allowtransfer = ast_true(v->value) ? TRANSFER_OPENFORALL : TRANSFER_CLOSED;
 		} else if (!strcasecmp(v->name, "pickupgroup")) {
-			peer->pickupgroup = ast_get_group(v->value);
+			device->pickupgroup = ast_get_group(v->value);
 		} else if (!strcasecmp(v->name, "allow")) {
-			ast_parse_allow_disallow(&peer->prefs, &peer->capability, v->value, 1);
+			ast_parse_allow_disallow(&device->prefs, &device->capability, v->value, 1);
 		} else if (!strcasecmp(v->name, "disallow")) {
-			ast_parse_allow_disallow(&peer->prefs, &peer->capability, v->value, 0);
+			ast_parse_allow_disallow(&device->prefs, &device->capability, v->value, 0);
 		} else if (!strcasecmp(v->name, "autoframing")) {
-			peer->autoframing = ast_true(v->value);
+			device->autoframing = ast_true(v->value);
 		} else if (!strcasecmp(v->name, "rtptimeout")) {
-			if ((sscanf(v->value, "%d", &peer->rtptimeout) != 1) || (peer->rtptimeout < 0)) {
+			if ((sscanf(v->value, "%d", &device->rtptimeout) != 1) || (device->rtptimeout < 0)) {
 				ast_log(LOG_WARNING, "'%s' is not a valid RTP hold time at line %d.  Using default.\n", v->value, v->lineno);
-				peer->rtptimeout = global.rtptimeout;
+				device->rtptimeout = global.rtptimeout;
 			}
 		} else if (!strcasecmp(v->name, "rtpholdtimeout")) {
-			if ((sscanf(v->value, "%d", &peer->rtpholdtimeout) != 1) || (peer->rtpholdtimeout < 0)) {
+			if ((sscanf(v->value, "%d", &device->rtpholdtimeout) != 1) || (device->rtpholdtimeout < 0)) {
 				ast_log(LOG_WARNING, "'%s' is not a valid RTP hold time at line %d.  Using default.\n", v->value, v->lineno);
-				peer->rtpholdtimeout = global.rtpholdtimeout;
+				device->rtpholdtimeout = global.rtpholdtimeout;
 			}
 		} else if (!strcasecmp(v->name, "rtpkeepalive")) {
-			if ((sscanf(v->value, "%d", &peer->rtpkeepalive) != 1) || (peer->rtpkeepalive < 0)) {
+			if ((sscanf(v->value, "%d", &device->rtpkeepalive) != 1) || (device->rtpkeepalive < 0)) {
 				ast_log(LOG_WARNING, "'%s' is not a valid RTP keepalive time at line %d.  Using default.\n", v->value, v->lineno);
-				peer->rtpkeepalive = global.rtpkeepalive;
+				device->rtpkeepalive = global.rtpkeepalive;
 			}
 		} else if (!strcasecmp(v->name, "setvar")) {
-			peer->chanvars = add_var(v->value, peer->chanvars);
+			device->chanvars = add_var(v->value, device->chanvars);
 		} else if (!strcasecmp(v->name, "qualify")) {
 			if (!strcasecmp(v->value, "no")) {
-				peer->maxms = 0;
+				device->maxms = 0;
 			} else if (!strcasecmp(v->value, "yes")) {
-				peer->maxms = DEFAULT_QUALIFY_MAXMS;
-			} else if (sscanf(v->value, "%d", &peer->maxms) != 1) {
-				ast_log(LOG_WARNING, "Qualification of peer '%s' should be 'yes', 'no', or a number of milliseconds at line %d of sip.conf\n", peer->name, v->lineno);
-				peer->maxms = 0;
+				device->maxms = DEFAULT_QUALIFY_MAXMS;
+			} else if (sscanf(v->value, "%d", &device->maxms) != 1) {
+				ast_log(LOG_WARNING, "Qualification of device '%s' should be 'yes', 'no', or a number of milliseconds at line %d of sip.conf\n", device->name, v->lineno);
+				device->maxms = 0;
 			}
 		} else if (!strcasecmp(v->name, "maxcallbitrate")) {
-			peer->maxcallbitrate = atoi(v->value);
-			if (peer->maxcallbitrate < 0)
-				peer->maxcallbitrate = global.default_maxcallbitrate;
+			device->maxcallbitrate = atoi(v->value);
+			if (device->maxcallbitrate < 0)
+				device->maxcallbitrate = global.default_maxcallbitrate;
 		} else if (!strcasecmp(v->name, "register")) {
 			if (ast_true(v->value)) {
 				if (realtime)
 					ast_log(LOG_ERROR, "register=yes is not supported for realtime.\n");
 				else {
-					ast_set_flag(&peer->flags[1], SIP_PAGE2_SERVICE);
+					ast_set_flag(&device->flags[1], SIP_PAGE2_SERVICE);
 					register_lineno = v->lineno;
 				}
 			}
 		} else if (!strcasecmp(v->name, "t38pt_udptl")) {
-			ast_set2_flag(&peer->flags[1], ast_true(v->value), SIP_PAGE2_T38SUPPORT_UDPTL);
+			ast_set2_flag(&device->flags[1], ast_true(v->value), SIP_PAGE2_T38SUPPORT_UDPTL);
 		} else if (!strcasecmp(v->name, "t38pt_rtp")) {
-			ast_set2_flag(&peer->flags[1], ast_true(v->value), SIP_PAGE2_T38SUPPORT_RTP);
+			ast_set2_flag(&device->flags[1], ast_true(v->value), SIP_PAGE2_T38SUPPORT_RTP);
 		} else if (!strcasecmp(v->name, "t38pt_tcp")) {
-			ast_set2_flag(&peer->flags[1], ast_true(v->value), SIP_PAGE2_T38SUPPORT_TCP);
+			ast_set2_flag(&device->flags[1], ast_true(v->value), SIP_PAGE2_T38SUPPORT_TCP);
 		}
 	}
-	if (!ast_test_flag(&global.flags[1], SIP_PAGE2_IGNOREREGEXPIRE) && ast_test_flag(&peer->flags[1], SIP_PAGE2_DYNAMIC) && realtime) {
+	if (!ast_test_flag(&global.flags[1], SIP_PAGE2_IGNOREREGEXPIRE) && ast_test_flag(&device->flags[1], SIP_PAGE2_DYNAMIC) && realtime) {
 		time_t nowtime = time(NULL);
 
 		if ((nowtime - regseconds) > 0) {
-			destroy_association(peer);
-			memset(&peer->addr, 0, sizeof(peer->addr));
+			destroy_association(device);
+			memset(&device->addr, 0, sizeof(device->addr));
 			if (option_debug)
 				ast_log(LOG_DEBUG, "Bah, we're expired (%d/%d/%d)!\n", (int)(nowtime - regseconds), (int)regseconds, (int)nowtime);
 		}
 	}
-	ast_copy_flags(&peer->flags[0], &peerflags[0], mask[0].flags);
-	ast_copy_flags(&peer->flags[1], &peerflags[1], mask[1].flags);
-	if (ast_test_flag(&peer->flags[1], SIP_PAGE2_ALLOWSUBSCRIBE))
+	ast_copy_flags(&device->flags[0], &peerflags[0], mask[0].flags);
+	ast_copy_flags(&device->flags[1], &peerflags[1], mask[1].flags);
+	if (ast_test_flag(&device->flags[1], SIP_PAGE2_ALLOWSUBSCRIBE))
 		global.allowsubscribe = TRUE;	/* No global ban any more */
-	if (!found && ast_test_flag(&peer->flags[1], SIP_PAGE2_DYNAMIC) && !ast_test_flag(&peer->flags[0], SIP_REALTIME))
-		reg_source_db(peer);
-	ASTOBJ_UNMARK(peer);
+	if (!found && ast_test_flag(&device->flags[1], SIP_PAGE2_DYNAMIC) && !ast_test_flag(&device->flags[0], SIP_REALTIME))
+		reg_source_db(device);
+	ASTOBJ_UNMARK(device);
 	ast_free_ha(oldha);
 	/* Start registration if needed */
-	if (ast_test_flag(&peer->flags[1], SIP_PAGE2_SERVICE)) {
-		sip_register(NULL, register_lineno, peer);	/* XXX How do we handle this at reload?? */
-	} else if (peer->registry) {
+	if (ast_test_flag(&device->flags[1], SIP_PAGE2_SERVICE)) {
+		sip_register(NULL, register_lineno, device);	/* XXX How do we handle this at reload?? */
+	} else if (device->registry) {
 		/* We have a registry entry for a peer that no longer wished to be registered */
-		ASTOBJ_UNREF(peer->registry,sip_registry_destroy);
-		peer->registry = NULL;
-	}
-	return peer;
+		ASTOBJ_UNREF(device->registry,sip_registry_destroy);
+		device->registry = NULL;
+	}
+	return device;
 }
 
 /*! \brief  realtime_peer: Get peer from realtime storage
@@ -640,10 +640,80 @@
 	return peer;
 }
 
+/*! \brief Reset settings of global settings structure */
+static void reset_global_settings(struct sip_globals *global)
+{
+	ast_clear_flag(&global->flags[0], AST_FLAGS_ALL);
+	ast_clear_flag(&global->flags[1], AST_FLAGS_ALL);
+	memset(&global->default_prefs, 0 , sizeof(global->default_prefs));
+	global->srvlookup = TRUE;
+	/*! \brief Codecs that we support by default: */
+	global->capability = AST_FORMAT_ULAW | AST_FORMAT_ALAW | AST_FORMAT_GSM | AST_FORMAT_H263;
+	global->dtmf_capability = AST_RTP_DTMF;
+	/*!< This is default: NO MMR and JBIG trancoding, NO fill bit removal, transferredTCF TCF, UDP FEC, Version 0 and 9600 max fax rate */
+	global->t38_capability = T38FAX_VERSION_0 | T38FAX_RATE_2400 | T38FAX_RATE_4800 | T38FAX_RATE_7200 | T38FAX_RATE_9600;
+
+	global->tos_sip = DEFAULT_TOS_SIP;
+	global->tos_audio = DEFAULT_TOS_AUDIO;
+	global->tos_video = DEFAULT_TOS_VIDEO;
+	global->tos_presence = DEFAULT_TOS_SIP;	/* Initialize to SIP type of service */
+	global->allow_external_domains = DEFAULT_ALLOW_EXT_DOM;				/* Allow external invites */
+	global->regcontext[0] = '\0';
+	global->notifyringing = DEFAULT_NOTIFYRINGING;
+	global->alwaysauthreject = 0;
+	global->allowsubscribe = FALSE;
+	ast_copy_string(global->useragent, DEFAULT_USERAGENT, sizeof(global->useragent));
+	ast_copy_string(global->default_notifymime, DEFAULT_NOTIFYMIME, sizeof(global->default_notifymime));
+	if (ast_strlen_zero(ast_config_AST_SYSTEM_NAME))
+		ast_copy_string(global->realm, DEFAULT_REALM, sizeof(global->realm));
+	else
+		ast_copy_string(global->realm, ast_config_AST_SYSTEM_NAME, sizeof(global->realm));
+	ast_copy_string(global->default_callerid, DEFAULT_CALLERID, sizeof(global->default_callerid));
+	global->compactheaders = DEFAULT_COMPACTHEADERS;
+	global->reg_timeout = DEFAULT_REGISTRATION_TIMEOUT;
+	global->regattempts_max = 0;
+	global->mwitime = DEFAULT_MWITIME;
+	global->autocreatepeer = DEFAULT_AUTOCREATEPEER;
+	global->allowguest = DEFAULT_ALLOWGUEST;
+	global->rtptimeout = 0;
+	global->rtpholdtimeout = 0;
+	global->rtpkeepalive = 0;
+	global->autoframing = 0;
+	global->default_subscribecontext[0] = '\0';
+	global->default_language[0] = '\0';
+	global->default_fromdomain[0] = '\0';
+	global->default_qualify = DEFAULT_QUALIFY;
+	global->default_qualifycheck_ok = DEFAULT_QUALIFY_FREQ_OK;	/*!< Default qualify time when status is ok */
+	global->default_qualifycheck_notok = DEFAULT_QUALIFY_FREQ_NOTOK;	/*!< Default qualify time when statusis not ok */
+	global->default_maxcallbitrate = DEFAULT_MAX_CALL_BITRATE;
+	ast_copy_string(global->default_mohinterpret, DEFAULT_MOHINTERPRET, sizeof(global->default_mohinterpret));
+	ast_copy_string(global->default_mohsuggest, DEFAULT_MOHSUGGEST, sizeof(global->default_mohsuggest));
+	ast_copy_string(global->default_vmexten, DEFAULT_VMEXTEN, sizeof(global->default_vmexten));
+	ast_set_flag(&global->flags[0], SIP_DTMF_RFC2833);			/*!< Default DTMF setting: RFC2833 */
+	ast_set_flag(&global->flags[0], SIP_NAT_RFC3581);			/*!< NAT support if requested by device with rport */
+	ast_set_flag(&global->flags[0], SIP_CAN_REINVITE);			/*!< Allow re-invites */
+
+	/* Debugging settings, always default to off */
+	global->dumphistory = FALSE;
+	global->recordhistory = FALSE;
+	ast_clear_flag(&global->flags[1], SIP_PAGE2_DEBUG_CONFIG);
+
+
+	global->allowtransfer = TRANSFER_OPENFORALL;	/* Merrily accept all transfers by default */
+	global->rtautoclear = 120;
+	ast_set_flag(&global->flags[1], SIP_PAGE2_ALLOWSUBSCRIBE);	/* Default for peers, users: TRUE */
+	ast_set_flag(&global->flags[1], SIP_PAGE2_ALLOWOVERLAP);		/* Default for peers, users: TRUE */
+	ast_set_flag(&global->flags[1], SIP_PAGE2_RTUPDATE);
+
+	ast_copy_string(global->default_context, DEFAULT_CONTEXT, sizeof(global->default_context));
+	global->relaxdtmf = FALSE;
+	global->callevents = FALSE;
+	global->t1min = DEFAULT_T1MIN;		
+}
+
 /*! \brief Re-read SIP.conf config file
-\note	This function reloads all config data, except for
-	active peers (with registrations). They will only
-	change configuration data at restart, not at reload.
+\note	This function reloads all config data.
+	They will only change configuration data at restart, not at reload.
 	SIP debug and recordhistory state will not change
  */
 int reload_config(enum channelreloadreason reason)
@@ -677,91 +747,17 @@
 	/* Clear all flags before setting default values */
 	/* Preserve debugging settings for console */
 	ast_copy_flags(&debugflag, &global.flags[1], SIP_PAGE2_DEBUG_CONSOLE);
-	ast_clear_flag(&global.flags[0], AST_FLAGS_ALL);
-	ast_clear_flag(&global.flags[1], AST_FLAGS_ALL);
 	ast_copy_flags(&global.flags[1], &debugflag, SIP_PAGE2_DEBUG_CONSOLE);
-
-	/* Reset IP addresses  */
-	memset(&sipnet.bindaddr, 0, sizeof(sipnet.bindaddr));
-	memset(&sipnet.localaddr, 0, sizeof(sipnet.localaddr));
-	memset(&sipnet.externip, 0, sizeof(sipnet.externip));
-	memset(&global.default_prefs, 0 , sizeof(global.default_prefs));
-	sipnet.outboundproxyip.sin_port = htons(STANDARD_SIP_PORT);
-	sipnet.outboundproxyip.sin_family = AF_INET;	/* Type of address: IPv4 */
-	sipnet_ourport_set(DEFAULT_LISTEN_SIP_PORT);
-	global.srvlookup = TRUE;
-	/*! \brief Codecs that we support by default: */
-	global.capability = AST_FORMAT_ULAW | AST_FORMAT_ALAW | AST_FORMAT_GSM | AST_FORMAT_H263;
-	global.dtmf_capability = AST_RTP_DTMF;
-	/*!< This is default: NO MMR and JBIG trancoding, NO fill bit removal, transferredTCF TCF, UDP FEC, Version 0 and 9600 max fax rate */
-	global.t38_capability = T38FAX_VERSION_0 | T38FAX_RATE_2400 | T38FAX_RATE_4800 | T38FAX_RATE_7200 | T38FAX_RATE_9600;
-	global.tos_sip = DEFAULT_TOS_SIP;
-	global.tos_audio = DEFAULT_TOS_AUDIO;
-	global.tos_video = DEFAULT_TOS_VIDEO;
-	global.tos_presence = DEFAULT_TOS_SIP;	/* Initialize to SIP type of service */
-	sipnet.externhost[0] = '\0';			/* External host name (for behind NAT DynDNS support) */
-	sipnet.externexpire = 0;			/* Expiration for DNS re-issuing */
-	sipnet.externrefresh = 10;
-	memset(&sipnet.outboundproxyip, 0, sizeof(sipnet.outboundproxyip));
-
+	
 	/* Reset channel settings to default before re-configuring */
-	global.allow_external_domains = DEFAULT_ALLOW_EXT_DOM;				/* Allow external invites */
-	global.regcontext[0] = '\0';
+	reset_ip_interface(&sipnet);		/* Clear IP interfaces */
+	reset_global_settings(&global);	/* Reset global global settings */
+
 	expiry.min_expiry = DEFAULT_MIN_EXPIRY;        /*!< Minimum accepted registration time */
 	expiry.max_expiry = DEFAULT_MAX_EXPIRY;        /*!< Maximum accepted registration time */
 	expiry.default_expiry = DEFAULT_DEFAULT_EXPIRY;
 	expiry.expiry = DEFAULT_EXPIRY;					/* Used anywhere??? */
-	global.notifyringing = DEFAULT_NOTIFYRINGING;
-	global.alwaysauthreject = 0;
-	global.allowsubscribe = FALSE;
-	ast_copy_string(global.useragent, DEFAULT_USERAGENT, sizeof(global.useragent));
-	ast_copy_string(global.default_notifymime, DEFAULT_NOTIFYMIME, sizeof(global.default_notifymime));
-	if (ast_strlen_zero(ast_config_AST_SYSTEM_NAME))
-		ast_copy_string(global.realm, DEFAULT_REALM, sizeof(global.realm));
-	else
-		ast_copy_string(global.realm, ast_config_AST_SYSTEM_NAME, sizeof(global.realm));
-	ast_copy_string(global.default_callerid, DEFAULT_CALLERID, sizeof(global.default_callerid));
-	global.compactheaders = DEFAULT_COMPACTHEADERS;
-	global.reg_timeout = DEFAULT_REGISTRATION_TIMEOUT;
-	global.regattempts_max = 0;
-	global.mwitime = DEFAULT_MWITIME;
-	global.autocreatepeer = DEFAULT_AUTOCREATEPEER;
-	global.allowguest = DEFAULT_ALLOWGUEST;
-	global.rtptimeout = 0;
-	global.rtpholdtimeout = 0;
-	global.rtpkeepalive = 0;
-	global.autoframing = 0;
-	global.allowtransfer = TRANSFER_OPENFORALL;	/* Merrily accept all transfers by default */
-	global.rtautoclear = 120;
-	ast_set_flag(&global.flags[1], SIP_PAGE2_ALLOWSUBSCRIBE);	/* Default for peers, users: TRUE */
-	ast_set_flag(&global.flags[1], SIP_PAGE2_ALLOWOVERLAP);		/* Default for peers, users: TRUE */
-	ast_set_flag(&global.flags[1], SIP_PAGE2_RTUPDATE);
-
-	/* Initialize some reasonable defaults at SIP reload (used both for channel and as default for peers and users */
-	ast_copy_string(global.default_context, DEFAULT_CONTEXT, sizeof(global.default_context));
-	global.default_subscribecontext[0] = '\0';
-	global.default_language[0] = '\0';
-	global.default_fromdomain[0] = '\0';
-	global.default_qualify = DEFAULT_QUALIFY;
-	global.default_qualifycheck_ok = DEFAULT_QUALIFY_FREQ_OK;	/*!< Default qualify time when status is ok */
-	global.default_qualifycheck_notok = DEFAULT_QUALIFY_FREQ_NOTOK;	/*!< Default qualify time when statusis not ok */
-	global.default_maxcallbitrate = DEFAULT_MAX_CALL_BITRATE;
-	ast_copy_string(global.default_mohinterpret, DEFAULT_MOHINTERPRET, sizeof(global.default_mohinterpret));
-	ast_copy_string(global.default_mohsuggest, DEFAULT_MOHSUGGEST, sizeof(global.default_mohsuggest));
-	ast_copy_string(global.default_vmexten, DEFAULT_VMEXTEN, sizeof(global.default_vmexten));
-	ast_set_flag(&global.flags[0], SIP_DTMF_RFC2833);			/*!< Default DTMF setting: RFC2833 */
-	ast_set_flag(&global.flags[0], SIP_NAT_RFC3581);			/*!< NAT support if requested by device with rport */
-	ast_set_flag(&global.flags[0], SIP_CAN_REINVITE);			/*!< Allow re-invites */
-
-	/* Debugging settings, always default to off */
-	global.dumphistory = FALSE;
-	global.recordhistory = FALSE;
-	ast_clear_flag(&global.flags[1], SIP_PAGE2_DEBUG_CONFIG);
-
-	/* Misc settings for the channel */
-	global.relaxdtmf = FALSE;
-	global.callevents = FALSE;
-	global.t1min = DEFAULT_T1MIN;		
+
 
 	/* Copy the default jb config over global.jbconf */
 	memcpy(&global.jbconf, &default_jbconf, sizeof(struct ast_jb_conf));
@@ -776,7 +772,6 @@
 		if (!ast_jb_read_conf(&global.jbconf, v->name, v->value))
 			continue;
 
-		/* Create the interface list */
 		if (!strcasecmp(v->name, "context")) {
 			ast_copy_string(global.default_context, v->value, sizeof(global.default_context));
 		} else if (!strcasecmp(v->name, "realm")) {
@@ -993,7 +988,6 @@
 			if(sscanf(v->value, "%d", &freq) != 1) 
 				if (freq)
 					global.default_qualifycheck_notok = freq;
-		} else if (!strcasecmp(v->name, "qualify-timer-notok")) {
 		} else if (!strcasecmp(v->name, "callevents")) {
 			global.callevents = ast_true(v->value);
 		} else if (!strcasecmp(v->name, "maxcallbitrate")) {
@@ -1035,6 +1029,8 @@
 	cat = NULL;
 	while ( (cat = ast_category_browse(cfg, cat)) ) {
 		const char *utype;
+
+		/* Skip general section, as well as authentication section */
 		if (!strcasecmp(cat, "general") || !strcasecmp(cat, "authentication"))
 			continue;
 		utype = ast_variable_retrieve(cfg, cat, "type");
@@ -1060,21 +1056,6 @@
 			}
 		}
 	}
-	if (ast_find_ourip(&sipnet.__ourip, sipnet.bindaddr)) {
-		ast_log(LOG_WARNING, "Unable to get own IP address, SIP disabled\n");
-		return 0;
-	}
-	if (!ntohs(sipnet.bindaddr.sin_port))
-		sipnet.bindaddr.sin_port = ntohs(DEFAULT_LISTEN_SIP_PORT);
-	sipnet.bindaddr.sin_family = AF_INET;
-	sipnet_lock();
-	if (sipsocket_initialized() && (memcmp(&old_bindaddr, &sipnet.bindaddr, sizeof(struct sockaddr_in)))) {
-		close(sipnet.sipsock);
-		sipnet.sipsock = -1;
-	}
-	if (!sipsocket_initialized()) 
-		sipsocket_open();	/* Open socket, bind to address and set TOS option */
-	sipnet_unlock();
 
 	/* Add default domains - host name, IP address and IP:port */
 	/* Only do this if user added any sip domain with "localdomains" */
@@ -1112,6 +1093,8 @@
 
 	/* Done, tell the manager */
 	manager_event(EVENT_FLAG_SYSTEM, "ChannelReload", "Channel: SIP\r\nReloadReason: %s\r\nRegistry_Count: %d\r\nPeer_Count: %d\r\nUser_Count: %d\r\n\r\n", channelreloadreason2txt(reason), registry_count, peer_count, user_count);
+	if (sipsock_init(&sipnet, &old_bindaddr) == -1) 
+		ast_log(LOG_WARNING, "Unable to get own IP address, SIP disabled\n");
 
 	return 0;
 }

Modified: team/oej/codename-pineapple/channels/sip3/sip3_network.c
URL: http://svn.digium.com/view/asterisk/team/oej/codename-pineapple/channels/sip3/sip3_network.c?view=diff&rev=47766&r1=47765&r2=47766
==============================================================================
--- team/oej/codename-pineapple/channels/sip3/sip3_network.c (original)
+++ team/oej/codename-pineapple/channels/sip3/sip3_network.c Thu Nov 16 15:36:33 2006
@@ -113,6 +113,47 @@
 	ast_mutex_unlock(&netlock);
 }
 
+/*! \brief clear IP interfaces */
+void reset_ip_interface(struct sip_network *sipnet)
+{
+	/* Reset IP addresses  */
+	memset(&sipnet->bindaddr, 0, sizeof(sipnet->bindaddr));
+	memset(&sipnet->localaddr, 0, sizeof(sipnet->localaddr));
+	memset(&sipnet->externip, 0, sizeof(sipnet->externip));
+
+	sipnet->outboundproxyip.sin_port = htons(STANDARD_SIP_PORT);
+	sipnet->outboundproxyip.sin_family = AF_INET;	/* Type of address: IPv4 */
+	memset(&sipnet->outboundproxyip, 0, sizeof(sipnet->outboundproxyip));
+
+	sipnet_ourport_set(DEFAULT_LISTEN_SIP_PORT);
+	sipnet->externhost[0] = '\0';			/* External host name (for behind NAT DynDNS support) */
+	sipnet->externexpire = 0;			/* Expiration for DNS re-issuing */
+	sipnet->externrefresh = 10;
+
+}
+
+/*! \brief Initialize IP socket on configured address - the bind address.
+	\todo Needs to be converted to netsock */
+int sipsock_init(struct sip_network *sipnet, struct sockaddr_in *old_bindaddr)
+{
+	if (ast_find_ourip(&sipnet->__ourip, sipnet->bindaddr)) {
+		ast_log(LOG_WARNING, "Unable to get own IP address, SIP disabled\n");
+		return -1;
+	}
+	if (!ntohs(sipnet->bindaddr.sin_port))
+		sipnet->bindaddr.sin_port = ntohs(DEFAULT_LISTEN_SIP_PORT);
+	sipnet->bindaddr.sin_family = AF_INET;
+	sipnet_lock();
+	if (sipsocket_initialized() && (memcmp(old_bindaddr, &sipnet->bindaddr, sizeof(struct sockaddr_in)))) {
+		close(sipnet->sipsock);
+		sipnet->sipsock = -1;
+	}
+	if (!sipsocket_initialized()) 
+		sipsocket_open();	/* Open socket, bind to address and set TOS option */
+	sipnet_unlock();
+	return 0;
+}
+
 /*! \brief Read data from SIP socket
 \note sipsock_read locks the owner channel while we are processing the SIP message
 \return 1 on error, 0 on success

Modified: team/oej/codename-pineapple/channels/sip3/sip3funcs.h
URL: http://svn.digium.com/view/asterisk/team/oej/codename-pineapple/channels/sip3/sip3funcs.h?view=diff&rev=47766&r1=47765&r2=47766
==============================================================================
--- team/oej/codename-pineapple/channels/sip3/sip3funcs.h (original)
+++ team/oej/codename-pineapple/channels/sip3/sip3funcs.h Thu Nov 16 15:36:33 2006
@@ -93,6 +93,8 @@
 GNURK int transmit_state_notify(struct sip_dialog *p, int state, int full, int timeout);
 
 /*! sip3_network.c */
+GNURK void reset_ip_interface(struct sip_network *sipsock);
+GNURK int sipsock_init(struct sip_network *sipsock, struct sockaddr_in *old_bindappr);
 GNURK int sipsock_read(int *id, int fd, short events, void *ignore);
 GNURK int sipnet_ourport(void);		/*!< Get current port number */
 GNURK void sipnet_ourport_set(int port);	/*!< Set our port number */



More information about the svn-commits mailing list