mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-02-08 17:02:23 +00:00
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@8545 d0543943-73ff-0310-b7d9-9358b9ac24b2
102 lines
2.2 KiB
C
102 lines
2.2 KiB
C
/*=============================================================================
|
|
The functions handle static stuff -- the functions do not operate on
|
|
any particular Abyss object, but rather on the global environment of
|
|
the program that uses the Abyss library. abyssInit() is essentially
|
|
and extension of the program loader.
|
|
|
|
The intent is for any program that uses the Abyss library to call
|
|
AbyssInit() just as it starts up, and AbyssTerm() just as it exits.
|
|
It should do both when the program is only one thread, because they
|
|
are not thread-safe.
|
|
|
|
These functions do the bare minimum they can get away with; we prefer
|
|
context to be local to invidual objects.
|
|
=============================================================================*/
|
|
|
|
#include <assert.h>
|
|
|
|
#include "xmlrpc-c/string_int.h"
|
|
|
|
#include "chanswitch.h"
|
|
#include "channel.h"
|
|
|
|
#include "xmlrpc-c/abyss.h"
|
|
|
|
|
|
static unsigned int AbyssInitCount = 0;
|
|
|
|
static void
|
|
initAbyss(const char ** const errorP) {
|
|
|
|
const char * error;
|
|
|
|
DateInit();
|
|
MIMETypeInit();
|
|
|
|
ChanSwitchInit(&error);
|
|
|
|
if (error) {
|
|
xmlrpc_asprintf(errorP,
|
|
"Could not initialize channel swtich class. %s",
|
|
error);
|
|
|
|
xmlrpc_strfree(error);
|
|
} else {
|
|
const char * error;
|
|
ChannelInit(&error);
|
|
|
|
if (error) {
|
|
xmlrpc_asprintf(errorP, "Could not initialize Channel class. %s",
|
|
error);
|
|
|
|
xmlrpc_strfree(error);
|
|
} else {
|
|
AbyssInitCount = 1;
|
|
*errorP = NULL;
|
|
|
|
if (*errorP)
|
|
ChannelTerm();
|
|
}
|
|
if (*errorP)
|
|
ChanSwitchTerm();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void
|
|
AbyssInit(const char ** const errorP) {
|
|
|
|
if (AbyssInitCount > 0) {
|
|
*errorP = NULL;
|
|
++AbyssInitCount;
|
|
} else {
|
|
initAbyss(errorP);
|
|
if (!*errorP)
|
|
AbyssInitCount = 1;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
termAbyss(void) {
|
|
|
|
ChannelTerm();
|
|
ChanSwitchTerm();
|
|
MIMETypeTerm();
|
|
}
|
|
|
|
|
|
|
|
void
|
|
AbyssTerm(void) {
|
|
|
|
assert(AbyssInitCount > 0);
|
|
|
|
--AbyssInitCount;
|
|
|
|
if (AbyssInitCount == 0)
|
|
termAbyss();
|
|
}
|