[svn-commits] mattf: branch mattf/bug13495 r235653 - /team/mattf/bug13495/channels/

SVN commits to the Digium repositories svn-commits at lists.digium.com
Fri Dec 18 16:39:41 CST 2009


Author: mattf
Date: Fri Dec 18 16:39:39 2009
New Revision: 235653

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=235653
Log:
Add some fixes for reestablishing client and server connections

Modified:
    team/mattf/bug13495/channels/chan_dahdi.c

Modified: team/mattf/bug13495/channels/chan_dahdi.c
URL: http://svnview.digium.com/svn/asterisk/team/mattf/bug13495/channels/chan_dahdi.c?view=diff&rev=235653&r1=235652&r2=235653
==============================================================================
--- team/mattf/bug13495/channels/chan_dahdi.c (original)
+++ team/mattf/bug13495/channels/chan_dahdi.c Fri Dec 18 16:39:39 2009
@@ -1024,21 +1024,33 @@
 	int slave_sock;
 	int i;
 	unsigned int len;
+	int reuse = 1;
+
 
 	if ((slave_chan_server.fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
 		ast_log(LOG_ERROR, "Unable to open socket for SS7 slave server\n");
 		return NULL;
 	}
+
+#if 0
+	setsockopt(slave_chan_server.fd, SOL_SOCKET, SO_REUSEADDR,
+		   (const char*)&reuse,
+		   sizeof reuse);
+#endif
 
 	memset(&my_addr, 0, sizeof(my_addr));
 	my_addr.sin_family = AF_INET;
 	my_addr.sin_port = htons(SS7_SLAVE_SERVER_PORT);
 	my_addr.sin_addr.s_addr = htons(INADDR_ANY);
 
+rebind:
+
 	if (bind(slave_chan_server.fd, (struct sockaddr *) &my_addr, sizeof(my_addr))) {
-		ast_log(LOG_ERROR, "Unable to bind to port %d in SS7 slave server\n", 7777);
-		close(slave_chan_server.fd);
-		return NULL;
+		ast_log(LOG_ERROR, "Unable to bind to port %d in SS7 slave server retrying in 5 seconds\n", 7777);
+		sleep(5);
+		goto rebind;
+		//close(slave_chan_server.fd);
+		//return NULL;
 	}
 
 	if (listen(slave_chan_server.fd, SS7_MAX_SLAVES) == -1) {
@@ -1059,6 +1071,7 @@
 			if (!strcasecmp(ast_inet_ntoa(slave_addr.sin_addr), slave_chan_server.slave_channel[i].addr)) {
 				int flags;
 				struct dahdi_ss7 *ss7 = ss7_resolve_linkset(slave_chan_server.slave_channel[i].linksetnum);
+				int j;
 
 				ast_log(LOG_NOTICE, "Accepting SS7 slave connection from host %s fd %d\n", ast_inet_ntoa(slave_addr.sin_addr), slave_sock);
 
@@ -1075,14 +1088,14 @@
 
 				ast_mutex_lock(&ss7->lock);
 
-				for (i = 0; i < ss7->numsigchans; i++) {
-					if (!strcasecmp(ss7->sigchans[i], "slave") && (ss7->fds[i] == -1)) {
+				for (j = 0; j < ss7->numsigchans; j++) {
+					if (!strcasecmp(ss7->sigchans[j], "slave") && (ss7->fds[j] == -1)) {
 						isup_masquerade_set_route_fd(ss7->ss7, slave_sock,
 								slave_chan_server.slave_channel[i].startcic,
 								slave_chan_server.slave_channel[i].endcic,
 								slave_chan_server.slave_channel[i].opc);
 
-						ss7->fds[i] = slave_sock;
+						ss7->fds[j] = slave_sock;
 						/* XXX */
 						if (ss7->master != AST_PTHREADT_NULL)
 							pthread_kill(ss7->master, SIGURG);
@@ -10918,7 +10931,8 @@
 					p->called_complete = 1; /* If COT succesful start call! */
 					/* Set DNID */						
 					strncpy(p->dnid, p->exten, sizeof(p->dnid));
-					if ((e->e == ISUP_EVENT_IAM) ? !(e->iam.cot_check_required || e->iam.cot_performed_on_previous_cic) : (!(e->sam.cot_check_required | e->sam.cot_performed_on_previous_cic) || e->sam.cot_check_passed))
+					//if ((e->e == ISUP_EVENT_IAM) ? !(e->iam.cot_check_required || e->iam.cot_performed_on_previous_cic) : (!(e->sam.cot_check_required | e->sam.cot_performed_on_previous_cic) || e->sam.cot_check_passed))
+					if (e->e == ISUP_EVENT_IAM)
 						ss7_start_call(p, linkset);
 				} else if (!ast_matchmore_extension(NULL, p->context, p->exten, 1, p->cid_num) || p->called_complete) {
 					ast_debug(1, "Call on CIC for unconfigured extension %s\n", p->exten);
@@ -10926,7 +10940,8 @@
 				}
 				ast_mutex_unlock(&p->lock);
 
-				if (e->iam.cot_performed_on_previous_cic) {
+				//if (e->iam.cot_performed_on_previous_cic) {
+				if (0) {
 					chanpos = ss7_find_cic(linkset, (e->iam.cic - 1), e->iam.opc);
 					if (chanpos < 0) {
 						/* some stupid switch do this */
@@ -10944,7 +10959,8 @@
 				}
 				break;
 			case ISUP_EVENT_COT:
-				if (e->cot.cot_performed_on_previous_cic) {
+				//if (e->cot.cot_performed_on_previous_cic) {
+				if (0) {
 					chanpos = ss7_find_cic(linkset, (e->cot.cic - 1), e->cot.opc);
 					/* some stupid switches do this!!! */
 					if (chanpos > 0) {
@@ -16654,10 +16670,12 @@
 					ast_log(LOG_ERROR, "Invalid linkset number.  Must be between 1 and %d\n", NUM_SPANS + 1);
 					return -1;
 				}
+#if 0
 				if(!link->ss7)
 					ast_log(LOG_ERROR, "Please specify non_isdn_access after sigchan!\n");
 				else if (ast_true(v->value))
 					ss7_clear_flags(link->ss7, SS7_ISDN_ACCESS_INDICATOR);
+#endif
 			} else if (!strcasecmp(v->name, "sls_shift")) {
 				struct dahdi_ss7 *link;
 				link = ss7_resolve_linkset(cur_linkset);




More information about the svn-commits mailing list