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}},