dect
/
libdect
Archived
13
0
Fork 0

ie: add support for <<EVENTS-NOTIFICATION>> IE

Signed-off-by: Patrick McHardy <kaber@trash.net>
This commit is contained in:
Patrick McHardy 2010-10-14 22:48:47 +02:00
parent a433fa4d8f
commit fb4c54d53c
3 changed files with 57 additions and 4 deletions

View File

@ -29,18 +29,25 @@ static void mnss_release_ind(struct dect_handle *dh, struct dect_ss_endpoint *ss
static void dect_invoke_ss(struct dect_handle *dh, const struct dect_ipui *ipui)
{
struct dect_ss_endpoint *sse;
struct dect_ie_feature_activate feature_activate;
struct dect_ie_events_notification events_notification;
struct dect_mnss_param param = {
.feature_activate = &feature_activate,
.events_notification = &events_notification,
};
sse = dect_ss_endpoint_alloc(dh, ipui);
if (sse == NULL)
return;
feature_activate.feature = DECT_FEATURE_INDICATION_OF_SUBSCRIBER_NUMBER;
events_notification.num = 2;
events_notification.events[0].type = DECT_EVENT_MISSED_CALL;
events_notification.events[0].subtype = DECT_EVENT_MISSED_CALL_VOICE;
events_notification.events[0].multiplicity = 10;
dect_mnss_setup_req(dh, sse, &param);
events_notification.events[1].type = DECT_EVENT_MESSAGE_WAITING;
events_notification.events[1].subtype = DECT_EVENT_MESSAGE_WAITING_VOICE;
events_notification.events[1].multiplicity = 10;
dect_mnss_facility_req(dh, sse, &param);
}
static struct dect_ss_ops ss_ops = {

View File

@ -2128,6 +2128,12 @@ enum dect_event_web_content_subtypes {
/** <<EVENTS-NOTIFICATION>> IE */
struct dect_ie_events_notification {
struct dect_ie_common common;
unsigned int num;
struct {
enum dect_event_types type;
uint8_t subtype;
uint8_t multiplicity;
} events[8];
};
/**

View File

@ -2024,6 +2024,44 @@ static int dect_sfmt_build_codec_list(struct dect_sfmt_ie *dst,
return 0;
}
static const struct dect_trans_tbl dect_event_types[] = {
TRANS_TBL(DECT_EVENT_MESSAGE_WAITING, "Message waiting"),
TRANS_TBL(DECT_EVENT_MISSED_CALL, "Missed call"),
TRANS_TBL(DECT_EVENT_WEB_CONTENT, "Web content"),
TRANS_TBL(DECT_EVENT_LIST_CHANGE_INDICATION, "List change indication"),
};
static void dect_sfmt_dump_events_notification(const struct dect_ie_common *_ie)
{
struct dect_ie_events_notification *ie = dect_ie_container(ie, _ie);
unsigned int i;
char buf[128];
for (i = 0; i < ie->num; i++) {
sfmt_debug("\tEvent %u:\n", i + 1);
sfmt_debug("\t Event type: %s\n",
dect_val2str(dect_event_types, buf, ie->events[i].type));
sfmt_debug("\t Event subtype: %u\n", ie->events[i].subtype);
sfmt_debug("\t Event multiplicity: %u\n", ie->events[i].multiplicity);
}
}
static int dect_sfmt_build_events_notification(struct dect_sfmt_ie *dst,
const struct dect_ie_common *ie)
{
struct dect_ie_events_notification *src = dect_ie_container(src, ie);
unsigned int n = 2, i;
for (i = 0; i < src->num; i++) {
dst->data[n++] = src->events[i].type;
dst->data[n++] = src->events[i].subtype | DECT_OCTET_GROUP_END;
dst->data[n++] = src->events[i].multiplicity | DECT_OCTET_GROUP_END;
}
dst->len = n;
return 0;
}
static const struct dect_ie_handler {
const char *name;
size_t size;
@ -2394,6 +2432,8 @@ static const struct dect_ie_handler {
[DECT_IE_EVENTS_NOTIFICATION] = {
.name = "EVENTS-NOTIFICATION",
.size = sizeof(struct dect_ie_events_notification),
.build = dect_sfmt_build_events_notification,
.dump = dect_sfmt_dump_events_notification,
},
[DECT_IE_CALL_INFORMATION] = {
.name = "CALL-INFORMATION",