int ooRemoveLogicalChannel(OOH323CallData *call, int ChannelNo) { OOLogicalChannel * temp = NULL, *prev=NULL; if(!call->logicalChans) { OOTRACEERR4("ERROR:Remove Logical Channel - Channel %d not found " "Empty channel List(%s, %s)\n", ChannelNo, call->callType, call->callToken); return OO_FAILED; } temp = call->logicalChans; while(temp) { if(temp->channelNo == ChannelNo) { if(!prev) call->logicalChans = temp->next; else prev->next = temp->next; memFreePtr(call->pctxt, temp->chanCap); memFreePtr(call->pctxt, temp); OOTRACEDBGC4("Removed logical channel %d (%s, %s)\n", ChannelNo, call->callType, call->callToken); call->noOfLogicalChannels--; return OO_OK; } prev = temp; temp = temp->next; } OOTRACEERR4("ERROR:Remove Logical Channel - Channel %d not found " "(%s, %s)\n", ChannelNo, call->callType, call->callToken); return OO_FAILED; }
int ooClearLogicalChannel(OOH323CallData *call, int channelNo) { OOLogicalChannel *pLogicalChannel = NULL; ooH323EpCapability *epCap=NULL; OOTRACEDBGC4("Clearing logical channel number %d. (%s, %s)\n", channelNo, call->callType, call->callToken); pLogicalChannel = ooFindLogicalChannelByLogicalChannelNo(call,channelNo); do { if(!pLogicalChannel) { OOTRACEWARN4("Logical Channel %d doesn't exist, in clearLogicalChannel." " (%s, %s)\n", channelNo, call->callType, call->callToken); return OO_OK; } epCap = (ooH323EpCapability*) pLogicalChannel->chanCap; if(!strcmp(pLogicalChannel->dir, "receive")) { if(epCap->stopReceiveChannel) { epCap->stopReceiveChannel(call, pLogicalChannel); OOTRACEINFO4("Stopped Receive channel %d (%s, %s)\n", channelNo, call->callType, call->callToken); } else{ OOTRACEERR4("ERROR:No callback registered for stopReceiveChannel %d " "(%s, %s)\n", channelNo, call->callType, call->callToken); } } else { if(pLogicalChannel->state == OO_LOGICALCHAN_ESTABLISHED) { if(epCap->stopTransmitChannel) { epCap->stopTransmitChannel(call, pLogicalChannel); OOTRACEINFO4("Stopped Transmit channel %d (%s, %s)\n", channelNo, call->callType, call->callToken); } else{ OOTRACEERR4("ERROR:No callback registered for stopTransmitChannel" " %d (%s, %s)\n", channelNo, call->callType, call->callToken); } } } ooRemoveLogicalChannel(call, channelNo);/* TODO: efficiency - This causes re-search of of logical channel in the list. Can be easily improved.*/ } while ((pLogicalChannel = ooFindLogicalChannelByLogicalChannelNo(call,channelNo))); return OO_OK; }
OOLogicalChannel * ooFindLogicalChannelByOLC(OOH323CallData *call, H245OpenLogicalChannel *olc) { H245DataType * psDataType=NULL; H245H2250LogicalChannelParameters * pslcp=NULL; OOTRACEDBGC4("ooFindLogicalChannel by olc %d (%s, %s)\n", olc->forwardLogicalChannelNumber, call->callType, call->callToken); if(olc->m.reverseLogicalChannelParametersPresent) { OOTRACEDBGC3("Finding receive channel (%s,%s)\n", call->callType, call->callToken); psDataType = &olc->reverseLogicalChannelParameters.dataType; /* Only H2250LogicalChannelParameters are supported */ if(olc->reverseLogicalChannelParameters.multiplexParameters.t != T_H245OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters_h2250LogicalChannelParameters){ OOTRACEERR4("Error:Invalid olc %d received (%s, %s)\n", olc->forwardLogicalChannelNumber, call->callType, call->callToken); return NULL; } pslcp = olc->reverseLogicalChannelParameters.multiplexParameters.u.h2250LogicalChannelParameters; return ooFindLogicalChannel(call, pslcp->sessionID, "receive", psDataType); } else{ OOTRACEDBGC3("Finding transmit channel (%s, %s)\n", call->callType, call->callToken); psDataType = &olc->forwardLogicalChannelParameters.dataType; /* Only H2250LogicalChannelParameters are supported */ if(olc->forwardLogicalChannelParameters.multiplexParameters.t != T_H245OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_h2250LogicalChannelParameters) { OOTRACEERR4("Error:Invalid olc %d received (%s, %s)\n", olc->forwardLogicalChannelNumber, call->callType, call->callToken); return NULL; } pslcp = olc->forwardLogicalChannelParameters.multiplexParameters.u.h2250LogicalChannelParameters; return ooFindLogicalChannel(call, pslcp->sessionID, "transmit", psDataType); } }
int ooLogAsn1Error(int stat, const char * fname, int lno) { OOTRACEERR4("Asn1Error: %d at %s:%d\n", stat, fname, lno); return stat; }