/* This is the asterisk 1.2 code from svn */
static void *moh_files_alloc(struct ast_channel *chan, void *params)
{
struct moh_files_state *state;
struct mohclass *class = params;
int allocated = 0;
if (!chan->music_state && (state = malloc(sizeof(struct moh_files_state)))) {
chan->music_state = state;
allocated = 1;
} else
state = chan->music_state;
if (state) {
if (allocated || state->class != class) {
/* initialize */
memset(state, 0, sizeof(struct moh_files_state));
state->class = class;
}
state->origwfmt = chan->writeformat;
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Started music on hold, class '%s', on %s\n", class->name, chan->name);
}
return chan->music_state;
}
/* and here is the same bit of opbx code (with additional comments from me marked // DRMOUSE: */
static void *moh_files_alloc(struct opbx_channel *chan, void *params)
{
struct moh_files_state *state;
struct mohclass *class = params;
int allocated = 0;
if (!chan->music_state && (state = malloc(sizeof(struct moh_files_state)))) {
chan->music_state = state;
allocated = 1;
} else
state = chan->music_state;
if (state) {
if (allocated || state->class != class) {
/* initialize */
memset(state, 0, sizeof(struct moh_files_state));
state->class = class;
}
state->origwfmt = chan->writeformat;
// DRMOUSE: This is the bit that is different.
// DRMOUSE: Notice that it always sets to OPBX_FORMAT_SLINEAR
// DRMOUSE: In *, it doesnt. I dont know if it is easily possible
// DRMOUSE: to port this change over, i dont know the differences
// DRMOUSE: in the rest, but this is where native moh fails in
// DRMOUSE: OPBX.
if (opbx_set_write_format(chan, OPBX_FORMAT_SLINEAR)) {
opbx_log(LOG_WARNING, "Unable to set '%s' to linear format (write)\n", chan->name);
free(chan->music_state);
chan->music_state = NULL;
} else {
if (option_verbose > 2)
opbx_verbose(VERBOSE_PREFIX_3 "Started music on hold, class '%s', on %s\n", class->name, chan->name);
}
}
return chan->music_state;
}