Index: channels/chan_jingle.c
===================================================================
--- channels/chan_jingle.c (revision 361654)
+++ channels/chan_jingle.c (working copy)
@@ -152,6 +152,7 @@
struct ast_format_cap *cap;
ast_group_t callgroup; /*!< Call group */
ast_group_t pickupgroup; /*!< Pickup group */
+ ast_groupcontext_t groupcontext; /*!< Call / Pickup group context */
int callingpres; /*!< Calling presentation */
int allowguest;
char language[MAX_LANGUAGE]; /*!< Default language for prompts */
@@ -890,6 +891,7 @@
ast_channel_callgroup_set(tmp, client->callgroup);
ast_channel_pickupgroup_set(tmp, client->pickupgroup);
+ ast_channel_groupcontext_set(tmp, client->groupcontext);
ast_channel_caller(tmp)->id.name.presentation = client->callingpres;
ast_channel_caller(tmp)->id.number.presentation = client->callingpres;
if (!ast_strlen_zero(client->accountcode))
Index: channels/chan_dahdi.c
===================================================================
--- channels/chan_dahdi.c (revision 361654)
+++ channels/chan_dahdi.c (working copy)
@@ -1092,6 +1092,11 @@
*/
ast_group_t pickupgroup;
/*!
+ * \brief Call / Pickup group context this belongs to.
+ * \note The "groupcontext" group context number read in from chan_dahdi.conf
+ */
+ ast_groupcontext_t groupcontext;
+ /*!
* \brief Channel variable list with associated values to set when a channel is created.
* \note The "setvar" strings read in from chan_dahdi.conf
*/
@@ -9768,6 +9773,7 @@
/* Only FXO signalled stuff can be picked up */
ast_channel_callgroup_set(tmp, i->callgroup);
ast_channel_pickupgroup_set(tmp, i->pickupgroup);
+ ast_channel_groupcontext_set(tmp, i->groupcontext);
}
if (!ast_strlen_zero(i->parkinglot))
ast_channel_parkinglot_set(tmp, i->parkinglot);
@@ -12986,6 +12992,7 @@
tmp->group = conf->chan.group;
tmp->callgroup = conf->chan.callgroup;
tmp->pickupgroup= conf->chan.pickupgroup;
+ tmp->groupcontext= conf->chan.groupcontext;
if (conf->chan.vars) {
struct ast_variable *v, *tmpvar;
for (v = conf->chan.vars ; v ; v = v->next) {
@@ -17380,6 +17387,11 @@
confp->chan.pickupgroup = 0;
else
confp->chan.pickupgroup = ast_get_group(v->value);
+ } else if (!strcasecmp(v->name, "groupcontext")) {
+ if (sscanf(v->value, "%lu", &confp->chan.groupcontext) != 1) {
+ confp->chan.groupcontext = 0;
+ ast_log(LOG_WARNING, "Invalid group context: %s at line %d.\n", v->value, v->lineno);
+ }
} else if (!strcasecmp(v->name, "setvar")) {
char *varname = ast_strdupa(v->value), *varval = NULL;
struct ast_variable *tmpvar;
Index: channels/chan_sip.c
===================================================================
--- channels/chan_sip.c (revision 361654)
+++ channels/chan_sip.c (working copy)
@@ -395,6 +395,9 @@
The configured Pickupgroup.
+
+ The configured Call / Pickup group context.
+
The configured codecs.
@@ -5393,6 +5396,7 @@
ref_proxy(dialog, obproxy_get(dialog, peer));
dialog->callgroup = peer->callgroup;
dialog->pickupgroup = peer->pickupgroup;
+ dialog->groupcontext = peer->groupcontext;
ast_copy_string(dialog->zone, peer->zone, sizeof(dialog->zone));
dialog->allowtransfer = peer->allowtransfer;
dialog->jointnoncodeccapability = dialog->noncodeccapability;
@@ -7242,6 +7246,7 @@
ast_channel_callgroup_set(tmp, i->callgroup);
ast_channel_pickupgroup_set(tmp, i->pickupgroup);
+ ast_channel_groupcontext_set(tmp, i->groupcontext);
ast_channel_caller(tmp)->id.name.presentation = i->callingpres;
ast_channel_caller(tmp)->id.number.presentation = i->callingpres;
if (!ast_strlen_zero(i->parkinglot)) {
@@ -16594,6 +16599,7 @@
p->amaflags = peer->amaflags;
p->callgroup = peer->callgroup;
p->pickupgroup = peer->pickupgroup;
+ p->groupcontext = peer->groupcontext;
ast_format_cap_copy(p->caps, peer->caps);
ast_format_cap_copy(p->jointcaps, peer->caps);
p->prefs = peer->prefs;
@@ -18217,6 +18223,7 @@
print_group(fd, peer->callgroup, 0);
ast_cli(fd, " Pickupgroup : ");
print_group(fd, peer->pickupgroup, 0);
+ ast_cli(fd, " Group Context: %lu\n", peer->groupcontext);
peer_mailboxes_to_str(&mailbox_str, peer);
ast_cli(fd, " MOH Suggest : %s\n", peer->mohsuggest);
ast_cli(fd, " Mailbox : %s\n", mailbox_str->str);
@@ -18331,6 +18338,7 @@
astman_append(s, "%s\r\n", ast_print_group(buffer, sizeof(buffer), peer->callgroup));
astman_append(s, "Pickupgroup: ");
astman_append(s, "%s\r\n", ast_print_group(buffer, sizeof(buffer), peer->pickupgroup));
+ astman_append(s, "Group Context: %lu\r\n", peer->groupcontext);
astman_append(s, "MOHSuggest: %s\r\n", peer->mohsuggest);
peer_mailboxes_to_str(&mailbox_str, peer);
astman_append(s, "VoiceMailbox: %s\r\n", mailbox_str->str);
@@ -18499,6 +18507,7 @@
print_group(a->fd, user->callgroup, 0);
ast_cli(a->fd, " Pickupgroup : ");
print_group(a->fd, user->pickupgroup, 0);
+ ast_cli(a->fd, " Group Context: %lu\n", user->groupcontext);
ast_cli(a->fd, " Callerid : %s\n", ast_callerid_merge(cbuf, sizeof(cbuf), user->cid_name, user->cid_num, ""));
ast_cli(a->fd, " ACL : %s\n", AST_CLI_YESNO(user->ha != NULL));
ast_cli(a->fd, " Sess-Timers : %s\n", stmode2str(user->stimer.st_mode_oper));
@@ -20248,6 +20257,8 @@
ast_print_group(buf, len, peer->callgroup);
} else if (!strcasecmp(colname, "pickupgroup")) {
ast_print_group(buf, len, peer->pickupgroup);
+ } else if (!strcasecmp(colname, "groupcontext")) {
+ snprintf(buf, len, "%lu", peer->groupcontext);
} else if (!strcasecmp(colname, "useragent")) {
ast_copy_string(buf, peer->useragent, len);
} else if (!strcasecmp(colname, "mailbox")) {
@@ -28200,6 +28211,7 @@
ast_string_field_set(peer, regexten, "");
peer->callgroup = 0;
peer->pickupgroup = 0;
+ peer->groupcontext = 0;
peer->maxms = default_qualify;
peer->prefs = default_prefs;
ast_string_field_set(peer, zone, default_zone);
@@ -28656,6 +28668,11 @@
peer->allowtransfer = ast_true(v->value) ? TRANSFER_OPENFORALL : TRANSFER_CLOSED;
} else if (!strcasecmp(v->name, "pickupgroup")) {
peer->pickupgroup = ast_get_group(v->value);
+ } else if (!strcasecmp(v->name, "groupcontext")) {
+ if (sscanf(v->value, "%lu", &peer->groupcontext) != 1) {
+ ast_log(LOG_WARNING, "Invalid groupcontext '%s' at line %d of %s\n", v->value, v->lineno, config);
+ peer->groupcontext = 0;
+ }
} else if (!strcasecmp(v->name, "allow")) {
int error = ast_parse_allow_disallow(&peer->prefs, peer->caps, v->value, TRUE);
if (error) {
Index: channels/chan_misdn.c
===================================================================
--- channels/chan_misdn.c (revision 361654)
+++ channels/chan_misdn.c (working copy)
@@ -5985,6 +5985,7 @@
chan_misdn_log(5, port, " --> * CallGrp:%s PickupGrp:%s\n", ast_print_group(buf, sizeof(buf), cg), ast_print_group(buf2, sizeof(buf2), pg));
ast_channel_pickupgroup_set(ast, pg);
ast_channel_callgroup_set(ast, cg);
+ ast_channel_groupcontext_set(ast, 0); /* WARNING! Here group context is always zero, mISDN channels do not support group contexts */
if (ch->originator == ORG_AST) {
char callerid[BUFFERSIZE + 1];
Index: channels/chan_skinny.c
===================================================================
--- channels/chan_skinny.c (revision 361654)
+++ channels/chan_skinny.c (working copy)
@@ -1300,6 +1300,7 @@
char dialoutcontext[AST_MAX_CONTEXT]; \
ast_group_t callgroup; \
ast_group_t pickupgroup; \
+ ast_groupcontext_t groupcontext; \
int callwaiting; \
int transfer; \
int threewaycalling; \
@@ -3985,6 +3986,7 @@
ast_cli(fd, "Context: %s\n", l->context);
ast_cli(fd, "CallGroup: %s\n", ast_print_group(group_buf, sizeof(group_buf), l->callgroup));
ast_cli(fd, "PickupGroup: %s\n", ast_print_group(group_buf, sizeof(group_buf), l->pickupgroup));
+ ast_cli(fd, "GroupContext: %lu\n", l->groupcontext);
ast_cli(fd, "Language: %s\n", S_OR(l->language, ""));
ast_cli(fd, "Accountcode: %s\n", S_OR(l->accountcode, ""));
ast_cli(fd, "AmaFlag: %s\n", ast_cdr_flags2str(l->amaflags));
@@ -4038,6 +4040,7 @@
astman_append(s, "Context: %s\r\n", l->context);
astman_append(s, "CallGroup: %s\r\n", ast_print_group(group_buf, sizeof(group_buf), l->callgroup));
astman_append(s, "PickupGroup: %s\r\n", ast_print_group(group_buf, sizeof(group_buf), l->pickupgroup));
+ astman_append(s, "Group Context: %lu\r\n", l->groupcontext);
astman_append(s, "Language: %s\r\n", S_OR(l->language, ""));
astman_append(s, "Accountcode: %s\r\n", S_OR(l->accountcode, ""));
astman_append(s, "AMAflags: %s\r\n", ast_cdr_flags2str(l->amaflags));
@@ -4917,6 +4920,7 @@
ast_module_ref(ast_module_info->self);
ast_channel_callgroup_set(tmp, l->callgroup);
ast_channel_pickupgroup_set(tmp, l->pickupgroup);
+ ast_channel_groupcontext_set(tmp, l->groupcontext);
/* XXX Need to figure out how to handle CFwdNoAnswer */
if (l->cfwdtype & SKINNY_CFWD_ALL) {
@@ -7338,6 +7342,14 @@
CLINE_OPTS->pickupgroup = ast_get_group(v->value);
continue;
}
+ } else if (!strcasecmp(v->name, "groupcontext")) {
+ if (type & (TYPE_DEF_LINE | TYPE_LINE)) {
+ if (sscanf(v->value, "%lu", &CLINE_OPTS->groupcontext) != 1) {
+ CLINE_OPTS->groupcontext = 0;
+ ast_log(LOG_WARNING, "Invalid groupcontext '%s' at line %d of %s\n", v->value, v->lineno, config);
+ }
+ continue;
+ }
} else if (!strcasecmp(v->name, "immediate")) {
if (type & (TYPE_DEF_DEVICE | TYPE_DEVICE | TYPE_DEF_LINE | TYPE_LINE)) {
CLINE_OPTS->immediate = ast_true(v->value);
Index: channels/sip/include/sip.h
===================================================================
--- channels/sip/include/sip.h (revision 361654)
+++ channels/sip/include/sip.h (working copy)
@@ -1046,6 +1046,7 @@
uint32_t init_icseq; /*!< Initial incoming seqno from first request */
ast_group_t callgroup; /*!< Call group */
ast_group_t pickupgroup; /*!< Pickup group */
+ ast_groupcontext_t groupcontext; /*!< Call / Pickup group context */
uint32_t lastinvite; /*!< Last seqno of invite */
struct ast_flags flags[3]; /*!< SIP_ flags */
@@ -1309,6 +1310,7 @@
int rtpkeepalive; /*!< Send RTP packets for keepalive */
ast_group_t callgroup; /*!< Call group */
ast_group_t pickupgroup; /*!< Pickup group */
+ ast_groupcontext_t groupcontext;/*!< Call / Pickup group context */
struct sip_proxy *outboundproxy;/*!< Outbound proxy for this peer */
struct ast_dnsmgr_entry *dnsmgr;/*!< DNS refresh manager for peer */
struct ast_sockaddr addr; /*!< IP address of peer */
Index: channels/chan_mgcp.c
===================================================================
--- channels/chan_mgcp.c (revision 361654)
+++ channels/chan_mgcp.c (working copy)
@@ -165,6 +165,7 @@
static ast_group_t cur_callergroup = 0;
static ast_group_t cur_pickupgroup = 0;
+static ast_groupcontext_t cur_groupcontext = 0;
static struct {
unsigned int tos;
@@ -341,6 +342,7 @@
struct ast_event_sub *mwi_event_sub;
ast_group_t callgroup;
ast_group_t pickupgroup;
+ ast_groupcontext_t groupcontext;
int callwaiting;
int hascallwaiting;
int transfer;
@@ -1533,6 +1535,7 @@
ast_module_ref(ast_module_info->self);
ast_channel_callgroup_set(tmp, i->callgroup);
ast_channel_pickupgroup_set(tmp, i->pickupgroup);
+ ast_channel_groupcontext_set(tmp, i->groupcontext);
ast_channel_call_forward_set(tmp, i->call_forward);
ast_channel_context_set(tmp, i->context);
ast_channel_exten_set(tmp, i->exten);
@@ -4106,6 +4109,11 @@
cur_callergroup = ast_get_group(v->value);
} else if (!strcasecmp(v->name, "pickupgroup")) {
cur_pickupgroup = ast_get_group(v->value);
+ } else if (!strcasecmp(v->name, "groupcontext")) {
+ if (sscanf(v->value, "%lu", &cur_groupcontext) != 1) {
+ cur_groupcontext = 0;
+ ast_log(LOG_WARNING, "Invalid group context '%s' at line %d\n", v->value, v->lineno);
+ }
} else if (!strcasecmp(v->name, "immediate")) {
immediate = ast_true(v->value);
} else if (!strcasecmp(v->name, "cancallforward")) {
@@ -4197,6 +4205,7 @@
e->immediate = immediate;
e->callgroup=cur_callergroup;
e->pickupgroup=cur_pickupgroup;
+ e->groupcontext=cur_groupcontext;
e->callreturn = callreturn;
e->cancallforward = cancallforward;
e->singlepath = singlepath;
@@ -4299,6 +4308,7 @@
e->immediate = immediate;
e->callgroup=cur_callergroup;
e->pickupgroup=cur_pickupgroup;
+ e->groupcontext=cur_groupcontext;
e->callreturn = callreturn;
e->cancallforward = cancallforward;
e->directmedia = directmedia;
Index: channels/chan_unistim.c
===================================================================
--- channels/chan_unistim.c (revision 361654)
+++ channels/chan_unistim.c (working copy)
@@ -359,6 +359,7 @@
char musicclass[MAX_MUSICCLASS]; /*! MusicOnHold class */
ast_group_t callgroup; /*! Call group */
ast_group_t pickupgroup; /*! Pickup group */
+ ast_groupcontext_t groupcontext; /*! Call / Pickup group context */
char accountcode[AST_MAX_ACCOUNT_CODE]; /*! Account code (for billing) */
int amaflags; /*! AMA flags (for billing) */
struct ast_format_cap *cap; /*! Codec supported */
@@ -5600,6 +5601,7 @@
ast_update_use_count();
ast_channel_callgroup_set(tmp, l->callgroup);
ast_channel_pickupgroup_set(tmp, l->pickupgroup);
+ ast_channel_groupcontext_set(tmp, l->groupcontext);
ast_channel_call_forward_set(tmp, l->parent->call_forward);
if (!ast_strlen_zero(l->cid_num)) {
char *name, *loc, *instr;
@@ -6362,6 +6364,11 @@
lt->callgroup = ast_get_group(v->value);
} else if (!strcasecmp(v->name, "pickupgroup")) {
lt->pickupgroup = ast_get_group(v->value);
+ } else if (!strcasecmp(v->name, "groupcontext")) {
+ if (sscanf(v->value, "%lu", &l->groupcontext) != 1) {
+ l->groupcontext = 0;
+ ast_log(LOG_WARNING, "Invalid groupcontext '%s'\n", v->value);
+ }
} else if (!strcasecmp(v->name, "mailbox")) {
ast_copy_string(lt->mailbox, v->value, sizeof(lt->mailbox));
} else if (!strcasecmp(v->name, "parkinglot")) {
Index: channels/chan_gtalk.c
===================================================================
--- channels/chan_gtalk.c (revision 361654)
+++ channels/chan_gtalk.c (working copy)
@@ -156,6 +156,7 @@
struct ast_format_cap *cap;
ast_group_t callgroup; /*!< Call group */
ast_group_t pickupgroup; /*!< Pickup group */
+ ast_groupcontext_t groupcontext; /*!< Call / Pickup group context */
int callingpres; /*!< Calling presentation */
int allowguest;
char language[MAX_LANGUAGE]; /*!< Default language for prompts */
@@ -1178,6 +1179,7 @@
ast_channel_callgroup_set(tmp, client->callgroup);
ast_channel_pickupgroup_set(tmp, client->pickupgroup);
+ ast_channel_groupcontext_set(tmp, client->groupcontext);
ast_channel_caller(tmp)->id.name.presentation = client->callingpres;
ast_channel_caller(tmp)->id.number.presentation = client->callingpres;
if (!ast_strlen_zero(client->accountcode))
Index: apps/app_directed_pickup.c
===================================================================
--- apps/app_directed_pickup.c (revision 361654)
+++ apps/app_directed_pickup.c (working copy)
@@ -242,6 +242,7 @@
ast_channel_lock(target);
if (chan != target && (ast_channel_pickupgroup(chan) & ast_channel_callgroup(target))
+ && (ast_channel_groupcontext(chan) == ast_channel_groupcontext(target))
&& ast_can_pickup(target)) {
/* Return with the channel still locked on purpose */
return CMP_MATCH | CMP_STOP;
Index: apps/app_dumpchan.c
===================================================================
--- apps/app_dumpchan.c (revision 361654)
+++ apps/app_dumpchan.c (working copy)
@@ -124,6 +124,7 @@
"Priority= %d\n"
"CallGroup= %s\n"
"PickupGroup= %s\n"
+ "GroupContext= %lu\n"
"Application= %s\n"
"Data= %s\n"
"Blocking_in= %s\n",
@@ -165,6 +166,7 @@
ast_channel_priority(c),
ast_print_group(cgrp, sizeof(cgrp), ast_channel_callgroup(c)),
ast_print_group(pgrp, sizeof(pgrp), ast_channel_pickupgroup(c)),
+ ast_channel_groupcontext(c),
ast_channel_appl(c) ? ast_channel_appl(c) : "(N/A)",
ast_channel_data(c) ? S_OR(ast_channel_data(c), "(Empty)") : "(None)",
(ast_test_flag(ast_channel_flags(c), AST_FLAG_BLOCKING) ? ast_channel_blockproc(c) : "(Not Blocking)"));
Index: funcs/func_channel.c
===================================================================
--- funcs/func_channel.c (revision 361654)
+++ funcs/func_channel.c (working copy)
@@ -92,6 +92,9 @@
R/W call groups for call pickup.
+
+ R/W call group context for call pickup.
+
R/O technology used for channel.
@@ -398,6 +401,10 @@
} else if (!strcasecmp(data, "pickupgroup")) {
char groupbuf[256];
locked_copy_string(chan, buf, ast_print_group(groupbuf, sizeof(groupbuf), ast_channel_pickupgroup(chan)), len);
+ } else if (!strcasecmp(data, "groupcontext")) {
+ char gcbuf[256];
+ snprintf(gcbuf,sizeof(gcbuf), "%lu", ast_channel_groupcontext(chan));
+ locked_copy_string(chan, buf, gcbuf, len);
} else if (!strcasecmp(data, "amaflags")) {
char amabuf[256];
snprintf(amabuf,sizeof(amabuf), "%d", ast_channel_amaflags(chan));
@@ -489,6 +496,10 @@
ast_channel_callgroup_set(chan, ast_get_group(value));
} else if (!strcasecmp(data, "pickupgroup")) {
ast_channel_pickupgroup_set(chan, ast_get_group(value));
+ } else if (!strcasecmp(data, "groupcontext")) {
+ ast_groupcontext_t gc = 0;
+ sscanf(value, "%lu", &gc);
+ ast_channel_groupcontext_set(chan, gc);
} else if (!strcasecmp(data, "txgain")) {
sscanf(value, "%4hhd", &gainset);
ast_channel_setoption(chan, AST_OPTION_TXGAIN, &gainset, sizeof(gainset), 0);
Index: include/asterisk/channel.h
===================================================================
--- include/asterisk/channel.h (revision 361654)
+++ include/asterisk/channel.h (working copy)
@@ -173,6 +173,7 @@
};
typedef unsigned long long ast_group_t;
+typedef unsigned long ast_groupcontext_t;
/*! \todo Add an explanation of an Asterisk generator
*/
@@ -3699,6 +3700,8 @@
void ast_channel_callgroup_set(struct ast_channel *chan, ast_group_t value);
ast_group_t ast_channel_pickupgroup(const struct ast_channel *chan);
void ast_channel_pickupgroup_set(struct ast_channel *chan, ast_group_t value);
+ast_groupcontext_t ast_channel_groupcontext(const struct ast_channel *chan);
+void ast_channel_groupcontext_set(struct ast_channel *chan, ast_groupcontext_t value);
/* Alertpipe accessors--the "internal" functions for channel.c use only */
typedef enum {
Index: main/features.c
===================================================================
--- main/features.c (revision 361654)
+++ main/features.c (working copy)
@@ -7297,6 +7297,7 @@
ast_channel_lock(target);
if (chan != target && (ast_channel_pickupgroup(chan) & ast_channel_callgroup(target))
+ && (ast_channel_groupcontext(chan) == ast_channel_groupcontext(target))
&& ast_can_pickup(target)) {
/* Return with the channel still locked on purpose */
return CMP_MATCH | CMP_STOP;
Index: main/cli.c
===================================================================
--- main/cli.c (revision 361654)
+++ main/cli.c (working copy)
@@ -1472,6 +1472,7 @@
" Priority: %d\n"
" Call Group: %llu\n"
" Pickup Group: %llu\n"
+ " Group Context: %lu\n"
" Application: %s\n"
" Data: %s\n"
" Blocking in: %s\n",
@@ -1495,7 +1496,7 @@
ast_channel_fout(c) & ~DEBUGCHAN_FLAG, (ast_channel_fout(c) & DEBUGCHAN_FLAG) ? " (DEBUGGED)" : "",
(long)ast_channel_whentohangup(c)->tv_sec,
cdrtime, ast_channel_internal_bridged_channel(c) ? ast_channel_name(ast_channel_internal_bridged_channel(c)) : "", ast_bridged_channel(c) ? ast_channel_name(ast_bridged_channel(c)) : "",
- ast_channel_context(c), ast_channel_exten(c), ast_channel_priority(c), ast_channel_callgroup(c), ast_channel_pickupgroup(c), (ast_channel_appl(c) ? ast_channel_appl(c) : "(N/A)" ),
+ ast_channel_context(c), ast_channel_exten(c), ast_channel_priority(c), ast_channel_callgroup(c), ast_channel_pickupgroup(c), ast_channel_groupcontext(c), (ast_channel_appl(c) ? ast_channel_appl(c) : "(N/A)" ),
(ast_channel_data(c) ? S_OR(ast_channel_data(c), "(Empty)") : "(None)"),
(ast_test_flag(ast_channel_flags(c), AST_FLAG_BLOCKING) ? ast_channel_blockproc(c) : "(Not Blocking)"));
Index: main/channel_internal_api.c
===================================================================
--- main/channel_internal_api.c (revision 361654)
+++ main/channel_internal_api.c (working copy)
@@ -132,6 +132,7 @@
struct varshead varshead; /*!< A linked list for channel variables. See \ref AstChanVar */
ast_group_t callgroup; /*!< Call group for call pickups */
ast_group_t pickupgroup; /*!< Pickup group - which calls groups can be picked up? */
+ ast_groupcontext_t groupcontext; /*!< Call / Pickup group context */
struct ast_readq_list readq;
struct ast_jb jb; /*!< The jitterbuffer state */
struct timeval dtmf_tv; /*!< The time that an in process digit began, or the last digit ended */
@@ -973,6 +974,14 @@
{
chan->pickupgroup = value;
}
+ast_groupcontext_t ast_channel_groupcontext(const struct ast_channel *chan)
+{
+ return chan->groupcontext;
+}
+void ast_channel_groupcontext_set(struct ast_channel *chan, ast_groupcontext_t value)
+{
+ chan->groupcontext = value;
+}
/* Alertpipe functions */
int ast_channel_alert_write(struct ast_channel *chan)
Index: res/snmp/agent.c
===================================================================
--- res/snmp/agent.c (revision 361654)
+++ res/snmp/agent.c (working copy)
@@ -163,6 +163,7 @@
#define ASTCHANVARIABLES 39
#define ASTCHANFLAGS 40
#define ASTCHANTRANSFERCAP 41
+#define ASTCHANGROUPCONTEXT 42
#define ASTCHANTYPECOUNT 3
@@ -406,6 +407,10 @@
long_ret = ast_channel_pickupgroup(chan);
ret = (u_char *)&long_ret;
break;
+ case ASTCHANGROUPCONTEXT:
+ long_ret = chan->groupcontext;
+ ret = (u_char *)&long_ret;
+ break;
case ASTCHANSTATE:
long_ret = ast_channel_state(chan) & 0xffff;
ret = (u_char *)&long_ret;
@@ -870,6 +875,7 @@
{ASTCHANUNIQUEID, ASN_OCTET_STR, RONLY, ast_var_channels_table, 4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANUNIQUEID}},
{ASTCHANCALLGROUP, ASN_UNSIGNED, RONLY, ast_var_channels_table, 4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANCALLGROUP}},
{ASTCHANPICKUPGROUP, ASN_UNSIGNED, RONLY, ast_var_channels_table, 4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANPICKUPGROUP}},
+ {ASTCHANGROUPCONTEXT, ASN_UNSIGNED, RONLY, ast_var_channels_table, 4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANGROUPCONTEXT}},
{ASTCHANSTATE, ASN_INTEGER, RONLY, ast_var_channels_table, 4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANSTATE}},
{ASTCHANMUTED, ASN_INTEGER, RONLY, ast_var_channels_table, 4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANMUTED}},
{ASTCHANRINGS, ASN_INTEGER, RONLY, ast_var_channels_table, 4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANRINGS}},