| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | #ifndef ISDN_LIB_INTERN
 | 
					
						
							| 
									
										
										
										
											2005-12-09 11:01:18 +00:00
										 |  |  | #define ISDN_LIB_INTERN
 | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-12-09 11:01:18 +00:00
										 |  |  | #include <mISDNuser/mISDNlib.h>
 | 
					
						
							|  |  |  | #include <mISDNuser/isdn_net.h>
 | 
					
						
							|  |  |  | #include <mISDNuser/l3dss1.h>
 | 
					
						
							|  |  |  | #include <mISDNuser/net_l3.h>
 | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <pthread.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "isdn_lib.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-07-11 14:38:01 +00:00
										 |  |  | #ifndef MISDNUSER_VERSION_CODE
 | 
					
						
							|  |  |  | #error "You need a newer version of mISDNuser ..."
 | 
					
						
							|  |  |  | #elif MISDNUSER_VERSION_CODE < MISDNUSER_VERSION(1, 0, 3)
 | 
					
						
							| 
									
										
										
										
											2006-08-15 16:49:26 +00:00
										 |  |  | #error "You need a newer version of mISDNuser ..."
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-12-09 11:01:18 +00:00
										 |  |  | #define QI_ELEMENT(a) a.off
 | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef mISDNUSER_HEAD_SIZE
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define mISDNUSER_HEAD_SIZE (sizeof(mISDNuser_head_t))
 | 
					
						
							| 
									
										
										
										
											2006-02-08 16:10:21 +00:00
										 |  |  | /*#define mISDNUSER_HEAD_SIZE (sizeof(mISDN_head_t))*/ | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-30 16:49:02 +00:00
										 |  |  | #if 0
 | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | ibuffer_t *astbuf;		/* Not used */ | 
					
						
							|  |  |  | ibuffer_t *misdnbuf;	/* Not used */ | 
					
						
							| 
									
										
										
										
											2008-10-30 16:49:02 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 62912 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.4
