Esempio n. 1
0
void lmcMessaging::start(void) {
	lmcTrace::write("Messaging started");
	pNetwork->start();

	sendBroadcast(MT_Depart, NULL);
	sendBroadcast(MT_Announce, NULL);
}
Esempio n. 2
0
void CAimProto::avatar_request_handler(HANDLE hContact, char* hash, unsigned char type)//checks to see if the avatar needs requested
{
	if (hContact == NULL)
	{
		hash = hash_lg ? hash_lg : hash_sm;
		type = hash_lg ? 12 : 1;
	}

	char* saved_hash = getSetting(hContact, AIM_KEY_AH);
	if (hash && _stricmp(hash, "0201d20472") && _stricmp(hash, "2b00003341")) //gaim default icon fix- we don't want their blank icon displaying.
	{
		if (_strcmps(saved_hash, hash))
		{
			setByte(hContact, AIM_KEY_AHT, type);
			setString(hContact, AIM_KEY_AH, hash);

			sendBroadcast(hContact, ACKTYPE_AVATAR, ACKRESULT_STATUS, NULL, 0);
		}
	}
	else
	{
		if (saved_hash)
		{
			deleteSetting(hContact, AIM_KEY_AHT);
			deleteSetting(hContact, AIM_KEY_AH);

			sendBroadcast(hContact, ACKTYPE_AVATAR, ACKRESULT_STATUS, NULL, 0);
		}
	}
	mir_free(saved_hash);
}
Esempio n. 3
0
void lmcMessaging::update(void) {
	lmcTrace::write("Refreshing contacts list...");
	sendBroadcast(MT_Announce, NULL);

	for(int index = 0; index < userList.count(); index++)
		sendMessage(MT_Ping, &userList[index].id, NULL);
}
Esempio n. 4
0
void CAimProto::avatar_retrieval_handler(const char* sn, const char* hash, const char* data, int data_len)
{
	bool res = false;
	PROTO_AVATAR_INFORMATIONT AI = {0};
	AI.cbSize = sizeof(AI);

	AI.hContact = contact_from_sn(sn);
	
	if (data_len > 0)
	{
		const TCHAR *type; 
		AI.format = detect_image_type(data, type);
		get_avatar_filename(AI.hContact, AI.filename, SIZEOF(AI.filename), type);

		int fileId = _topen(AI.filename, _O_CREAT | _O_TRUNC | _O_WRONLY | O_BINARY,  _S_IREAD | _S_IWRITE);
		if (fileId >= 0)
		{
			_write(fileId, data, data_len);
			_close(fileId);
			res = true;

			char *my_sn = getSetting(AIM_KEY_SN);
			if (!_strcmps(sn, my_sn))
				CallService(MS_AV_REPORTMYAVATARCHANGED, (WPARAM)m_szModuleName, 0);
			mir_free(my_sn);
		}
//            else
//			    ShowError("Cannot set avatar. File '%s' could not be created/overwritten", file);
	}
	else
		LOG("AIM sent avatar of zero length for %s.(Usually caused by repeated request for the same icon)", sn);

	sendBroadcast(AI.hContact, ACKTYPE_AVATAR, res ? ACKRESULT_SUCCESS : ACKRESULT_FAILED, &AI, 0);
}
Esempio n. 5
0
void wavrMessaging::start(void) {
    wavrTrace::write("Messaging started");
    pNetwork->start();

   // sendBroadcast(MT_Depart, NULL); Make sure you are not already listed, hence send depart message
    sendBroadcast(MT_Announce, NULL);
}
Esempio n. 6
0
void __cdecl CAimProto::aim_dc_helper(void* param) //only called when we are initiating a direct connection with someone else
{
	file_transfer *ft = (file_transfer*)param;	

	sendBroadcast(ft->hContact, ACKTYPE_FILE, ACKRESULT_CONNECTED, ft, 0);

	NETLIBPACKETRECVER packetRecv = {0};
	packetRecv.cbSize = sizeof(packetRecv);
	packetRecv.dwTimeout = 350000;

	HANDLE hServerPacketRecver = (HANDLE) CallService(MS_NETLIB_CREATEPACKETRECVER, (WPARAM)ft->hConn, 2048 * 4);

	int result;
	if (ft->sending)//we are sending
		result = sending_file(ft, hServerPacketRecver, packetRecv);
	else 
		result = receiving_file(ft, hServerPacketRecver, packetRecv);

	Netlib_CloseHandle(hServerPacketRecver);
	Netlib_CloseHandle(ft->hConn);
	ft->hConn = NULL;

	if (result == 0)
	{
		sendBroadcast(ft->hContact, ACKTYPE_FILE, ACKRESULT_SUCCESS, ft, 0);
	}
	else
	{
		if (!ft->requester && result == 1 && !Miranda_Terminated())
		{
			ft->accepted = false;
			HANDLE hConn = aim_peer_connect(AIM_PROXY_SERVER, get_default_port());
			if (hConn) 
			{
				LOG("Connected to proxy ip because we want to use a proxy for the file transfer.");
				ft->requester = true;
				ft->hConn = hConn;
				ForkThread(&CAimProto::aim_proxy_helper, ft);
				return;
			}
		}
		aim_file_ad(hServerConn, seqno, ft->sn, ft->icbm_cookie, true, 0);
		sendBroadcast(ft->hContact, ACKTYPE_FILE, ACKRESULT_FAILED, ft, 0);
	}

	ft_list.remove_by_ft(ft);
}
Esempio n. 7
0
void boardRegThread::run()
{
    can_fd = open("/dev/can", O_RDWR);
    if(can_fd < 0)
    {
        qDebug()<<"in boardreg thread: can't open  can_dev ,can_fd = "<< can_fd <<endl;
        emit regFault();
        return;
    }
    else
        qDebug() <<"In boardRegThread:in boardreg thread: open  can_dev successfully!,can_fd = "<< can_fd <<endl;

    emit regStart();//start ,1 means nothing...forget it .just for the following board info show.
    //it is signal and slot.see regStartMessage()in boardRegDialog
    qDebug() << "board registing start..." << endl;

    if(isSingleBoardRegFlag)
    {
        signalBoardReg(singleBoardNum);
        updateBoardRegFlagToDB(singleBoardNum);
        close(can_fd);
        emit singleRegOver(singleBoardNum);
        qDebug() <<"In boardRegThread:emit singleRegOver signal--- board-flag is :"<< boardRegFlag[singleBoardNum -1];
        //after single board regover,isSingleBoardRegFlag=false
        isSingleBoardRegFlag = false;
    }
    else
    {
        i = 1;//boardnum ,use as global variable
        boardRegSum = 0;
        memset(&boardRegFlag,0,sizeof(boardRegFlag));

        sendBroadcast();

        /****   single board request registration information command frame */
        for( i = 1; i <= BOARDMAXINUM ; i++ )//i = 1; i <= BOARDMAXINUM ; i++
        {
            signalBoardReg(i);
        }

        //   if( !isReRegisterFlag )
        //   {
        saveBoardRegFlagToDB(boardRegFlag);
        close(can_fd);
        emit(regAllOver(boardRegSum));
        qDebug() <<"In boardRegThread:emit regAllOver signal-----total registerd board number is :"<< boardRegSum;

        //    }
        //    else
        //    {
        //        close(can_fd);
        //        qDebug()<<"IN boardRegThread::run():response system reset !";
        //    }
        //     qDebug()<<"IN boardRegThread::run(): run() !";
    }

}
Esempio n. 8
0
void lmcMessaging::stop(void) {
    sendBroadcast(MT_Depart, NULL);
	pNetwork->stop();

	pSettings->setValue(IDS_STATUS, localUser->status);
	pSettings->setValue(IDS_AVATAR, localUser->avatar);

	saveGroups();

	lmcTrace::write("Messaging stopped");
}
Esempio n. 9
0
/* tryLocate() only attempts to get an UDP datagrame and parse IP:port from it, does not actually
 * attempt to connect to server (this is a non-blocking call that returns immediately), the
 * connecting attempt is made by its caller, Lemma::tryConnectingWithMaestro()
 */
