Esempio n. 1
0
char *AHTMODEL::GetAHTOption( char *name )
{
    if (tstrcmp(name,"flag")) {
        sprintf( s_flag, "%d", GetFlag() );
        return s_flag;
    }
    if (tstrcmp(name,"glid")) {
        sprintf( s_glid, "%d", GetGlobalId2() );
        return s_glid;
    }
    if (tstrcmp(name,"name")) {
        return GetName();
    }
    if (tstrcmp(name,"class")) {
        return GetClass();
    }
    if (tstrcmp(name,"author")) {
        return GetAuthor();
    }
    if (tstrcmp(name,"ver")) {
        return GetVersion();
    }
    if (tstrcmp(name,"icon")) {
        return GetIconFile();
    }
    if (tstrcmp(name,"exp")) {
        return exp->GetBuffer();
    }
    if (tstrcmp(name,"source")) {
        return fname;
    }
    if (tstrcmp(name,"helpkw")) {
        return GetHelpKeyword();
    }
    return (char *)&dummy;
}
Esempio n. 2
0
bool CNotificationKodi::SendMessageImplementation(
	const uint64_t Idx,
	const std::string &Name,
	const std::string &Subject,
	const std::string &Text,
	const std::string &ExtraData,
	const int Priority,
	const std::string &Sound,
	const bool bFromNotification)
{
	std::string	sSubject("Domoticz");
	if (Subject != Text)
	{
		sSubject = Subject;
	}
	else
	{
		size_t	posDevice = ExtraData.find("|Name=");
		if (posDevice != std::string::npos)
		{
			posDevice+=6;
			sSubject = ExtraData.substr(posDevice, ExtraData.find("|", posDevice)-posDevice);
		}
	}

	std::string	sIconFile = GetIconFile(ExtraData);

	// Loop through semi-colon separated IP Addresses
	std::vector<std::string> results;
	StringSplit(_IPAddress, ";", results);
	for (int i=0; i < (int)results.size(); i++)
	{
		std::stringstream logline;
		logline << "Kodi Notification (" << results[i] << ":" << _Port << ", TTL " << _TTL << "): " << sSubject << ", " << Text << ", Icon " << sIconFile;
		_log.Log(LOG_NORM, "%s", logline.str().c_str());

		CAddress	_Address;
		int			_Sock;
		bool		bMulticast = (results[i].substr(0,4) >= "224.") && (results[i].substr(0,4) <= "239.");

		CAddress my_addr(results[i].c_str(), _Port);
		_Address = my_addr;
		_Sock = -1;
		if (bMulticast) {
			_Sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
			setsockopt(_Sock, IPPROTO_IP, IP_MULTICAST_TTL, (const char*)&_TTL, sizeof(_TTL));
			u_char loop = 1;
			setsockopt(_Sock, IPPROTO_IP, IP_MULTICAST_LOOP, (const char*) &loop, sizeof(loop));
		}
		else {
			_Sock = socket(AF_INET, SOCK_DGRAM, 0);
		}
		
		if (_Sock < 0)
		{
			logline << "Error creating socket: " << results[i] << ":" << _Port;
			_log.Log(LOG_ERROR, "%s", logline.str().c_str());
			return false;
		}

		_Address.Bind(_Sock);

		CPacketNOTIFICATION packet(sSubject.c_str(), Text.c_str(), ICON_PNG, (!sIconFile.empty())?sIconFile.c_str():NULL);
		if (!packet.Send(_Sock, _Address)) {
			std::stringstream logline;
			logline << "Error sending notification: " << results[i] << ":" << _Port;
			_log.Log(LOG_ERROR, "%s", logline.str().c_str());
			return false;
		}
	}
	return true;
}