ooh245.c
来自「一个非常美妙的proxy。功能强大。基于sip的协议。如果还要的话」· C语言 代码 · 共 1,743 行 · 第 1/5 页
C
1,743 行
call->callType, call->callToken); return OO_FAILED; } unicastAddr1 = h2250lcap->mediaControlChannel.u.unicastAddress; if(unicastAddr1->t != T_H245UnicastAddress_iPAddress) { OOTRACEERR3("Error: Processing OpenLogicalChannelAck - media control " "channel address type is not IP (%s, %s)\n", call->callType, call->callToken); return OO_FAILED; } iPAddress1 = unicastAddr1->u.iPAddress; /* Set remote destination address for rtp session */ // strcpy(call->remoteIP, remoteip); /* Start channel here */ pLogicalChannel = ooFindLogicalChannelByLogicalChannelNo(call,olcAck->forwardLogicalChannelNumber); if(!pLogicalChannel) { OOTRACEERR4("ERROR:Logical channel %d not found in the channel list for " "call (%s, %s)\n", olcAck->forwardLogicalChannelNumber, call->callType, call->callToken); return OO_FAILED; } /* Update session id if we were waiting for remote to assign one and remote did assign one. */ if(pLogicalChannel->sessionID == 0 && h2250lcap->m.sessionIDPresent) pLogicalChannel->sessionID = h2250lcap->sessionID; /* Populate ports &ip for channel */ strcpy(pLogicalChannel->remoteIP, remoteip); pLogicalChannel->remoteMediaPort = iPAddress->tsapIdentifier; pLogicalChannel->remoteMediaControlPort = iPAddress1->tsapIdentifier; if(pLogicalChannel->chanCap->startTransmitChannel) { pLogicalChannel->chanCap->startTransmitChannel(call, pLogicalChannel); OOTRACEINFO4("TransmitLogical Channel of type %s started (%s, %s)\n", ooGetCapTypeText(pLogicalChannel->chanCap->cap), call->callType, call->callToken); } else{ OOTRACEERR3("ERROR:No callback registered for starting transmit channel " "(%s, %s)\n", call->callType, call->callToken); return OO_FAILED; } pLogicalChannel->state = OO_LOGICALCHAN_ESTABLISHED; return OO_OK;}int ooOnReceivedOpenLogicalChannelRejected(OOH323CallData *call, H245OpenLogicalChannelReject *olcReject){ switch(olcReject->cause.t) { case T_H245OpenLogicalChannelReject_cause_unspecified: OOTRACEINFO4("Open logical channel %d rejected - unspecified (%s, %s)\n", olcReject->forwardLogicalChannelNumber, call->callType, call->callToken); break; case T_H245OpenLogicalChannelReject_cause_unsuitableReverseParameters: OOTRACEINFO4("Open logical channel %d rejected - " "unsuitableReverseParameters (%s, %s)\n", olcReject->forwardLogicalChannelNumber, call->callType, call->callToken); break; case T_H245OpenLogicalChannelReject_cause_dataTypeNotSupported: OOTRACEINFO4("Open logical channel %d rejected - dataTypeNotSupported" "(%s, %s)\n", olcReject->forwardLogicalChannelNumber, call->callType, call->callToken); break; case T_H245OpenLogicalChannelReject_cause_dataTypeNotAvailable: OOTRACEINFO4("Open logical channel %d rejected - dataTypeNotAvailable" "(%s, %s)\n", olcReject->forwardLogicalChannelNumber, call->callType, call->callToken); break; case T_H245OpenLogicalChannelReject_cause_unknownDataType: OOTRACEINFO4("Open logical channel %d rejected - unknownDataType" "(%s, %s)\n", olcReject->forwardLogicalChannelNumber, call->callType, call->callToken); break; case T_H245OpenLogicalChannelReject_cause_dataTypeALCombinationNotSupported: OOTRACEINFO4("Open logical channel %d rejected - " "dataTypeALCombinationNotSupported(%s, %s)\n", olcReject->forwardLogicalChannelNumber, call->callType, call->callToken); break; case T_H245OpenLogicalChannelReject_cause_multicastChannelNotAllowed: OOTRACEINFO4("Open logical channel %d rejected - " "multicastChannelNotAllowed (%s, %s)\n", olcReject->forwardLogicalChannelNumber, call->callType, call->callToken); break; case T_H245OpenLogicalChannelReject_cause_insufficientBandwidth: OOTRACEINFO4("Open logical channel %d rejected - insufficientBandwidth" "(%s, %s)\n", olcReject->forwardLogicalChannelNumber, call->callType, call->callToken); break; case T_H245OpenLogicalChannelReject_cause_separateStackEstablishmentFailed: OOTRACEINFO4("Open logical channel %d rejected - " "separateStackEstablishmentFailed (%s, %s)\n", olcReject->forwardLogicalChannelNumber, call->callType, call->callToken); break; case T_H245OpenLogicalChannelReject_cause_invalidSessionID: OOTRACEINFO4("Open logical channel %d rejected - " "invalidSessionID (%s, %s)\n", olcReject->forwardLogicalChannelNumber, call->callType, call->callToken); break; case T_H245OpenLogicalChannelReject_cause_masterSlaveConflict: OOTRACEINFO4("Open logical channel %d rejected - " "invalidSessionID (%s, %s)\n", olcReject->forwardLogicalChannelNumber, call->callType, call->callToken); break; case T_H245OpenLogicalChannelReject_cause_waitForCommunicationMode: OOTRACEINFO4("Open logical channel %d rejected - " "waitForCommunicationMode (%s, %s)\n", olcReject->forwardLogicalChannelNumber, call->callType, call->callToken); break; case T_H245OpenLogicalChannelReject_cause_invalidDependentChannel: OOTRACEINFO4("Open logical channel %d rejected - " "invalidDependentChannel (%s, %s)\n", olcReject->forwardLogicalChannelNumber, call->callType, call->callToken); break; case T_H245OpenLogicalChannelReject_cause_replacementForRejected: OOTRACEINFO4("Open logical channel %d rejected - " "replacementForRejected (%s, %s)\n", olcReject->forwardLogicalChannelNumber, call->callType, call->callToken); break; default: OOTRACEERR4("Error: OpenLogicalChannel %d rejected - " "invalid cause(%s, %s)\n", olcReject->forwardLogicalChannelNumber, call->callType, call->callToken); } if(call->callState < OO_CALL_CLEAR) { call->callState = OO_CALL_CLEAR; call->callEndReason = OO_REASON_LOCAL_CLEARED; } return OO_OK;}/** * Currently only disconnect end session command is supported. **/int ooSendEndSessionCommand(OOH323CallData *call){ int ret; H245CommandMessage * command; OOCTXT *pctxt; H245Message *ph245msg=NULL; ret = ooCreateH245Message(&ph245msg, T_H245MultimediaSystemControlMessage_command); if(ret != OO_OK) { OOTRACEERR3("Error: H245 message creation failed for - End Session " "Command (%s, %s)\n", call->callType, call->callToken); return OO_FAILED; } ph245msg->msgType = OOEndSessionCommand; command = ph245msg->h245Msg.u.command; pctxt = &gH323ep.msgctxt; memset(command, 0, sizeof(H245CommandMessage)); command->t = T_H245CommandMessage_endSessionCommand; command->u.endSessionCommand = (H245EndSessionCommand*) ASN1MALLOC(pctxt, sizeof(H245EndSessionCommand)); memset(command->u.endSessionCommand, 0, sizeof(H245EndSessionCommand)); command->u.endSessionCommand->t = T_H245EndSessionCommand_disconnect; OOTRACEDBGA3("Built EndSession Command (%s, %s)\n", call->callType, call->callToken); ret = ooSendH245Msg(call, ph245msg); if(ret != OO_OK) { OOTRACEERR3("Error:Failed to enqueue EndSession message to outbound " "queue.(%s, %s)\n", call->callType, call->callToken); } ooFreeH245Message(call, ph245msg); return ret;}int ooHandleH245Command(OOH323CallData *call, H245CommandMessage *command){ ASN1UINT i; DListNode *pNode = NULL; OOTimer *pTimer = NULL; OOTRACEDBGC3("Handling H.245 command message. (%s, %s)\n", call->callType, call->callToken); switch(command->t) { case T_H245CommandMessage_endSessionCommand: OOTRACEINFO3("Received EndSession command (%s, %s)\n", call->callType, call->callToken); if(call->h245SessionState == OO_H245SESSION_ENDSENT) { /* Disable Session timer */ for(i = 0; i<call->timerList.count; i++) { pNode = dListFindByIndex(&call->timerList, i); pTimer = (OOTimer*)pNode->data; if(((ooTimerCallback*)pTimer->cbData)->timerType & OO_SESSION_TIMER) { ASN1MEMFREEPTR(call->pctxt, pTimer->cbData); ooTimerDelete(call->pctxt, &call->timerList, pTimer); OOTRACEDBGC3("Deleted Session Timer. (%s, %s)\n", call->callType, call->callToken); break; } } ooCloseH245Connection(call); }else{ call->h245SessionState = OO_H245SESSION_ENDRECVD;#if 0 if(call->callState < OO_CALL_CLEAR) call->callState = OO_CALL_CLEAR;#else if(call->logicalChans) { OOTRACEINFO3("In response to received EndSessionCommand - " "Clearing all logical channels. (%s, %s)\n", call->callType, call->callToken); ooClearAllLogicalChannels(call); } ooSendEndSessionCommand(call);#endif } break; case T_H245CommandMessage_sendTerminalCapabilitySet: OOTRACEWARN3("Warning: Received command Send terminal capability set " "- Not handled (%s, %s)\n", call->callType, call->callToken); break; case T_H245CommandMessage_flowControlCommand: OOTRACEWARN3("Warning: Flow control command received - Not handled " "(%s, %s)\n", call->callType, call->callToken); break; default: OOTRACEWARN3("Warning: Unhandled H245 command message received " "(%s, %s)\n", call->callType, call->callToken); } OOTRACEDBGC3("Handling H.245 command message done. (%s, %s)\n", call->callType, call->callToken); return OO_OK;}int ooOnReceivedTerminalCapabilitySetAck(OOH323CallData* call){ call->localTermCapState = OO_LocalTermCapSetAckRecvd; if(call->remoteTermCapState != OO_RemoteTermCapSetAckSent) return OO_OK; if(call->masterSlaveState == OO_MasterSlave_Master || call->masterSlaveState == OO_MasterSlave_Slave) { if(gH323ep.h323Callbacks.openLogicalChannels) gH323ep.h323Callbacks.openLogicalChannels(call); else{ if(!call->logicalChans) ooOpenLogicalChannels(call); }#if 0 if(!call->logicalChans){ if(!gH323ep.h323Callbacks.openLogicalChannels) ooOpenLogicalChannels(call); else gH323ep.h323Callbacks.openLogicalChannels(call); }#endif } return OO_OK;}int ooCloseAllLogicalChannels(OOH323CallData *call){ ooLogicalChannel *temp; temp = call->logicalChans; while(temp) { if(temp->state == OO_LOGICALCHAN_ESTABLISHED) { /* Sending closelogicalchannel only for outgoing channels*/ if(!strcmp(temp->dir, "transmit")) { ooSendCloseLogicalChannel(call, temp); } else{ ooSendRequestCloseLogicalChannel(call, temp); } } temp = temp->next; } return OO_OK;}int ooSendCloseLogicalChannel(OOH323CallData *call, ooLogicalChannel *logicalChan){ int ret = OO_OK, error=0; H245Message *ph245msg = NULL; OOCTXT *pctxt; H245RequestMessage *request; H245CloseLogicalChannel* clc; ret = ooCreateH245Message(&ph245msg, T_H245MultimediaSystemControlMessage_request); if(ret != OO_OK) { OOTRACEERR3("ERROR:Failed to create H245 message for closeLogicalChannel" " message (%s, %s)\n", call->callType, call->callToken); return OO_FAILED; } ph245msg->msgType = OOCloseLogicalChannel; ph245msg->logicalChannelNo = logicalChan->channelNo; pctxt = &gH323ep.msgctxt; request = ph245msg->h245Msg.u.request; request->t = T_H245RequestMessage_closeLogicalChannel; request->u.closeLogicalChannel = (H245CloseLogicalChannel*)ASN1MALLOC(pctxt, sizeof(H245CloseLogicalChannel)); if(!request->u.closeLogicalChannel) { OOTRACEERR3("ERROR:Memory allocation for CloseLogicalChannel failed " "(%s, %s)\n", call->callType, call->callToken); ooFreeH245Message(call, ph245msg); return OO_FAILED; } clc = request->u.closeLogicalChannel; memset(clc, 0, sizeof(H245CloseLogicalChannel)); clc->forwardLogicalChan
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?