mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-03-06 10:26:41 +00:00
pretty damn close to being operational
git-svn-id: http://svn.openzap.org/svn/openzap/trunk@266 a93c3328-9c30-0410-af19-c9cd2b2d52af
This commit is contained in:
parent
058739eed9
commit
aa53cf7997
libs/freetdm
@ -318,7 +318,7 @@ static switch_status_t channel_on_hangup(switch_core_session_t *session)
|
|||||||
break;
|
break;
|
||||||
case ZAP_CHAN_TYPE_B:
|
case ZAP_CHAN_TYPE_B:
|
||||||
{
|
{
|
||||||
if (tech_pvt->zchan->state != ZAP_CHANNEL_STATE_DOWN) {
|
if (tech_pvt->zchan->state != ZAP_CHANNEL_STATE_DOWN && tech_pvt->zchan->state != ZAP_CHANNEL_STATE_TERMINATING) {
|
||||||
tech_pvt->zchan->caller_data.hangup_cause = switch_channel_get_cause(channel);
|
tech_pvt->zchan->caller_data.hangup_cause = switch_channel_get_cause(channel);
|
||||||
zap_set_state_locked(tech_pvt->zchan, ZAP_CHANNEL_STATE_HANGUP);
|
zap_set_state_locked(tech_pvt->zchan, ZAP_CHANNEL_STATE_HANGUP);
|
||||||
}
|
}
|
||||||
@ -977,7 +977,7 @@ static ZIO_SIGNAL_CB_FUNCTION(on_isdn_signal)
|
|||||||
while((session = zap_channel_get_session(sigmsg->channel, 0))) {
|
while((session = zap_channel_get_session(sigmsg->channel, 0))) {
|
||||||
zap_channel_clear_token(sigmsg->channel, 0);
|
zap_channel_clear_token(sigmsg->channel, 0);
|
||||||
channel = switch_core_session_get_channel(session);
|
channel = switch_core_session_get_channel(session);
|
||||||
switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING);
|
switch_channel_hangup(channel, sigmsg->channel->caller_data.hangup_cause);
|
||||||
switch_core_session_rwunlock(session);
|
switch_core_session_rwunlock(session);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1018,7 +1018,7 @@ L3INT Q931Uie_Cause(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * I
|
|||||||
pie->Location = IBuf[Octet+Off] & 0x0f;
|
pie->Location = IBuf[Octet+Off] & 0x0f;
|
||||||
|
|
||||||
/* Octet 3a */
|
/* Octet 3a */
|
||||||
if((IBuf[Octet+Off] & 0x80) != 0)
|
if((IBuf[Octet+Off] & 0x80) == 0)
|
||||||
{
|
{
|
||||||
Off++;
|
Off++;
|
||||||
pie->Recom = IBuf[Octet+Off] & 0x7f;
|
pie->Recom = IBuf[Octet+Off] & 0x7f;
|
||||||
@ -1027,6 +1027,7 @@ L3INT Q931Uie_Cause(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * I
|
|||||||
|
|
||||||
/* Octet 4 */
|
/* Octet 4 */
|
||||||
pie->Value = IBuf[Octet+Off] & 0x7f;
|
pie->Value = IBuf[Octet+Off] & 0x7f;
|
||||||
|
Octet++;
|
||||||
|
|
||||||
Q931IESizeTest(Q931E_CAUSE);
|
Q931IESizeTest(Q931E_CAUSE);
|
||||||
|
|
||||||
|
@ -516,6 +516,19 @@ zap_status_t zap_channel_set_state(zap_channel_t *zchan, zap_channel_state_t sta
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch(zchan->state) {
|
switch(zchan->state) {
|
||||||
|
case ZAP_CHANNEL_STATE_HANGUP:
|
||||||
|
case ZAP_CHANNEL_STATE_TERMINATING:
|
||||||
|
{
|
||||||
|
ok = 0;
|
||||||
|
switch(state) {
|
||||||
|
case ZAP_CHANNEL_STATE_DOWN:
|
||||||
|
ok = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
case ZAP_CHANNEL_STATE_UP:
|
case ZAP_CHANNEL_STATE_UP:
|
||||||
{
|
{
|
||||||
switch(state) {
|
switch(state) {
|
||||||
|
@ -105,6 +105,8 @@ static L3INT zap_isdn_931_34(void *pvt, L2UCHAR *msg, L2INT mlen)
|
|||||||
break;
|
break;
|
||||||
case Q931mes_DISCONNECT:
|
case Q931mes_DISCONNECT:
|
||||||
{
|
{
|
||||||
|
Q931ie_Cause *cause = Q931GetIEPtr(gen->Cause, gen->buf);
|
||||||
|
zchan->caller_data.hangup_cause = cause->Value;
|
||||||
zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_TERMINATING);
|
zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_TERMINATING);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -172,8 +174,8 @@ static int zap_isdn_921_23(void *pvt, L2UCHAR *msg, L2INT mlen)
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
char bb[4096] = "";
|
char bb[4096] = "";
|
||||||
print_hex_bytes(msg, mlen, bb, sizeof(bb));
|
print_hex_bytes(msg+4, mlen-2, bb, sizeof(bb));
|
||||||
zap_log(ZAP_LOG_DEBUG, "READ %d\n%s\n%s\n\n", (int)mlen, LINE, bb);
|
zap_log(ZAP_LOG_DEBUG, "READ %d\n%s\n%s\n\n", (int)mlen-2, LINE, bb);
|
||||||
|
|
||||||
ret = Q931Rx23(pvt, msg, mlen);
|
ret = Q931Rx23(pvt, msg, mlen);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
@ -342,7 +344,6 @@ static __inline__ void state_advance(zap_channel_t *zchan)
|
|||||||
#endif
|
#endif
|
||||||
CalledNum.TypNum = 2;
|
CalledNum.TypNum = 2;
|
||||||
CalledNum.NumPlanID = 1;
|
CalledNum.NumPlanID = 1;
|
||||||
printf("WTF: [%s]\n", zchan->caller_data.ani);
|
|
||||||
CalledNum.Size += strlen(zchan->caller_data.ani);
|
CalledNum.Size += strlen(zchan->caller_data.ani);
|
||||||
gen->CalledNum = Q931AppendIE((L3UCHAR *) gen, (L3UCHAR *) &CalledNum);
|
gen->CalledNum = Q931AppendIE((L3UCHAR *) gen, (L3UCHAR *) &CalledNum);
|
||||||
ptrCalledNum = Q931GetIEPtr(gen->CalledNum, gen->buf);
|
ptrCalledNum = Q931GetIEPtr(gen->CalledNum, gen->buf);
|
||||||
@ -370,6 +371,8 @@ static __inline__ void state_advance(zap_channel_t *zchan)
|
|||||||
break;
|
break;
|
||||||
case ZAP_CHANNEL_STATE_TERMINATING:
|
case ZAP_CHANNEL_STATE_TERMINATING:
|
||||||
{
|
{
|
||||||
|
sig.event_id = ZAP_SIGEVENT_STOP;
|
||||||
|
status = data->sig_cb(&sig);
|
||||||
gen->MesType = Q931mes_RELEASE;
|
gen->MesType = Q931mes_RELEASE;
|
||||||
Q931Rx43(&data->q931, (void *)gen, gen->Size);
|
Q931Rx43(&data->q931, (void *)gen, gen->Size);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user