[asterisk-commits] crichter: branch 1.2 r68631 - in /branches/1.2/channels: ./ misdn/

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Mon Jun 11 02:18:02 MST 2007


Author: crichter
Date: Mon Jun 11 04:18:01 2007
New Revision: 68631

URL: http://svn.digium.com/view/asterisk?view=rev&rev=68631
Log:
fixed problem that the dummybc chanels had no lock, checking for the lock now. Also fixed the channel restart stuff, we can now specify and restart particular channels too.

Modified:
    branches/1.2/channels/chan_misdn.c
    branches/1.2/channels/misdn/ie.c
    branches/1.2/channels/misdn/isdn_lib.c
    branches/1.2/channels/misdn/isdn_lib.h
    branches/1.2/channels/misdn/isdn_msg_parser.c

Modified: branches/1.2/channels/chan_misdn.c
URL: http://svn.digium.com/view/asterisk/branches/1.2/channels/chan_misdn.c?view=diff&rev=68631&r1=68630&r2=68631
==============================================================================
--- branches/1.2/channels/chan_misdn.c (original)
+++ branches/1.2/channels/chan_misdn.c Mon Jun 11 04:18:01 2007
@@ -695,7 +695,7 @@
 static int misdn_port_block(int fd, int argc, char *argv[])
 {
 	int port;
-  
+
 	if (argc != 4)
 		return RESULT_SHOWUSAGE;
   
@@ -1096,13 +1096,18 @@
 static int misdn_send_restart(int fd, int argc, char *argv[])
 {
 	int port;
-	
-	if (argc != 4)
+	int channel;
+	
+	if ( (argc < 4) ||  (argc >  5) )
 		return RESULT_SHOWUSAGE;
   
 	port = atoi(argv[3]);
- 
- 	misdn_lib_send_restart(port);
+
+	if (argc==5) {
+		channel = atoi(argv[4]);
+ 		misdn_lib_send_restart(port, channel);
+	} else
+ 		misdn_lib_send_restart(port, -1 );
 	
 	return 0;
 }

Modified: branches/1.2/channels/misdn/ie.c
URL: http://svn.digium.com/view/asterisk/branches/1.2/channels/misdn/ie.c?view=diff&rev=68631&r1=68630&r2=68631
==============================================================================
--- branches/1.2/channels/misdn/ie.c (original)
+++ branches/1.2/channels/misdn/ie.c Mon Jun 11 04:18:01 2007
@@ -1386,3 +1386,23 @@
 
 
 
+
+/* IE_DISPLAY */
+static void enc_ie_restart_ind(unsigned char **ntmode, msg_t *msg, unsigned char rind, int nt, struct misdn_bchannel *bc)
+{
+	unsigned char *p;
+	Q931_info_t *qi = (Q931_info_t *)(msg->data + mISDN_HEADER_LEN);
+	/* if (MISDN_IE_DEBG) printf("    display='%s' (len=%d)\n", display, strlen((char *)display)); */
+
+	p = msg_put(msg, 3);
+	if (nt)
+		*ntmode = p+1;
+	else
+		qi->QI_ELEMENT(restart_ind) = p - (unsigned char *)qi - sizeof(Q931_info_t);
+	p[0] = IE_RESTART_IND;
+	p[1] = 1;
+	p[2] = rind;
+
+}
+
+

Modified: branches/1.2/channels/misdn/isdn_lib.c
URL: http://svn.digium.com/view/asterisk/branches/1.2/channels/misdn/isdn_lib.c?view=diff&rev=68631&r1=68630&r2=68631
==============================================================================
--- branches/1.2/channels/misdn/isdn_lib.c (original)
+++ branches/1.2/channels/misdn/isdn_lib.c Mon Jun 11 04:18:01 2007
@@ -1121,9 +1121,6 @@
 			sem_init(ibuf->rsem,0,0);
 		
 	}
-	
-	
-	
 	
 	{
 		stack_info_t *stinf;
@@ -3189,13 +3186,15 @@
 void misdn_send_lock(struct misdn_bchannel *bc)
 {
 	//cb_log(0,bc->port,"Locking bc->pid:%d\n", bc->pid);
-	pthread_mutex_lock(&bc->send_lock->lock);
+	if (bc->send_lock)
+		pthread_mutex_lock(&bc->send_lock->lock);
 }
 
 void misdn_send_unlock(struct misdn_bchannel *bc)
 {
 	//cb_log(0,bc->port,"UnLocking bc->pid:%d\n", bc->pid);
-	pthread_mutex_unlock(&bc->send_lock->lock);
+	if (bc->send_lock)
+		pthread_mutex_unlock(&bc->send_lock->lock);
 }
 
 int misdn_lib_send_event(struct misdn_bchannel *bc, enum event_e event )
@@ -3634,7 +3633,7 @@
 }
 
 /*Sends Restart message for every bchnanel*/
-int misdn_lib_send_restart(int port)
+int misdn_lib_send_restart(int port, int channel)
 {
 	struct misdn_stack *stack=find_stack_by_port(port);
 	cb_log(0, port, "Sending Restarts on this port.\n");
@@ -3645,9 +3644,17 @@
 	dummybc.l3_id=MISDN_ID_GLOBAL;
 	dummybc.nt=stack->nt;
 
+	/*default is all channels*/
 	int max=stack->pri?30:2;
-	int i;
-	for (i=1;i<=max;i++) {
+	int i=1;
+	
+	/*if a channel is specified we restart only this one*/
+	if (channel > 0) {
+		i=channel;
+		max=channel;
+	}
+
+	for (;i<=max;i++) {
 		dummybc.channel=i;
 		cb_log(0, port, "Restarting channel %d\n",i);
 		misdn_lib_send_event(&dummybc, EVENT_RESTART);

Modified: branches/1.2/channels/misdn/isdn_lib.h
URL: http://svn.digium.com/view/asterisk/branches/1.2/channels/misdn/isdn_lib.h?view=diff&rev=68631&r1=68630&r2=68631
==============================================================================
--- branches/1.2/channels/misdn/isdn_lib.h (original)
+++ branches/1.2/channels/misdn/isdn_lib.h Mon Jun 11 04:18:01 2007
@@ -419,7 +419,7 @@
 
 int misdn_lib_port_restart(int port);
 int misdn_lib_pid_restart(int pid);
-int misdn_lib_send_restart(int port);
+int misdn_lib_send_restart(int port, int channel);
 
 int misdn_lib_get_port_info(int port);
 

Modified: branches/1.2/channels/misdn/isdn_msg_parser.c
URL: http://svn.digium.com/view/asterisk/branches/1.2/channels/misdn/isdn_msg_parser.c?view=diff&rev=68631&r1=68630&r2=68631
==============================================================================
--- branches/1.2/channels/misdn/isdn_msg_parser.c (original)
+++ branches/1.2/channels/misdn/isdn_msg_parser.c Mon Jun 11 04:18:01 2007
@@ -803,6 +803,7 @@
 	printf("Building RESTART Msg\n"); 
 #endif
 	enc_ie_channel_id(&restart->CHANNEL_ID, msg, 1,bc->channel, nt,bc);
+	enc_ie_restart_ind(&restart->RESTART_IND, msg, 0x80, nt, bc);
 
 	cb_log(0,bc->port, "Restarting channel %d\n", bc->channel);
 	



More information about the asterisk-commits mailing list