summaryrefslogtreecommitdiffstats
path: root/join.cpp
blob: 5dcbde21f4ae07ccb8aaabefb009e471ce7a7e36 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/*****************************************************************************\
**                                                                           **
** PBX4Linux                                                                 **
**                                                                           **
**---------------------------------------------------------------------------**
** Copyright: Andreas Eversberg                                              **
**                                                                           **
** join functions                                                            **
**                                                                           **
\*****************************************************************************/ 

#include "main.h"
//#define __u8 unsigned char
//#define __u16 unsigned short
//#define __u32 unsigned int

unsigned int join_serial = 1; /* must be 1, because 0== no join */

//JOIN_STATES

class Join *join_first = NULL;

/*
 * find the join with join_id
 */ 
class Join *find_join_id(unsigned int join_id)
{
	class Join *join = join_first;

	while(join) {
//printf("comparing: '%s' with '%s'\n", name, join->j_name);
		if (join->j_serial == join_id)
			return(join);
		join = join->next;
	}

	return(NULL);
}


/*
 * constructor for a new join 
 */
Join::Join(void)
{
	class Join **joinp;

	j_serial = join_serial++;
	j_type = JOIN_TYPE_NONE;

	/* attach to chain */
	next = NULL;
	joinp = &join_first;
	while(*joinp)
		joinp = &((*joinp)->next);
	*joinp = this;

	classuse++;
}


/*
 * join descructor
 */
Join::~Join()
{
	class Join *cl, **clp;

	classuse--;

	cl = join_first;
	clp = &join_first;
	while(cl) {
		if (cl == this)
			break;
		clp = &cl->next;
		cl = cl->next;
	}
	if (!cl)
		FATAL("software error, join not in chain!\n");
	*clp = cl->next; /* detach from chain */
}



/* epoint sends a message to a join
 *
 */
void Join::message_epoint(unsigned int epoint_id, int message_type, union parameter *param)
{
}


/* free all join structures */
void join_free(void)
{

	if (!join_first) {
		PDEBUG(DEBUG_JOIN, "no more pending join(s), done!\n");
		return;
	}
	while(join_first) {
		if (options.deb & DEBUG_JOIN) {
			PDEBUG(DEBUG_JOIN, "freeing pending join\n");
		}

		delete join_first;
	}
}