void MaestroLocater::tryLocate()
{
  if (!locating) { begin(); }

  if (millis() - lastBroadcastMillis > 2000) {
    sendBroadcast();
    lastBroadcastMillis = millis();    
  }


  /* udpClient is instance of EthernetUDP class, passed to constructor, the parsePacket() function
   * checks for the presence of a UDP packet, and reports the size. parsePacket() must be called
   * before reading the buffer with UDP.read(packetBuffer, MaxSize)
   */
  if( udpClient.parsePacket() )
  {
    char packet[RX_BUF_MAX_SIZE];
    size_t bytesRead = udpClient.read( packet, RX_BUF_MAX_SIZE );
    packet[bytesRead] = 0;

    PRINT_FUNCTION_PREFIX;
    Serial.print("raw datagram: ");
    Serial.println(packet);

    char name[128];
    if ( MessageParser::parsePolo( &packet[0], name, 128, port ) )
    {
      PRINT_FUNCTION_PREFIX;
      Serial.println("captured valid UDP datagram");

      address = udpClient.remoteIP();
      sprintf( ip, "%d.%d.%d.%d", address[0], address[1], address[2], address[3] );

      PRINT_FUNCTION_PREFIX;
      Serial.print("IP from UDP datagram: ");
      Serial.println(ip);
      PRINT_FUNCTION_PREFIX;
      Serial.print("port from UDP datagram: ");
      Serial.println(port);
      udpClient.stop();
      locating = false;
    }
    else
    {
      PRINT_FUNCTION_PREFIX;
      Serial.println("not a valid UDP datagram from Noam server broadcast");

      port = 0;
    }
  }
}
Esempio n. 10
0
MainWindow::MainWindow(EndpointManager* endpointManager, QWidget* parent)
	: QWidget(parent), mEndpointManager(endpointManager)
{
	connect(mEndpointManager, SIGNAL(failedToConnectToEndpoint(MessageEndpoint*, ConnectionError)), this, SLOT(endpointFailedToConnect(MessageEndpoint*, ConnectionError)));

	mLayout = new QVBoxLayout(this);
	setLayout(mLayout);

	mLocalIdentityWidget = new LocalIdentityWidget(mEndpointManager, this);
	mLayout->addWidget(mLocalIdentityWidget);

	mConnectToEndpointButton = new QPushButton("+", this);
	connect(mConnectToEndpointButton, SIGNAL(clicked()), this, SLOT(connectToEndpoint()));
	mLayout->addWidget(mConnectToEndpointButton);

	mBroadcastForEndpointsButton = new QPushButton("Find Local Clients", this);
	connect(mBroadcastForEndpointsButton, SIGNAL(clicked()), mEndpointManager, SLOT(sendBroadcast()));
	mLayout->addWidget(mBroadcastForEndpointsButton);

	mEndpointListWidget = new EndpointListWidget(mEndpointManager, this);
	mLayout->addWidget(mEndpointListWidget);
}
Esempio n. 11
0
void __cdecl CAimProto::aim_proxy_helper(void* param)
{
	file_transfer *ft = (file_transfer*)param;

	if (ft->requester) 
	{
		if (proxy_initialize_send(ft->hConn, username, ft->icbm_cookie))
			return;//error
	}
	else
	{
		if (proxy_initialize_recv(ft->hConn, username, ft->icbm_cookie, ft->port)) 
			return;//error
	}

	//start listen for packets stuff
	NETLIBPACKETRECVER packetRecv = {0};
	packetRecv.cbSize = sizeof(packetRecv);
	packetRecv.dwTimeout = INFINITE;

	HANDLE hServerPacketRecver = (HANDLE) CallService(MS_NETLIB_CREATEPACKETRECVER, (WPARAM)ft->hConn, 2048 * 4);
	for (;;)
	{
		int recvResult = CallService(MS_NETLIB_GETMOREPACKETS, (WPARAM)hServerPacketRecver, (LPARAM)&packetRecv);
		if (recvResult == 0) 
		{
			sendBroadcast(ft->hContact, ACKTYPE_FILE, ACKRESULT_FAILED, ft, 0);
			break;
		}
		if (recvResult == SOCKET_ERROR) 
		{
			sendBroadcast(ft->hContact, ACKTYPE_FILE, ACKRESULT_FAILED, ft, 0);
			break;
		}
		if (recvResult > 0) 
		{
			unsigned short length = _htons(*(unsigned short*)&packetRecv.buffer[0]);
			packetRecv.bytesUsed = length + 2;
			unsigned short type = _htons(*(unsigned short*)&packetRecv.buffer[4]);
			if (type == 0x0001)
			{
				unsigned short error = _htons(*(unsigned short*)&packetRecv.buffer[12]);
				switch (error)
				{
				case 0x000D:
					ShowPopup("Proxy Server File Transfer Error: Bad Request.", ERROR_POPUP);
					break;

				case 0x0010:
					ShowPopup("Proxy Server File Transfer Error: Initial Request Timed Out.", ERROR_POPUP);
					break;

				case 0x001A:
					ShowPopup("Proxy Server File Transfer Error: Accept Period Timed Out.", ERROR_POPUP);
					break;

				case 0x000e:
					ShowPopup("Proxy Server File Transfer Error: Incorrect command syntax.", ERROR_POPUP);
					break;

				case 0x0016:
					ShowPopup("Proxy Server File Transfer Error: Unknown command issued.", ERROR_POPUP);
					break;
				}

			}
			else if (type == 0x0003)
			{
				unsigned short port = _htons(*(unsigned short*)&packetRecv.buffer[12]);
				unsigned long  ip   = _htonl(*(unsigned long*)&packetRecv.buffer[14]);
				
				aim_send_file(hServerConn, seqno, ip, port, true, ft);
				LOG("Stage %d Proxy ft and we are not the sender.", ft->req_num);
			}
			else if (type == 0x0005) 
			{
				if (!ft->requester) 
				{
					aim_file_ad(hServerConn, seqno, ft->sn, ft->icbm_cookie, false, ft->max_ver);
					ft->accepted = true;
				}

				sendBroadcast(ft->hContact, ACKTYPE_FILE, ACKRESULT_CONNECTED, ft, 0);

				int i;
				for (i = 21; --i; )
				{
					if (Miranda_Terminated()) return;
					Sleep(100);
					if (ft->accepted) break;
				}
				if (i == 0) 
				{
					sendBroadcast(ft->hContact, ACKTYPE_FILE, ACKRESULT_FAILED, ft, 0);
					break;
				}

				packetRecv.dwTimeout = 350000;

				int result;
				if (ft->sending)//we are sending
					result = sending_file(ft, hServerPacketRecver, packetRecv);
				else 
					result = receiving_file(ft, hServerPacketRecver, packetRecv);

				sendBroadcast(ft->hContact, ACKTYPE_FILE, result ? ACKRESULT_FAILED : ACKRESULT_SUCCESS, ft, 0);
				break;
			}
		}
	}
	Netlib_CloseHandle(hServerPacketRecver);
	Netlib_CloseHandle(ft->hConn);

	ft_list.remove_by_ft(ft);
}
void NotificationManager::sendNotification(int msg)
{
    //LOGD("---test---,sendNotification(%d)", msg);
    sendBroadcast(&msg, sizeof(msg));
}