Пример #1
0
Component* Button::updateFocus(int direction, int buttonsPressed)
{
	Component* newFocus = NULL;
	if(!getFocus() && active)
	{
		setFocus(true);
		newFocus = this;
	}
	else if (!getFocus() && !active)
	{
		//try to move direction, and if new component found send to focus manager and remove focus for current component
		if (getNextFocus(direction))
			newFocus = (getNextFocus(direction))->updateFocus(direction, buttonsPressed);
		else
			newFocus = getNextFocus(direction);
	}
	else
	{
		if (getNextFocus(direction))
			newFocus = (getNextFocus(direction))->updateFocus(direction, buttonsPressed);
		if (newFocus)
			setFocus(false);
		else
			newFocus = this;
	}
	if (newFocus == this)
	{
		//finally update button behavior based on buttons pressed
		if(buttonsPressed & Focus::ACTION_BACK)
			doReturn();
		else if (buttonsPressed & Focus::ACTION_SELECT)
			doClicked();
	}
	return newFocus;
}
Пример #2
0
int SdpBuild::checkCodec( bool testReInvite, SipCallMember *member, bool forceHold , bool *srtpErr)
{
	bool holdMe=false;
	cntParam=0;
	setRecvonly(false);
	ReInvite=testReInvite;
        int status = (int)SipCall::GarKeinCall;
	int isRtpMap=0;
	int i=0, j=0;
	QString transT;
        bool evaluateV=false, evaluateA=false, evaluateAV=false;
        QString mstr = member->getSessionDescription();
        QString ipaddress;
        QString curline;
        QString portstr;
        QString codecstr;
        QString codecstr1;
        QString codecstr2;
        int receivedAudioMediaNumber = 0, receivedVideoMediaNumber = 0;
        QString dp=":";
	QString sec;
        mstr += '\n';                        // Guarentee termination
        if( mstr.left( mstr.find( '\n' ) ) != "v=0" ) {
	return doReturn (status);
        }
        mstr.remove( 0, mstr.find( '\n' ) + 1 );

        while( mstr.length() > 2 ) {
                curline = mstr.left( mstr.find( '\n' ) );
                mstr.remove( 0, mstr.find( '\n' ) + 1 );
	        if( curline.left( curline.find( '=' ) ) == "c" ) {
            		if( curline.contains("IP4") ) {
		        ipaddress = curline.mid( curline.find( "IP4" ) + 4 ).stripWhiteSpace();
			} else {
		        ipaddress = curline.mid( curline.find( "IP6" ) + 4 ).stripWhiteSpace();
			}

		}
		if( curline.contains("m=audio")) {
			if(ipaddress.contains("0.0.0.0") || ipaddress.contains("::0") || forceHold){
                                status = (int) SipCall::putMeOnHold;
				setExtHost(ipaddress);
				holdMe = true;
			} else {
				if(evaluateV==true) {
					evaluateAV=true;
					status = (int)SipCall::auviCall;
				} else {
					status = (int)SipCall::StandardCall;
					evaluateA=true;
				}
				if ( ( curline.contains("RTP/SAVP") && (sessionC->getSrtpMode() != 1) )|| ( curline.contains("RTP/AVP") && (sessionC->getSrtpMode() != 0) ) ) {
				    *srtpErr = true;
				}
				setAudioPort(curline.section(' ',1,1));
				setExtHost(ipaddress);
				int i = (-1);
				do {
					i++;
					acc[i] = curline.section(' ', i+3, i+3);
					
				} while (acc[i].length() != 0);
				receivedAudioMediaNumber = i;
					
			}
                }
                if( curline.contains("m=video")) {
			if(ipaddress.contains("0.0.0.0")|| ipaddress.contains("::0") || forceHold){
                        	status = (int) SipCall::putMeOnHold;
				setExtHost(ipaddress);
				holdMe = true;
			} else {
				if(evaluateA==true) {
					evaluateAV=true;
					status = (int)SipCall::auviCall;
				} else {
					status = (int)SipCall::videoCall;
					evaluateV=true;
				}
				setExtPort(curline.section(' ',1,1));
				setExtHost(ipaddress);
				int i = (-1);
				do {
					i++;
					vcc[i] = curline.section(' ', i+3, i+3);
					
				} while (vcc[i].length() != 0);
				receivedVideoMediaNumber = i;
                        }
                } 
                if( ( curline.contains("m=application") ) ) {
			if(ipaddress.contains("0.0.0.0") || ipaddress.contains("::0") || forceHold){;
                	     	status = (int) SipCall::putMeOnHold;
				setExtHost(ipaddress);
				holdMe = true;
			} else {
				setExtHost(ipaddress);
                        	setExtPort(curline.section(' ',1,1));
				transT=curline.section(' ',2,2);
				sec=curline.section(' ',3,3);
				status = checkVectorId(status,sec); // find the load type
				call->setRemoteStart(false); //
				if(status==0){
					return  doReturn (status); // error
				}
				if(!testTrans(status,transT))  return  doReturn (0);
				
			}
		}                
		if( curline.contains("a=")) {
			if (curline.contains("a=sendonly") || curline.contains("a=inactive") || curline.contains("a=recvonly") ) {
                    	    status = (int) SipCall::putMeOnHold;
			    if( curline.contains("a=sendonly")) {
			    setRecvonly(true);
			    }
			    if(KStatics::haveIPv6){
				setExtHost( "::0");
			    } else { 
				setExtHost("0.0.0.0");
			    }
    			    return  doReturn (status);
			}
			if (holdMe) {
			    return  doReturn (status); //hold was detected by ipaddress
			}
 
			//
			if (curline.contains("a=fmtp:" + sec) ) {// we have a=vec or a=cmd
				if(curline.contains("rstart")) {
				call->setRemoteStart(true); 
				return  doReturn (status);
				}
			}
			// we look for audio and video
			if( curline.contains("a=rtpmap")) {
				isRtpMap++;
				codecstr=curline.section(' ',1,1);
				codecstr1=curline.section(':',1,1);
				codecstr2=codecstr1.section(' ',0,0);
				// STORE RECEIVED MEDIA ATTRIBUTES
				bool concerningAudio = false;
				// search for audio
				i=0;
				while (  i<receivedAudioMediaNumber) {
					if (codecstr2 == acc[i]) {
						acstr[i] = codecstr.section('/',0,0);
						concerningAudio = true;
						break;
					} 
					i++;
				}
                     		// search for video, if not audio
				if (concerningAudio == false) {
					for (i=0; i<receivedVideoMediaNumber; i++) {
						if (codecstr2 == vcc[i]) {
							vcstr[i] = codecstr.section('/',0,0);
							break;
						}
					}	
				}
    			}
			if ( curline.contains("a=fmtp:97")) {
			// looks strange, but works, as only ILBC uses responsePay
			    if ( curline.contains ("mode=30") ) tempresponsepay = 240;
			    if ( curline.contains ("mode=20") ) tempresponsepay = 160;
			
			}
		}
	} // END OF WHILE-LOOP
	if( (isRtpMap<receivedAudioMediaNumber) && ( evaluateA || evaluateV || evaluateAV) ){
	    for(i=0;i<=receivedAudioMediaNumber;i++) {
		for(j=0;j<=NAUDIO;j++) {
		    if (acc[i] == sessionC->getACodecNum(j) ) {
			if(acstr[i] == "" )acstr[i] = sessionC->getACodecName(j);
			break;
		    }
		}
	    }

	    for(i=0;i<=receivedVideoMediaNumber;i++) {
		for(j=0;j<=NAUDIO;j++) {
		    if (vcc[i] == sessionC->getCodecNum(j) ) {
			    vcstr[i] = sessionC->getCodecName(j);
			    break;
		    }	
		}
	    }
	}

	if( evaluateV || evaluateAV) {


	// *** VIDEO ***
		if (videoMediaNegotiationINVITE(receivedVideoMediaNumber) == false) {
        		status=0;     // no good codec for us; audiocheck is not necessary any longer
			return  doReturn (status);
		}
	}
	if( evaluateA || evaluateAV) {
    	// *** AUDIO ***
        	if (audioMediaNegotiationINVITE(receivedAudioMediaNumber) == false) {
            		status=0;     // no good codec for us;
			return  doReturn (status);
		}
	}
	// We have a good Codec
	return  doReturn (status);
}
Пример #3
0
void Interpreter::executeFun(uint16_t id)
{

	_bc = ((BytecodeFunction*)_code->functionById(id))->bytecode();
    _insPtr = 0;

	Instruction inst;
    while (true) {
    	inst = nextInsn();
    	//cout << "Current instruction " << inst << endl;
    	//cout << "__STACK:" << endl;
        //printStack();
        switch (inst) {

            case BC_INVALID:
                _out << inst << " Invalid instruction" << endl;
                assert(false);
            	break;
        	case BC_DLOAD:

        		loadDouble();
        		break;
        	case BC_ILOAD:
                loadInt();
        		break;
        	case BC_SLOAD:
                loadString();
        		break;
        	case BC_DLOAD0:

        		_out << inst << " Not implemented" << endl;
        		assert(false);
        		break;
        	case BC_ILOAD0:
            	pushInt(0);
        		break;
        	case BC_SLOAD0:

        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_DLOAD1:

        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_ILOAD1:
                pushInt(1);
            	break;
        	case BC_DLOADM1:

        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_ILOADM1:
        		pushInt(-1);
        		break;
        	case BC_DADD:
        		addDoubles();
        		break;
        	case BC_IADD:
                addInts();
            	break;
        	case BC_DSUB:

        		subDoubles();
        		break;
        	case BC_ISUB:
                subInts();
        		break;
        	case BC_DMUL:
                dMul();
        		break;
        	case BC_IMUL:
                iMul();
        		break;
        	case BC_DDIV:
        		divDoubles();
        		break;
        	case BC_IDIV:
        		divInts();
        		break;
        	case BC_IMOD:

        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_DNEG:
        		dNeg();
        		break;
        	case BC_INEG:
        		iNeg();
        		break;
        	case BC_IPRINT:
        		printInt();
        		break;
        	case BC_DPRINT:
                printDouble();
        		break;
        	case BC_SPRINT:
        		printString();
        		break;
        	case BC_I2D:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_D2I:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_S2I:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_SWAP:
                swap();
        		break;
        	case BC_POP:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_LOADDVAR0:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_LOADDVAR1:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_LOADDVAR2:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_LOADDVAR3:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_LOADIVAR0:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_LOADIVAR1:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_LOADIVAR2:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_LOADIVAR3:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_LOADSVAR0:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_LOADSVAR1:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_LOADSVAR2:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_LOADSVAR3:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_STOREDVAR0:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_STOREDVAR1:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_STOREDVAR2:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_STOREDVAR3:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_STOREIVAR0:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_STOREIVAR1:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_STOREIVAR2:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_STOREIVAR3:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_STORESVAR0:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_STORESVAR1:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_STORESVAR2:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_STORESVAR3:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_LOADDVAR:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_LOADIVAR:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_LOADSVAR:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_STOREDVAR:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_STOREIVAR:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_STORESVAR:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_LOADCTXDVAR:
                loadCtxDouble();
        		break;
        	case BC_LOADCTXIVAR:
                loadCtxInt();
        		break;
        	case BC_LOADCTXSVAR:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_STORECTXDVAR:
        		storeCtxDouble();
            	break;
        	case BC_STORECTXIVAR:
                storeCtxInt();
        		break;
        	case BC_STORECTXSVAR:
        		_out << inst << " STORE STRING ? Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_DCMP:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_ICMP:
                compareInts();
        		break;
        	case BC_JA:
                jumpAlways();
        		break;
        	case BC_IFICMPNE:
        		intsNotEqualJMP();
        		break;
        	case BC_IFICMPE:
                intsEqualJMP();
        		break;
        	case BC_IFICMPG:
        		GJump();
        		break;
        	case BC_IFICMPGE:
        		GEJump();
        		break;
        	case BC_IFICMPL:
        		//cout << "IFLESS" << endl;
                assert(false);
        		break;
        	case BC_IFICMPLE:
        	    LEJump();
        	    break;
        	case BC_DUMP:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_STOP:
        		this->popContext();
        		return;
        	case BC_CALL:
        		//cout << "CALLING. STACK SIZE: " << _stack.size() << endl;
        		call();
        		break;
        	case BC_CALLNATIVE:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	case BC_RETURN:
        		doReturn();
        		break;
        	case BC_BREAK:
        		_out << inst << " Not implemented" << endl;
                exit(EXIT_FAILURE);
            	break;
        	default:
                _out << "Bad instruction" << endl;
         		break;
        }




    }

    this->popContext();
}
Пример #4
0
static COLDFIRE_DISPATCH_FN(morphRTS)     {doReturn(info->instruction, info->thisPC, False, info->instrSize, info->type);}