Esempio n. 1
0
void MediaUpload::sendMedia(QString jid, FMessage message)
{
    MediaDescriptor descriptor;

    descriptor.waType = (FMessage::MediaWAType) message.media_wa_type;
    descriptor.extension = Utilities::getExtension(message.media_name);
    descriptor.duration = message.media_duration_seconds;
    descriptor.contentType =
            message.media_mime_type.isEmpty() ?
                Utilities::guessMimeType(descriptor.extension) :
                message.media_mime_type;
    descriptor.localFileUri = message.media_name;
    descriptor.url = message.media_url;
    descriptor.upload = (message.status == FMessage::Uploading);
    descriptor.live = message.live;

    switch (descriptor.waType)
    {
        case FMessage::Image:
            sendPicture(jid, descriptor);
            break;

        case FMessage::Video:
            sendVideo(jid, descriptor);
            break;

        case FMessage::Audio:
            sendMedia(jid, descriptor);

        default:
            break;
    }
}
Esempio n. 2
0
void sendSingle(void) {
	sendText();
	if (estgbconf.imgfile)
		sendPicture(estgbconf.imgfile);
	if (estgbconf.videofile)
		sendVideo(estgbconf.videofile);
	if (estgbconf.audiofile)
		sendAudio(estgbconf.audiofile);
	if (estgbconf.docfile)
		sendDocument(estgbconf.docfile);
}
Esempio n. 3
0
Call::Call(int callId, QString myName)
{
#ifdef REN_DEBUG
	qWarning(QString("Call::Call(int %1, QString %2)").arg(callId).arg(myName));
#endif
	id = callId;
	sd = -1;

	dec_state = NULL;
	dec_state = speex_decoder_init(&speex_uwb_mode);
	// renyang - Initializes and allocates resources for a SpeexBits struct
	speex_bits_init(&bits);

	int enh = 1;
	speex_decoder_ctl(dec_state, SPEEX_SET_ENH, &enh);
	speex_decoder_ctl(dec_state, SPEEX_GET_FRAME_SIZE, &frame_size);

	if ((outBuffer = (float *) malloc(frame_size*4*sizeof(float)))==NULL)
		throw Error(Error::IHU_ERR_MEMORY);
	if ((soundBuffer = (float *) malloc(MAXBUFSIZE*sizeof(float)))==NULL)
		throw Error(Error::IHU_ERR_MEMORY);
	readyFrames = 0;

	rsa = new Rsa(RSA_STRENGTH);
	transmitter = new Transmitter(rsa);
	receiver = new Receiver(rsa);
	// renyang-modify 建立一個ip handler
	sctpiphandler = new SctpIPHandler();

	// renyang-modify - 當某一個ip沒有一段時間後, 沒有辦法收到data, 要處理
	connect(sctpiphandler,SIGNAL(SigAddressConfrim(QString)),this,SLOT(SlotAddressConfirm(QString)));
	// renyang-modify - 當多次沒有收到資料, 宣告這一個ip失聯
	connect(sctpiphandler,SIGNAL(SigAddressFail(QString)),this,SLOT(SlotAddressFail(QString)));
	// renyang-modify - 某一個ip有收到資料, 宣告這一個ip復活啦
	connect(sctpiphandler,SIGNAL(SigAddressAvailable(QString)),this,SLOT(SlotAddressAvailable(QString)));

	stopTimer = new QTimer(this);

	active = false;
	muteRec = false;
	mutePlay = false;
	callFree = true;
	aborted = false;
	recording = false;

	// renyang-modify - 初始化IPChanging, 表示最近沒有改變primary address
	IPChanging = false;
	// renyang-modify - 建立一個Timer來計數改完primary address後多久要改回IPChanging=false
	IPChangingTimer = new QTimer(this);
	connect(IPChangingTimer,SIGNAL(timeout()),this,SLOT(resetIPChanging()));

	// renyang-modify - 初始化傳送與接收image的index
	recvImage_index = sendImage_index = 0;

	transmitter->setMyName(myName);

	srand(time(NULL));

	connect( receiver, SIGNAL(newSocket(int,int,struct sockaddr_in)), this, SLOT(newConnection(int,int,struct sockaddr_in)) );
	connect( receiver, SIGNAL(keyRequest()), this, SLOT(sendKeyRequest()) );
	connect( receiver, SIGNAL(sendNewKey()), this, SLOT(sendKey()) );
	connect( receiver, SIGNAL(newKey(QString)), this, SLOT(receivedNewKey(QString)) );
	// renyang - 沒有再接收到client端傳送過來的訊息, 結束此Call
	connect( receiver, SIGNAL(finishSignal()), this, SLOT(stopCall()) );
	connect( receiver, SIGNAL(error(QString)), this, SLOT(abortCall(QString)) );
	connect( receiver, SIGNAL(warning(QString)), this, SLOT(warning(QString)) );
	connect( receiver, SIGNAL(message(QString)), this, SLOT(warning(QString)) );
	// renyang - 對方接受通話, 或是本地端接受通話
	connect( receiver, SIGNAL(connectedSignal()), this, SLOT(connected()) );
	connect( receiver, SIGNAL(ringSignal()), this, SLOT(playRing()) );
	connect( receiver, SIGNAL(initSignal()), this, SLOT(playInit()) );
	connect( receiver, SIGNAL(newAudioData(char*, int)), this, SLOT(decodeAudioData(char*, int)) );
	connect( receiver, SIGNAL(ringReplySignal()), transmitter, SLOT(sendRingReplyPacket()) );

	// renyang-modify - 接收由receiver傳送上來的peer address
	connect (receiver,SIGNAL(SignalgetIps(QStringList)),this,SLOT(SlotgetIps(QStringList)));
	// renyang-modify - 當Receiver接收到與之前的primary不同時, 要求改變primary address
	connect (receiver,SIGNAL(setPrimaddrSignal(QString)),this,SLOT(setPrimaddr(QString)));
	// renyang-modify - 當Receiver接收到事件時, 會通知上層的Call, 以便修改CallTab的ip list情況
	connect (receiver,SIGNAL(SigAddressEvent(QString,QString)),this,SLOT(SlotAddressEvent(QString,QString)));
	// renyang-modify - 對方要求影像
	connect (receiver,SIGNAL(requestImage()),this,SLOT(SlotGetImage()));
	// renyang-modify - 由receiver接收到image資料, 並處理這一些資料
	connect (receiver,SIGNAL(newVideoData(char *,int)),this,SLOT(decodeVideoData(char *,int)));
	// renyang-modify - 當收到想要接收目前封包的下一部分時...
	connect (receiver,SIGNAL(requestNextImage()),this,SLOT(sendVideo()));
	// renyang-modify - 接收到完整的image,準備把它放到video_label
	connect (receiver,SIGNAL(completeImage()),this,SLOT(processImage()));
	// renyang-modify - 跟對方要求影像失敗
	connect (receiver,SIGNAL(requestImageFail()),this,SLOT(SlotrequestImageFail()));
	// renyang-modify - end

	connect( transmitter, SIGNAL(ringMessage()), this, SLOT(ringMessage()) );
	connect( transmitter, SIGNAL(finishSignal()), this, SLOT(stopCall()) );
	connect( transmitter, SIGNAL(error(QString)), this, SLOT(abortCall(QString)) );
	connect( transmitter, SIGNAL(message(QString)), this, SLOT(message(QString)) );
	connect( transmitter, SIGNAL(startSignal()), this, SLOT(startRecorder()) );

	connect( stopTimer, SIGNAL(timeout()), this, SLOT(close()) );

	// renyang-modify - 初始化streamno
	streamno = 1;

}
Esempio n. 4
0
//Connection protocol handler
void *connection_handler(void *arg) {
	int value;
	int len = 8*10;
	char *buff = (char*)malloc(len); //Command buffer
	//send_policy_file(data_child);
	while(client_connected) {
		freenect_network_read(buff, &len);
		//If command length is multiple of 6
		if(len > 0 && len % 6 == 0){
			//Get the number of commands received
			int max = len / 6;
			int i;
			//For each command received
			for(i = 0; i < max; i++){
				memcpy(&value, &buff[2 + (i*6)], sizeof(int));
				value = ntohl(value);
				//The BIG switch (Communication protocol)
				switch(buff[0 + (i*6)]){
					case 0: //CAMERA
						switch(buff[1 + (i*6)]){
							case 0: //GET DEPTH
								sendDepth();
							break;
							case 1: //GET RAW DEPTH
								sendRawDepth();
							break;
							case 2: //GET RGB
								sendVideo();
							break;
							case 3: //Mirror depth
								_depth_mirrored = value;
							break;
							case 4: //Mirror video
								_video_mirrored = value;
							break;
							case 5: //Min depth
								_min_depth = value;
							break;
							case 6: //Max depth
								_max_depth = value;
							break;
							case 7: //Depth compression
								_depth_compression = value;
							break;
							case 8: //Video compression
								_video_compression = value;
							break;
						}
					break;
					case 1: //MOTOR
						switch(buff[1 + (i*6)]){
							case 0: //MOVE
								freenect_sync_set_tilt_degs(value, 0);
							break;
							case 1: //LED COLOR
								freenect_sync_set_led((freenect_led_options) value, 0);
							break;
							case 2: //Accelerometer
								sendAccelerometers();
							break;
						}
					break;
				}
			}
		} else { //Command was not multiple of 6 (we received an invalid command)
			if(!die) printf("got bad command (%d)\n", len	);
			client_connected = 0;
		}
	}
	if(!die) {
		printf("Disconecting client...\n");
		freenect_network_wait();
		//waiting for client led status
		freenect_sync_set_led((freenect_led_options) 4, 0);
	}
	return NULL;
}
Esempio n. 5
0
//Connection protocol handler
void *connection_handler(void *arg) {
	int n, value;
	//send_policy_file(data_child);
	while(client_connected) {
		char buff[8*10]; //Command buffer
		#ifdef WIN32 //Listen for data (Winsock)
			n = recv(data_client_socket, (char*)buff, sizeof(buff), 0);
		#else //Listen for data (UNIX)
			n = read(data_child, buff, sizeof(buff));
		#endif
		//If command length is multiple of 6
		if(n > 0 && n % 6 == 0){
			//Get the number of commands received
			int max = n / 6;
			int i;
			//For each command received
			for(i = 0; i < max; i++){
				memcpy(&value, &buff[2 + (i*6)], sizeof(int));
				value = ntohl(value);
				//The BIG switch (Communication protocol)
				switch(buff[0 + (i*6)]){
					case 0: //CAMERA
						switch(buff[1 + (i*6)]){
							case 0: //GET DEPTH
								sendDepth();
							break;
							case 1: //GET RGB
								sendVideo();
							break;
							case 2: //Mirror depth
								_depth_mirrored = value;
							break;
							case 3: //Mirror video
								_video_mirrored = value;
							break;
							case 4: //Min depth
								_min_depth = value;
							break;
							case 5: //Max depth
								_max_depth = value;
							break;
						}
					break;
					case 1: //MOTOR
						switch(buff[1 + (i*6)]){
							case 0: //MOVE
								freenect_sync_set_tilt_degs(value, 0);
							break;
							case 1: //LED COLOR
								freenect_sync_set_led((freenect_led_options) value, 0);
							break;
							case 2: //Accelerometer
								sendAccelerometers();
							break;
						}
					break;
				}
			}
		} else { //Command was not multiple of 6 (we received an invalid command)
			printf("got bad command (%d)\n", n);
			client_connected = 0;
		}
	}
	printf("Disconecting client...\n");
	//waiting for client led status
	freenect_sync_set_led((freenect_led_options) 4, 0);
	return NULL;
}