Add variable length displayprompt packet to skinny and use octals.

Add new variable length displayprompt packet (0x0145) to skinny. Uses the new 
packet if the device is reporting protocol versions >= 17.

Add the use of octal codes for sending prompts to both the new and old 
displayprompt messages (also cleaned up soft_key_template_default to use the 
defined octal codes).

Review: https://reviewboard.asterisk.org/r/2294/


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@380792 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Damien Wedhorn 2013-02-02 01:52:21 +00:00
parent ae1421e04d
commit 8bb9aa2f6d
1 changed files with 225 additions and 171 deletions

View File

@ -745,164 +745,162 @@ struct bksp_req_message {
#define KEYMASK_IDIVERT (1 << 20)
#define KEYMASK_FORCEDIAL (1 << 21)
/* Localized message "codes" (in octal)
Below is en_US (taken from a 7970) */
/* "\200\000" ??? */
#define OCTAL_REDIAL "\200\001" /* Redial */
#define OCTAL_NEWCALL "\200\002" /* New Call */
#define OCTAL_HOLD "\200\003" /* Hold */
#define OCTAL_TRANSFER "\200\004" /* Transfer */
#define OCTAL_CFWDALL "\200\005" /* CFwdALL */
#define OCTAL_CFWDBUSY "\200\006" /* CFwdBusy */
#define OCTAL_CFWDNOAN "\200\007" /* CFwdNoAnswer */
#define OCTAL_BKSPC "\200\010" /* << */
#define OCTAL_ENDCALL "\200\011" /* EndCall */
#define OCTAL_RESUME "\200\012" /* Resume */
#define OCTAL_ANSWER "\200\013" /* Answer */
#define OCTAL_INFO "\200\014" /* Info */
#define OCTAL_CONFRN "\200\015" /* Confrn */
#define OCTAL_PARK "\200\016" /* Park */
#define OCTAL_JOIN "\200\017" /* Join */
#define OCTAL_MEETME "\200\020" /* MeetMe */
#define OCTAL_PICKUP "\200\021" /* PickUp */
#define OCTAL_GPICKUP "\200\022" /* GPickUp */
#define OCTAL_CUROPTS "\200\023" /* Your current options */
#define OCTAL_OFFHOOK "\200\024" /* Off Hook */
#define OCTAL_ONHOOK "\200\025" /* On Hook */
#define OCTAL_RINGOUT "\200\026" /* Ring out */
#define OCTAL_FROM "\200\027" /* From */
#define OCTAL_CONNECTED "\200\030" /* Connected */
#define OCTAL_BUSY "\200\031" /* Busy */
#define OCTAL_LINEINUSE "\200\032" /* Line In Use */
#define OCTAL_CALLWAITING "\200\033" /* Call Waiting */
#define OCTAL_CALLXFER "\200\034" /* Call Transfer */
#define OCTAL_CALLPARK "\200\035" /* Call Park */
#define OCTAL_CALLPROCEED "\200\036" /* Call Proceed */
#define OCTAL_INUSEREMOTE "\200\037" /* In Use Remote */
#define OCTAL_ENTRNUM "\200\040" /* Enter number */
#define OCTAL_PARKAT "\200\041" /* Call park At */
#define OCTAL_PRIMONLY "\200\042" /* Primary Only */
#define OCTAL_TMPFAIL "\200\043" /* Temp Fail */
#define OCTAL_HAVEVMAIL "\200\044" /* You Have VoiceMail */
#define OCTAL_FWDEDTO "\200\045" /* Forwarded to */
#define OCTAL_CANTCOMPCNF "\200\046" /* Can Not Complete Conference */
#define OCTAL_NOCONFBRDG "\200\047" /* No Conference Bridge */
#define OCTAL_NOPRIMARYCTL "\200\050" /* Can Not Hold Primary Control */
#define OCTAL_INVALCONFPART "\200\051" /* Invalid Conference Participant */
#define OCTAL_INCONFALREADY "\200\052" /* In Conference Already */
#define OCTAL_NOPARTINFO "\200\053" /* No Participant Info */
#define OCTAL_MAXPARTEXCEED "\200\054" /* Exceed Maximum Parties */
#define OCTAL_KEYNOTACTIVE "\200\055" /* Key Is Not Active */
#define OCTAL_ERRNOLIC "\200\056" /* Error No License */
#define OCTAL_ERRDBCFG "\200\057" /* Error DBConfig */
#define OCTAL_ERRDB "\200\060" /* Error Database */
#define OCTAL_ERRPASSLMT "\200\061" /* Error Pass Limit */
#define OCTAL_ERRUNK "\200\062" /* Error Unknown */
#define OCTAL_ERRMISMATCH "\200\063" /* Error Mismatch */
#define OCTAL_CONFERENCE "\200\064" /* Conference */
#define OCTAL_PARKNO "\200\065" /* Park Number */
#define OCTAL_PRIVATE "\200\066" /* Private */
#define OCTAL_INSUFBANDW "\200\067" /* Not Enough Bandwidth */
#define OCTAL_UNKNUM "\200\070" /* Unknown Number */
#define OCTAL_RMLSTC "\200\071" /* RmLstC */
#define OCTAL_VOICEMAIL "\200\072" /* Voicemail */
#define OCTAL_IMMDIV "\200\073" /* ImmDiv */
#define OCTAL_INTRCPT "\200\074" /* Intrcpt */
#define OCTAL_SETWTCH "\200\075" /* SetWtch */
#define OCTAL_TRNSFVM "\200\076" /* TrnsfVM */
#define OCTAL_DND "\200\077" /* DND */
#define OCTAL_DIVALL "\200\100" /* DivAll */
#define OCTAL_CALLBACK "\200\101" /* CallBack */
#define OCTAL_NETCNGREROUT "\200\102" /* Network congestion,rerouting */
#define OCTAL_BARGE "\200\103" /* Barge */
#define OCTAL_BARGEFAIL "\200\104" /* Failed to setup Barge */
#define OCTAL_BARGEEXIST "\200\105" /* Another Barge exists */
#define OCTAL_INCOMPATDEV "\200\106" /* Incompatible device type */
#define OCTAL_PARKNONUM "\200\107" /* No Park Number Available */
#define OCTAL_PARKREVERSION "\200\110" /* CallPark Reversion */
#define OCTAL_SRVNOTACTIVE "\200\111" /* Service is not Active */
#define OCTAL_HITRAFFIC "\200\112" /* High Traffic Try Again Later */
#define OCTAL_QRT "\200\113" /* QRT */
#define OCTAL_MCID "\200\114" /* MCID */
#define OCTAL_DIRTRFR "\200\115" /* DirTrfr */
#define OCTAL_SELECT "\200\116" /* Select */
#define OCTAL_CONFLIST "\200\117" /* ConfList */
#define OCTAL_IDIVERT "\200\120" /* iDivert */
#define OCTAL_CBARGE "\200\121" /* cBarge */
#define OCTAL_CANTCOMPLXFER "\200\122" /* Can Not Complete Transfer */
#define OCTAL_CANTJOINCALLS "\200\123" /* Can Not Join Calls */
#define OCTAL_MCIDSUCCESS "\200\124" /* Mcid Successful */
#define OCTAL_NUMNOTCFG "\200\125" /* Number Not Configured */
#define OCTAL_SECERROR "\200\126" /* Security Error */
#define OCTAL_VIDBANDWNA "\200\127" /* Video Bandwidth Unavailable */
#define OCTAL_VIDMODE "\200\130" /* VidMode */
#define OCTAL_CALLDURTIMEOUT "\200\131" /* Max Call Duration Timeout */
#define OCTAL_HOLDDURTIMEOUT "\200\132" /* Max Hold Duration Timeout */
#define OCTAL_OPICKUP "\200\133" /* OPickUp */
/* "\200\134" ??? */
/* "\200\135" ??? */
/* "\200\136" ??? */
/* "\200\137" ??? */
/* "\200\140" ??? */
#define OCTAL_EXTXFERRESTRICT "\200\141" /* External Transfer Restricted */
/* "\200\142" ??? */
/* "\200\143" ??? */
/* "\200\144" ??? */
#define OCTAL_MACADD "\200\145" /* Mac Address */
#define OCTAL_HOST "\200\146" /* Host Name */
#define OCTAL_DOMAIN "\200\147" /* Domain Name */
#define OCTAL_IPADD "\200\150" /* IP Address */
#define OCTAL_SUBMASK "\200\151" /* Subnet Mask */
#define OCTAL_TFTP1 "\200\152" /* TFTP Server 1 */
#define OCTAL_ROUTER1 "\200\153" /* Default Router 1 */
#define OCTAL_ROUTER2 "\200\154" /* Default Router 2 */
#define OCTAL_ROUTER3 "\200\155" /* Default Router 3 */
#define OCTAL_ROUTER4 "\200\156" /* Default Router 4 */
#define OCTAL_ROUTER5 "\200\157" /* Default Router 5 */
#define OCTAL_DNS1 "\200\160" /* DNS Server 1 */
#define OCTAL_DNS2 "\200\161" /* DNS Server 2 */
#define OCTAL_DNS3 "\200\162" /* DNS Server 3 */
#define OCTAL_DNS4 "\200\163" /* DNS Server 4 */
#define OCTAL_DNS5 "\200\164" /* DNS Server 5 */
#define OCTAL_VLANOPID "\200\165" /* Operational VLAN Id */
#define OCTAL_VLANADID "\200\166" /* Admin. VLAN Id */
#define OCTAL_CM1 "\200\167" /* CallManager 1 */
#define OCTAL_CM2 "\200\170" /* CallManager 2 */
#define OCTAL_CM3 "\200\171" /* CallManager 3 */
#define OCTAL_CM4 "\200\172" /* CallManager 4 */
#define OCTAL_CM5 "\200\173" /* CallManager 5 */
#define OCTAL_URLINFO "\200\174" /* Information URL */
#define OCTAL_URLDIRS "\200\175" /* Directories URL */
#define OCTAL_URLMSGS "\200\176" /* Messages URL */
#define OCTAL_URLSRVS "\200\177" /* Services URL */
static struct soft_key_template_definition soft_key_template_default[] = {
{ "\200\001", SOFTKEY_REDIAL },
{ "\200\002", SOFTKEY_NEWCALL },
{ "\200\003", SOFTKEY_HOLD },
{ "\200\004", SOFTKEY_TRNSFER },
{ "\200\005", SOFTKEY_CFWDALL },
{ "\200\006", SOFTKEY_CFWDBUSY },
{ "\200\007", SOFTKEY_CFWDNOANSWER },
{ "\200\010", SOFTKEY_BKSPC },
{ "\200\011", SOFTKEY_ENDCALL },
{ "\200\012", SOFTKEY_RESUME },
{ "\200\013", SOFTKEY_ANSWER },
{ "\200\014", SOFTKEY_INFO },
{ "\200\015", SOFTKEY_CONFRN },
{ "\200\016", SOFTKEY_PARK },
{ "\200\017", SOFTKEY_JOIN },
{ "\200\020", SOFTKEY_MEETME },
{ "\200\021", SOFTKEY_PICKUP },
{ "\200\022", SOFTKEY_GPICKUP },
{ "\200\077", SOFTKEY_DND },
{ "\200\120", SOFTKEY_IDIVERT },
{ OCTAL_REDIAL, SOFTKEY_REDIAL },
{ OCTAL_NEWCALL, SOFTKEY_NEWCALL },
{ OCTAL_HOLD, SOFTKEY_HOLD },
{ OCTAL_TRANSFER, SOFTKEY_TRNSFER },
{ OCTAL_CFWDALL, SOFTKEY_CFWDALL },
{ OCTAL_CFWDBUSY, SOFTKEY_CFWDBUSY },
{ OCTAL_CFWDNOAN, SOFTKEY_CFWDNOANSWER },
{ OCTAL_BKSPC, SOFTKEY_BKSPC },
{ OCTAL_ENDCALL, SOFTKEY_ENDCALL },
{ OCTAL_RESUME, SOFTKEY_RESUME },
{ OCTAL_ANSWER, SOFTKEY_ANSWER },
{ OCTAL_INFO, SOFTKEY_INFO },
{ OCTAL_CONFRN, SOFTKEY_CONFRN },
{ OCTAL_PARK, SOFTKEY_PARK },
{ OCTAL_JOIN, SOFTKEY_JOIN },
{ OCTAL_MEETME, SOFTKEY_MEETME },
{ OCTAL_PICKUP, SOFTKEY_PICKUP },
{ OCTAL_GPICKUP, SOFTKEY_GPICKUP },
{ OCTAL_DND, SOFTKEY_DND },
{ OCTAL_IDIVERT, SOFTKEY_IDIVERT },
{ "Dial", SOFTKEY_FORCEDIAL},
};
/* Localized message "codes" (in octal)
Below is en_US (taken from a 7970)
\200\xxx
\000: ???
\001: Redial
\002: New Call
\003: Hold
\004: Transfer
\005: CFwdALL
\006: CFwdBusy
\007: CFwdNoAnswer
\010: <<
\011: EndCall
\012: Resume
\013: Answer
\014: Info
\015: Confrn
\016: Park
\017: Join
\020: MeetMe
\021: PickUp
\022: GPickUp
\023: Your current options
\024: Off Hook
\025: On Hook
\026: Ring out
\027: From
\030: Connected
\031: Busy
\032: Line In Use
\033: Call Waiting
\034: Call Transfer
\035: Call Park
\036: Call Proceed
\037: In Use Remote
\040: Enter number
\041: Call park At
\042: Primary Only
\043: Temp Fail
\044: You Have VoiceMail
\045: Forwarded to
\046: Can Not Complete Conference
\047: No Conference Bridge
\050: Can Not Hold Primary Control
\051: Invalid Conference Participant
\052: In Conference Already
\053: No Participant Info
\054: Exceed Maximum Parties
\055: Key Is Not Active
\056: Error No License
\057: Error DBConfig
\060: Error Database
\061: Error Pass Limit
\062: Error Unknown
\063: Error Mismatch
\064: Conference
\065: Park Number
\066: Private
\067: Not Enough Bandwidth
\070: Unknown Number
\071: RmLstC
\072: Voicemail
\073: ImmDiv
\074: Intrcpt
\075: SetWtch
\076: TrnsfVM
\077: DND
\100: DivAll
\101: CallBack
\102: Network congestion,rerouting
\103: Barge
\104: Failed to setup Barge
\105: Another Barge exists
\106: Incompatible device type
\107: No Park Number Available
\110: CallPark Reversion
\111: Service is not Active
\112: High Traffic Try Again Later
\113: QRT
\114: MCID
\115: DirTrfr
\116: Select
\117: ConfList
\120: iDivert
\121: cBarge
\122: Can Not Complete Transfer
\123: Can Not Join Calls
\124: Mcid Successful
\125: Number Not Configured
\126: Security Error
\127: Video Bandwidth Unavailable
\130: VidMode
\131: Max Call Duration Timeout
\132: Max Hold Duration Timeout
\133: OPickUp
\134: ???
\135: ???
\136: ???
\137: ???
\140: ???
\141: External Transfer Restricted
\142: ???
\143: ???
\144: ???
\145: Mac Address
\146: Host Name
\147: Domain Name
\150: IP Address
\151: Subnet Mask
\152: TFTP Server 1
\153: Default Router 1
\154: Default Router 2
\155: Default Router 3
\156: Default Router 4
\157: Default Router 5
\160: DNS Server 1
\161: DNS Server 2
\162: DNS Server 3
\163: DNS Server 4
\164: DNS Server 5
\165: Operational VLAN Id
\166: Admin. VLAN Id
\167: CallManager 1
\170: CallManager 2
\171: CallManager 3
\172: CallManager 4
\173: CallManager 5
\174: Information URL
\175: Directories URL
\176: Messages URL
\177: Services URL
*/
struct soft_key_definitions {
const uint8_t mode;
const uint8_t *defaults;
@ -1096,6 +1094,14 @@ struct call_info_message_variable {
char calldetails[MAXCALLINFOSTR];
};
#define DISPLAY_PROMPT_STATUS_MESSAGE_VARIABLE 0x0145
struct display_prompt_status_message_variable {
uint32_t unknown;
uint32_t lineInstance;
uint32_t callReference;
char promptMessage[MAXCALLINFOSTR];
};
union skinny_data {
struct alarm_message alarm;
struct speed_dial_stat_req_message speeddialreq;
@ -1145,6 +1151,7 @@ union skinny_data {
struct forward_stat_message forwardstat;
struct bksp_req_message bkspmessage;
struct call_info_message_variable callinfomessagevariable;
struct display_prompt_status_message_variable displaypromptstatusvar;
};
/* packet composition */
@ -2701,22 +2708,69 @@ static void transmit_displaynotify(struct skinny_device *d, const char *text, in
transmit_response(d, req);
}
static void transmit_displaypromptstatus(struct skinny_device *d, const char *text, int t, int instance, int callid)
static void transmit_displaypromptstatus(struct skinny_device *d, const char *text, const char *extratext, int t, int instance, int callid)
{
struct skinny_req *req;
if (!(req = req_alloc(sizeof(struct display_prompt_status_message), DISPLAY_PROMPT_STATUS_MESSAGE)))
return;
ast_copy_string(req->data.displaypromptstatus.promptMessage, text, sizeof(req->data.displaypromptstatus.promptMessage));
req->data.displaypromptstatus.messageTimeout = htolel(t);
req->data.displaypromptstatus.lineInstance = htolel(instance);
req->data.displaypromptstatus.callReference = htolel(callid);
SKINNY_DEBUG(DEBUG_PACKET, 3, "Transmitting DISPLAY_PROMPT_STATUS_MESSAGE to %s, text %s\n", d->name, text);
if ((char)*text == '\200') {
int octalstrlen = strlen(text);
ast_copy_string(req->data.displaypromptstatus.promptMessage, text, sizeof(req->data.displaypromptstatusvar.promptMessage));
ast_copy_string(req->data.displaypromptstatus.promptMessage+octalstrlen, extratext, sizeof(req->data.displaypromptstatus.promptMessage)-octalstrlen);
SKINNY_DEBUG(DEBUG_PACKET, 3, "Transmitting DISPLAY_PROMPT_STATUS_MESSAGE to %s, '\\%03o\\%03o', '%s'\n",
d->name, (uint8_t)*text, (uint8_t)*(text+1), extratext);
} else {
ast_copy_string(req->data.displaypromptstatus.promptMessage, text, sizeof(req->data.displaypromptstatus.promptMessage));
SKINNY_DEBUG(DEBUG_PACKET, 3, "Transmitting DISPLAY_PROMPT_STATUS_MESSAGE to %s, '%s'\n",
d->name, text);
}
transmit_response(d, req);
}
static void transmit_displaypromptstatusvar(struct skinny_device *d, const char *text, const char *extratext, int t, int instance, int callid)
{
struct skinny_req *req;
int packetlen;
if (!(req = req_alloc(sizeof(struct display_prompt_status_message_variable), DISPLAY_PROMPT_STATUS_MESSAGE_VARIABLE)))
return;
req->data.displaypromptstatusvar.lineInstance = htolel(instance);
req->data.displaypromptstatusvar.callReference = htolel(callid);
if ((char)*text == '\200') {
int octalstrlen = strlen(text);
ast_copy_string(req->data.displaypromptstatusvar.promptMessage, text, sizeof(req->data.displaypromptstatusvar.promptMessage));
ast_copy_string(req->data.displaypromptstatusvar.promptMessage+octalstrlen, extratext, sizeof(req->data.displaypromptstatusvar.promptMessage)-octalstrlen);
packetlen = req->len - MAXCALLINFOSTR + strlen(text) + strlen(extratext);
SKINNY_DEBUG(DEBUG_PACKET, 3, "Transmitting DISPLAY_PROMPT_STATUS_MESSAGE_VARIABLE to %s, '\\%03o\\%03o', '%s'\n",
d->name, (uint8_t)*text, (uint8_t)*(text+1), extratext);
} else {
ast_copy_string(req->data.displaypromptstatusvar.promptMessage, text, sizeof(req->data.displaypromptstatus.promptMessage));
packetlen = req->len - MAXCALLINFOSTR + strlen(text);
SKINNY_DEBUG(DEBUG_PACKET, 3, "Transmitting DISPLAY_PROMPT_STATUS_MESSAGE_VARIABLE to %s, '%s'\n",
d->name, text);
}
req->len = (packetlen & ~0x3) + 4;
transmit_response(d, req);
}
static void send_displaypromptstatus(struct skinny_device *d, const char *text, const char *extratext, int t, int instance, int callid)
{
if (d->protocolversion < 17) {
transmit_displaypromptstatus(d, text, extratext, t, instance, callid);
} else {
transmit_displaypromptstatusvar(d, text, extratext, t, instance, callid);
}
}
static void transmit_clearpromptmessage(struct skinny_device *d, int instance, int callid)
{
struct skinny_req *req;
@ -3202,11 +3256,11 @@ static int skinny_extensionstate_cb(char *context, char *exten, struct ast_state
if (subline->sub && (subline->sub->substate == SKINNY_CONNECTED)) { /* Device has a real call */
transmit_callstate(d, l->instance, subline->callid, SKINNY_CONNECTED);
transmit_selectsoftkeys(d, l->instance, subline->callid, KEYDEF_CONNECTED, KEYMASK_ALL);
transmit_displaypromptstatus(d, "Connected", 0, l->instance, subline->callid);
send_displaypromptstatus(d, OCTAL_CONNECTED, "", 0, l->instance, subline->callid);
} else { /* Some other device has active call */
transmit_callstate(d, l->instance, subline->callid, SKINNY_CALLREMOTEMULTILINE);
transmit_selectsoftkeys(d, l->instance, subline->callid, KEYDEF_SLACONNECTEDNOTACTIVE, KEYMASK_ALL);
transmit_displaypromptstatus(d, "In Use", 0, l->instance, subline->callid);
send_displaypromptstatus(d, "In Use", "", 0, l->instance, subline->callid);
}
transmit_lamp_indication(d, STIMULUS_LINE, l->instance, SKINNY_LAMP_ON);
transmit_ringer_mode(d, SKINNY_RING_OFF);
@ -3215,7 +3269,7 @@ static int skinny_extensionstate_cb(char *context, char *exten, struct ast_state
case AST_EXTENSION_ONHOLD:
transmit_callstate(d, l->instance, subline->callid, SKINNY_HOLD);
transmit_selectsoftkeys(d, l->instance, subline->callid, KEYDEF_SLAHOLD, KEYMASK_ALL);
transmit_displaypromptstatus(d, "Hold", 0, l->instance, subline->callid);
send_displaypromptstatus(d, "Hold", "", 0, l->instance, subline->callid);
transmit_lamp_indication(d, STIMULUS_LINE, l->instance, SKINNY_LAMP_BLINK);
transmit_activatecallplane(d, l);
break;
@ -5208,7 +5262,7 @@ static void setsubstate(struct skinny_subchannel *sub, int state)
transmit_stop_tone(d, l->instance, sub->callid);
transmit_callstate(d, l->instance, subline->callid, SKINNY_CALLREMOTEMULTILINE);
transmit_selectsoftkeys(d, l->instance, subline->callid, KEYDEF_SLACONNECTEDNOTACTIVE, KEYMASK_ALL);
transmit_displaypromptstatus(d, "In Use", 0, l->instance, subline->callid);
send_displaypromptstatus(d, "In Use", "", 0, l->instance, subline->callid);
}
sub->cxmode = SKINNY_CX_RECVONLY;
@ -5250,7 +5304,7 @@ static void setsubstate(struct skinny_subchannel *sub, int state)
transmit_callstate(d, l->instance, subline->callid, SKINNY_CALLREMOTEMULTILINE);
transmit_selectsoftkeys(d, l->instance, subline->callid, KEYDEF_SLACONNECTEDNOTACTIVE, KEYMASK_ALL);
transmit_displaypromptstatus(d, "In Use", 0, l->instance, subline->callid);
send_displaypromptstatus(d, "In Use", "", 0, l->instance, subline->callid);
sub->substate = SUBSTATE_HOLD;
@ -5289,7 +5343,7 @@ static void setsubstate(struct skinny_subchannel *sub, int state)
transmit_clear_display_message(d, l->instance, sub->callid);
transmit_start_tone(d, SKINNY_DIALTONE, l->instance, sub->callid);
transmit_selectsoftkeys(d, l->instance, sub->callid, KEYDEF_OFFHOOK, KEYMASK_ALL);
transmit_displaypromptstatus(d, "Enter number", 0, l->instance, sub->callid);
send_displaypromptstatus(d, OCTAL_ENTRNUM, "", 0, l->instance, sub->callid);
sub->substate = SUBSTATE_OFFHOOK;
sub->dialer_sched = skinny_sched_add(firstdigittimeout, skinny_dialer_cb, sub);
@ -5347,7 +5401,7 @@ static void setsubstate(struct skinny_subchannel *sub, int state)
transmit_stop_tone(d, l->instance, sub->callid);
transmit_clear_display_message(d, l->instance, sub->callid);
transmit_selectsoftkeys(d, l->instance, sub->callid, KEYDEF_RINGOUT, KEYMASK_ALL);
transmit_displaypromptstatus(d, "Dialing", 0, l->instance, sub->callid);
send_displaypromptstatus(d, "Dialing", "", 0, l->instance, sub->callid);
}
if (AST_LIST_FIRST(&l->sublines)) {
@ -5387,14 +5441,14 @@ static void setsubstate(struct skinny_subchannel *sub, int state)
}
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);
send_displaypromptstatus(d, OCTAL_RINGOUT, "", 0, l->instance, sub->callid);
send_callinfo(sub);
sub->substate = SUBSTATE_RINGOUT;
break;
case SUBSTATE_RINGIN:
transmit_callstate(d, l->instance, sub->callid, SKINNY_RINGIN);
transmit_selectsoftkeys(d, l->instance, sub->callid, KEYDEF_RINGIN, KEYMASK_ALL);
transmit_displaypromptstatus(d, "Ring-In", 0, l->instance, sub->callid);
send_displaypromptstatus(d, "Ring-In", "", 0, l->instance, sub->callid);
send_callinfo(sub);
transmit_lamp_indication(d, STIMULUS_LINE, l->instance, SKINNY_LAMP_BLINK);
transmit_ringer_mode(d, SKINNY_RING_INSIDE);
@ -5414,7 +5468,7 @@ static void setsubstate(struct skinny_subchannel *sub, int state)
transmit_callstate(d, l->instance, sub->callid, SKINNY_RINGIN);
transmit_callstate(d, l->instance, sub->callid, SKINNY_CALLWAIT);
transmit_selectsoftkeys(d, l->instance, sub->callid, KEYDEF_RINGIN, KEYMASK_ALL);
transmit_displaypromptstatus(d, "Callwaiting", 0, l->instance, sub->callid);
send_displaypromptstatus(d, OCTAL_CALLWAITING, "", 0, l->instance, sub->callid);
send_callinfo(sub);
transmit_lamp_indication(d, STIMULUS_LINE, l->instance, SKINNY_LAMP_BLINK);
transmit_start_tone(d, SKINNY_CALLWAITTONE, l->instance, sub->callid);
@ -5436,7 +5490,7 @@ static void setsubstate(struct skinny_subchannel *sub, int state)
transmit_stop_tone(d, l->instance, sub->callid);
send_callinfo(sub);
transmit_callstate(d, l->instance, sub->callid, SKINNY_CONNECTED);
transmit_displaypromptstatus(d, "Connected", 0, l->instance, sub->callid);
send_displaypromptstatus(d, OCTAL_CONNECTED, "", 0, l->instance, sub->callid);
transmit_selectsoftkeys(d, l->instance, sub->callid, KEYDEF_CONNECTED, KEYMASK_ALL);
if (!sub->rtp) {
start_rtp(sub);
@ -5470,7 +5524,7 @@ static void setsubstate(struct skinny_subchannel *sub, int state)
}
send_callinfo(sub);
transmit_callstate(d, l->instance, sub->callid, SKINNY_BUSY);
transmit_displaypromptstatus(d, "Busy", 0, l->instance, sub->callid);
send_displaypromptstatus(d, OCTAL_BUSY, "", 0, l->instance, sub->callid);
sub->substate = SUBSTATE_BUSY;
break;
case SUBSTATE_CONGESTION:
@ -5484,7 +5538,7 @@ static void setsubstate(struct skinny_subchannel *sub, int state)
}
send_callinfo(sub);
transmit_callstate(d, l->instance, sub->callid, SKINNY_CONGESTION);
transmit_displaypromptstatus(d, "Congestion", 0, l->instance, sub->callid);
send_displaypromptstatus(d, "Congestion", "", 0, l->instance, sub->callid);
sub->substate = SUBSTATE_CONGESTION;
break;
case SUBSTATE_PROGRESS:
@ -5498,7 +5552,7 @@ static void setsubstate(struct skinny_subchannel *sub, int state)
}
send_callinfo(sub);
transmit_callstate(d, l->instance, sub->callid, SKINNY_PROGRESS);
transmit_displaypromptstatus(d, "Call Progress", 0, l->instance, sub->callid);
send_displaypromptstatus(d, "Call Progress", "", 0, l->instance, sub->callid);
sub->substate = SUBSTATE_PROGRESS;
break;
case SUBSTATE_HOLD: