AST_LIST_ENTRY(skinny_subchannel) list;
struct skinny_subchannel *related;
- struct skinny_line *parent;
+ struct skinny_line *line;
};
#define SKINNY_LINE_OPTIONS \
char *toname;
char *tonum;
- if (!sub || !(l=sub->parent) || !(d=sub->parent->device) || !(ast=sub->owner)) {
+ if (!sub || !(l=sub->line) || !(d=l->device) || !(ast=sub->owner)) {
return;
}
static void transmit_connect(struct skinny_device *d, struct skinny_subchannel *sub)
{
struct skinny_req *req;
- struct skinny_line *l = sub->parent;
+ struct skinny_line *l = sub->line;
struct ast_format_list fmt;
struct ast_format tmpfmt;
static void update_connectedline(struct skinny_subchannel *sub, const void *data, size_t datalen)
{
struct ast_channel *c = sub->owner;
- struct skinny_line *l = sub->parent;
+ struct skinny_line *l = sub->line;
struct skinny_device *d = l->device;
if (!c->caller.id.number.valid
ao2_ref(sub->rtp, +1);
*instance = sub->rtp;
- l = sub->parent;
+ l = sub->line;
if (!l->directmedia || l->nat){
res = AST_RTP_GLUE_RESULT_LOCAL;
return -1;
}
- l = sub->parent;
+ l = sub->line;
d = l->device;
if (rtp){
static void start_rtp(struct skinny_subchannel *sub)
{
- struct skinny_line *l = sub->parent;
+ struct skinny_line *l = sub->line;
struct skinny_device *d = l->device;
int hasvideo = 0;
struct ast_sockaddr bindaddr_tmp;
{
struct ast_channel *c = data;
struct skinny_subchannel *sub = c->tech_pvt;
- struct skinny_line *l = sub->parent;
+ struct skinny_line *l = sub->line;
struct skinny_device *d = l->device;
int res = 0;
{
struct ast_channel *c = data;
struct skinny_subchannel *sub = c->tech_pvt;
- struct skinny_line *l = sub->parent;
+ struct skinny_line *l = sub->line;
struct skinny_device *d = l->device;
int len = 0;
int timeout = firstdigittimeout;
{
int res = 0;
struct skinny_subchannel *sub = ast->tech_pvt;
- struct skinny_line *l = sub->parent;
+ struct skinny_line *l = sub->line;
struct skinny_device *d = l->device;
if (!d->registered) {
return 0;
}
- l = sub->parent;
+ l = sub->line;
d = l->device;
if (skinnydebug)
transmit_activatecallplane(d, l);
l->activesub = NULL;
transmit_lamp_indication(d, STIMULUS_LINE, l->instance, SKINNY_LAMP_OFF);
- if (sub->parent == d->activeline) {
+ if (sub->line == d->activeline) {
transmit_activatecallplane(d, l);
transmit_closereceivechannel(d, sub);
transmit_stopmediatransmission(d, sub);
{
int res = 0;
struct skinny_subchannel *sub = ast->tech_pvt;
- struct skinny_line *l = sub->parent;
+ struct skinny_line *l = sub->line;
struct skinny_device *d = l->device;
if (sub->blindxfer) {
{
#if 0
struct skinny_subchannel *sub = ast->tech_pvt;
- struct skinny_line *l = sub->parent;
+ struct skinny_line *l = sub->line;
struct skinny_device *d = l->device;
int tmp;
/* not right */
static int skinny_indicate(struct ast_channel *ast, int ind, const void *data, size_t datalen)
{
struct skinny_subchannel *sub = ast->tech_pvt;
- struct skinny_line *l = sub->parent;
+ struct skinny_line *l = sub->line;
struct skinny_device *d = l->device;
struct skinnysession *s = d->session;
d->lastcallreference = sub->callid;
sub->cxmode = SKINNY_CX_INACTIVE;
sub->nat = l->nat;
- sub->parent = l;
+ sub->line = l;
sub->blindxfer = 0;
sub->xferor = 0;
sub->related = NULL;
static void setsubstate_offhook(struct skinny_subchannel *sub)
{
- struct skinny_line *l = sub->parent;
+ struct skinny_line *l = sub->line;
struct skinny_device *d = l->device;
pthread_t t;
static void setsubstate_dialing(struct skinny_subchannel *sub, char exten[AST_MAX_EXTENSION])
{
- struct skinny_line *l = sub->parent;
+ struct skinny_line *l = sub->line;
struct skinny_device *d = l->device;
struct ast_channel *c = sub->owner;
pthread_t t;
static void setsubstate_ringout(struct skinny_subchannel *sub)
{
- struct skinny_line *l = sub->parent;
+ struct skinny_line *l = sub->line;
struct skinny_device *d = l->device;
if (!(sub->substate == SUBSTATE_DIALING || sub->substate == SUBSTATE_PROGRESS)) {
if (!d->earlyrtp) {
transmit_start_tone(d, SKINNY_ALERT, l->instance, sub->callid);
}
- transmit_callstate(d, sub->parent->instance, sub->callid, SKINNY_RINGOUT);
+ transmit_callstate(d, l->instance, sub->callid, SKINNY_RINGOUT);
transmit_dialednumber(d, l->lastnumberdialed, l->instance, sub->callid);
transmit_displaypromptstatus(d, "Ring Out", 0, l->instance, sub->callid);
transmit_callinfo(sub);
static void setsubstate_ringin(struct skinny_subchannel *sub)
{
- struct skinny_line *l = sub->parent;
+ struct skinny_line *l = sub->line;
struct skinny_device *d = l->device;
struct ast_channel *c = sub->owner;
- transmit_callstate(d, sub->parent->instance, sub->callid, SKINNY_RINGIN);
+ transmit_callstate(d, l->instance, sub->callid, SKINNY_RINGIN);
transmit_selectsoftkeys(d, l->instance, sub->callid, KEYDEF_RINGIN);
transmit_displaypromptstatus(d, "Ring-In", 0, l->instance, sub->callid);
transmit_callinfo(sub);
static void setsubstate_connected(struct skinny_subchannel *sub)
{
- struct skinny_line *l = sub->parent;
+ struct skinny_line *l = sub->line;
struct skinny_device *d = l->device;
if (sub->substate == SUBSTATE_HOLD) {
transmit_activatecallplane(d, l);
transmit_stop_tone(d, l->instance, sub->callid);
transmit_callinfo(sub);
- transmit_callstate(d, sub->parent->instance, sub->callid, SKINNY_CONNECTED);
+ transmit_callstate(d, l->instance, sub->callid, SKINNY_CONNECTED);
transmit_displaypromptstatus(d, "Connected", 0, l->instance, sub->callid);
transmit_selectsoftkeys(d, l->instance, sub->callid, KEYDEF_CONNECTED);
if (!sub->rtp) {
static void setsubstate_busy(struct skinny_subchannel *sub)
{
- struct skinny_line *l = sub->parent;
+ struct skinny_line *l = sub->line;
struct skinny_device *d = l->device;
if (!(sub->substate == SUBSTATE_DIALING || sub->substate == SUBSTATE_PROGRESS || sub->substate == SUBSTATE_RINGOUT)) {
transmit_start_tone(d, SKINNY_BUSYTONE, l->instance, sub->callid);
}
transmit_callinfo(sub);
- transmit_callstate(d, sub->parent->instance, sub->callid, SKINNY_BUSY);
+ transmit_callstate(d, l->instance, sub->callid, SKINNY_BUSY);
transmit_displaypromptstatus(d, "Busy", 0, l->instance, sub->callid);
sub->substate = SUBSTATE_BUSY;
}
static void setsubstate_congestion(struct skinny_subchannel *sub)
{
- struct skinny_line *l = sub->parent;
+ struct skinny_line *l = sub->line;
struct skinny_device *d = l->device;
if (!(sub->substate == SUBSTATE_DIALING || sub->substate == SUBSTATE_PROGRESS || sub->substate == SUBSTATE_RINGOUT)) {
transmit_start_tone(d, SKINNY_REORDER, l->instance, sub->callid);
}
transmit_callinfo(sub);
- transmit_callstate(d, sub->parent->instance, sub->callid, SKINNY_CONGESTION);
+ transmit_callstate(d, l->instance, sub->callid, SKINNY_CONGESTION);
transmit_displaypromptstatus(d, "Congestion", 0, l->instance, sub->callid);
sub->substate = SUBSTATE_CONGESTION;
}
static void setsubstate_progress(struct skinny_subchannel *sub)
{
- struct skinny_line *l = sub->parent;
+ struct skinny_line *l = sub->line;
struct skinny_device *d = l->device;
if (sub->substate != SUBSTATE_DIALING) {
transmit_start_tone(d, SKINNY_ALERT, l->instance, sub->callid);
}
transmit_callinfo(sub);
- transmit_callstate(d, sub->parent->instance, sub->callid, SKINNY_PROGRESS);
+ transmit_callstate(d, l->instance, sub->callid, SKINNY_PROGRESS);
transmit_displaypromptstatus(d, "Call Progress", 0, l->instance, sub->callid);
sub->substate = SUBSTATE_PROGRESS;
}
static void setsubstate_hold(struct skinny_subchannel *sub)
{
- struct skinny_line *l = sub->parent;
+ struct skinny_line *l = sub->line;
struct skinny_device *d = l->device;
if (sub->substate != SUBSTATE_CONNECTED) {
transmit_closereceivechannel(d, sub);
transmit_stopmediatransmission(d, sub);
- transmit_callstate(d, sub->parent->instance, sub->callid, SKINNY_HOLD);
+ transmit_callstate(d, l->instance, sub->callid, SKINNY_HOLD);
transmit_lamp_indication(d, STIMULUS_LINE, l->instance, SKINNY_LAMP_WINK);
- transmit_selectsoftkeys(sub->parent->device, sub->parent->instance, sub->callid, KEYDEF_ONHOLD);
+ transmit_selectsoftkeys(d, l->instance, sub->callid, KEYDEF_ONHOLD);
sub->substate = SUBSTATE_HOLD;
}
return -1;
}
- l = sub->parent;
+ l = sub->line;
d = l->device;
if (!sub->related) {
static int handle_callforward_button(struct skinny_subchannel *sub, int cfwdtype)
{
- struct skinny_line *l = sub->parent;
+ struct skinny_line *l = sub->line;
struct skinny_device *d = l->device;
struct ast_channel *c = sub->owner;
if (!sub)
return 0;
- l = sub->parent;
+ l = sub->line;
if (sub->owner) {
if (sub->owner->_state == 0) {
f.frametype = AST_FRAME_DTMF_BEGIN;
}
sub = l->activesub;
} else {
- l = sub->parent;
+ l = sub->line;
}
switch(event) {
ast_log(LOG_WARNING, "Unable to create channel for %s@%s\n", l->name, d->name);
} else {
sub = c->tech_pvt;
- l = sub->parent;
+ l = sub->line;
l->activesub = sub;
setsubstate_dialing(sub, l->lastnumberdialed);
}
ast_log(LOG_WARNING, "Unable to create channel for %s@%s\n", l->name, d->name);
} else {
sub = c->tech_pvt;
- l = sub->parent;
+ l = sub->line;
l->activesub = sub;
setsubstate_dialing(sub, sd->exten);
ast_log(LOG_WARNING, "Unable to create channel for %s@%s\n", l->name, d->name);
} else {
sub = c->tech_pvt;
- l = sub->parent;
+ l = sub->line;
l->activesub = sub;
setsubstate_dialing(sub,l->vmexten);
return 0;
}
} else {
- l = sub->parent;
+ l = sub->line;
}
} else {
l = d->activeline;
if (!sub) {
return 0;
}
- l = sub->parent;
+ l = sub->line;
} else {
l = d->activeline;
sub = l->activesub;
if (!sub)
return 0;
- l = sub->parent;
+ l = sub->line;
if (sub->rtp) {
ast_sockaddr_from_sin(&sin_tmp, &sin);
return 0;
}
} else {
- l = sub->parent;
+ l = sub->line;
}
c = skinny_new(l, AST_STATE_DOWN, NULL, SKINNY_OUTGOING);
ast_mutex_lock(&l->lock);
l->sub = ltemp->sub;
AST_LIST_TRAVERSE(&l->sub, sub, list) {
- sub->parent = l;
+ sub->line = l;
}
ast_mutex_unlock(&l->lock);
}