................
r62912 | crichter | 2007-05-03 16:36:32 +0200 (Do, 03 Mai 2007) | 17 lines
Merged revisions 61357,61770,62885 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.2
........
r61357 | crichter | 2007-04-11 14:05:57 +0200 (Mi, 11 Apr 2007) | 1 line
some fixes for PMP Hold/Retrieve, it should work now, when briding=no
........
r61770 | crichter | 2007-04-24 15:50:05 +0200 (Di, 24 Apr 2007) | 1 line
added lock for sending messages to avoid double sending. shuffled some empty_chans after the cb_event calls, this avoids that a release_complete from a quite different call releases a fresh created setup by accident.
........
r62885 | crichter | 2007-05-03 15:59:00 +0200 (Do, 03 Mai 2007) | 1 line
fixed the problem that misdn_write did not return -1 when called with 0 samples in a frame this resultet in a deadlock in some circumstances, when the call ended because of a busy extension.  added encoding of keypad.
........
................
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@64955 65c4cc65-6c06-0410-ace0-fbb531ad65f3
											
										 
											2007-05-18 09:50:33 +00:00
										 |  |  | struct send_lock { | 
					
						
							|  |  |  | 	pthread_mutex_t lock; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | struct isdn_msg { | 
					
						
							|  |  |  | 	unsigned long misdn_msg; | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 	enum event_e event; | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 	void (*msg_parser)(struct isdn_msg *msgs, msg_t *msg, struct misdn_bchannel *bc, int nt); | 
					
						
							|  |  |  | 	msg_t *(*msg_builder)(struct isdn_msg *msgs, struct misdn_bchannel *bc, int nt); | 
					
						
							|  |  |  | 	char *info; | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | } ; | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* for isdn_msg_parser.c */ | 
					
						
							|  |  |  | msg_t *create_l3msg(int prim, int mt, int dinfo , int size, int nt); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-21 17:44:01 +00:00
										 |  |  | #if defined(AST_MISDN_ENHANCEMENTS)
 | 
					
						
							|  |  |  | /* Max call-completion REGISTER signaling links per stack/port */ | 
					
						
							|  |  |  | #define MISDN_MAX_REGISTER_LINKS	MAX_BCHANS
 | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | /* Max call-completion REGISTER signaling links per stack/port */ | 
					
						
							|  |  |  | #define MISDN_MAX_REGISTER_LINKS	0
 | 
					
						
							|  |  |  | #endif	/* defined(AST_MISDN_ENHANCEMENTS) */
 | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-21 17:44:01 +00:00
										 |  |  | #define MAXPROCS 0x100
 | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | struct misdn_stack { | 
					
						
							|  |  |  | 	/** is first element because &nst equals &mISDNlist **/ | 
					
						
							|  |  |  | 	net_stack_t nst; | 
					
						
							|  |  |  | 	manager_t mgr; | 
					
						
							| 
									
										
										
										
											2009-07-15 21:14:41 +00:00
										 |  |  | 	pthread_mutex_t nstlock; | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-02 01:09:31 +00:00
										 |  |  | 	/*! \brief Stack struct critical section lock. */ | 
					
						
							|  |  |  | 	pthread_mutex_t st_lock; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | 	/*! \brief D Channel mISDN driver stack ID (Parent stack ID) */ | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 	int d_stid; | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/*! /brief Number of B channels supported by this port */ | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 	int b_num; | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/*! \brief B Channel mISDN driver stack IDs (Child stack IDs) */ | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 	int b_stids[MAX_BCHANS + 1]; | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/*! \brief TRUE if Point-To-Point(PTP) (Point-To-Multipoint(PTMP) otherwise) */ | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 	int ptp; | 
					
						
							| 
									
										
										
										
											2005-12-09 11:01:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | 	/*! \brief Number of consecutive times PTP Layer 2 declared down */ | 
					
						
							| 
									
										
										
										
											2006-06-29 20:12:19 +00:00
										 |  |  | 	int l2upcnt; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | 	int l2_id;	/* Not used */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/*! \brief Lower layer mISDN ID (addr) (Layer 1/3) */ | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 	int lower_id; | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/*! \brief Upper layer mISDN ID (addr) (Layer 2/4) */ | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 	int upper_id; | 
					
						
							| 
									
										
										
										
											2006-08-03 16:38:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | 	/*! \brief TRUE if port is blocked */ | 
					
						
							| 
									
										
										
										
											2006-08-03 16:38:00 +00:00
										 |  |  |   	int blocked; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | 	/*! \brief TRUE if Layer 2 is UP */ | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 	int l2link; | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/*! \brief TRUE if Layer 1 is UP */ | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 	int l1link; | 
					
						
							| 
									
										
										
										
											2007-11-12 13:33:13 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | 	/*! \brief TRUE if restart has been sent to the other side after stack startup */ | 
					
						
							| 
									
										
										
										
											2007-11-12 13:33:13 +00:00
										 |  |  | 	int restart_sent; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | 	/*! \brief mISDN device handle returned by mISDN_open() */ | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 	int midev; | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/*! \brief TRUE if NT side of protocol (TE otherwise) */ | 
					
						
							| 
									
										
										
										
											2005-12-09 11:01:18 +00:00
										 |  |  | 	int nt; | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/*! \brief TRUE if ISDN-PRI (ISDN-BRI otherwise) */ | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 	int pri; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | 	/*! \brief CR Process ID allocation table.  TRUE if ID allocated */ | 
					
						
							| 
									
										
										
										
											2009-04-21 17:44:01 +00:00
										 |  |  | 	int procids[MAXPROCS]; | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | 	/*! \brief Queue of Event messages to send to mISDN */ | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 	msg_queue_t downqueue; | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | 	msg_queue_t upqueue;	/* No code puts anything on this queue */ | 
					
						
							|  |  |  | 	int busy;	/* Not used */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/*! \brief Logical Layer 1 port associated with this stack */ | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 	int port; | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-21 17:44:01 +00:00
										 |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief B Channel record pool array | 
					
						
							|  |  |  | 	 * (Must be dimensioned the same as struct misdn_stack.channels[]) | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	struct misdn_bchannel bc[MAX_BCHANS + 1 + MISDN_MAX_REGISTER_LINKS]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/*!
 | 
					
						
							|  |  |  | 	 * \brief Array of B channels in use (a[0] = B1).  TRUE if B channel in use. | 
					
						
							|  |  |  | 	 * (Must be dimensioned the same as struct misdn_stack.bc[]) | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	char channels[MAX_BCHANS + 1 + MISDN_MAX_REGISTER_LINKS]; | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-02 01:09:31 +00:00
										 |  |  | 	/*! \brief List of held channels */ | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | 	struct misdn_bchannel *holding; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/*! \brief Next stack in the list of stacks */ | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 	struct misdn_stack *next; | 
					
						
							| 
									
										
										
										
											2008-08-18 21:07:28 +00:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct misdn_stack* get_stack_by_bc(struct misdn_bchannel *bc); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-21 02:11:39 +00:00
										 |  |  | int isdn_msg_get_index(struct isdn_msg msgs[], msg_t *frm, int nt); | 
					
						
							|  |  |  | enum event_e isdn_msg_get_event(struct isdn_msg msgs[], msg_t *frm, int nt); | 
					
						
							|  |  |  | int isdn_msg_parse_event(struct isdn_msg msgs[], msg_t *frm, struct misdn_bchannel *bc, int nt); | 
					
						
							|  |  |  | char * isdn_get_info(struct isdn_msg msgs[], enum event_e event, int nt); | 
					
						
							|  |  |  | msg_t * isdn_msg_build_event(struct isdn_msg msgs[], struct misdn_bchannel *bc, enum event_e event, int nt); | 
					
						
							|  |  |  | int isdn_msg_get_index_by_event(struct isdn_msg msgs[], enum event_e event, int nt); | 
					
						
							|  |  |  | char * isdn_msg_get_info(struct isdn_msg msgs[], msg_t *msg, int nt); | 
					
						
							| 
									
										
										
										
											2006-08-03 16:38:00 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-11-01 22:04:14 +00:00
										 |  |  | #endif
 |