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; }
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; }