/* * GnuDialer - Complete, free predictive dialer * * Complete, free predictive dialer for contact centers. * * Copyright (C) 2003-2008, GnuDialer Project * * Heath Schultz * Richard Lyman * * This program is free software, distributed under the terms of * the GNU General Public License. * * table BLACKLIST (id,phone) required * * exten example * exten => _X.,n,AGI(blacklist.agi|${CALLERID(num)},${CALLERID(dnid)},goodbye) * CREATE TABLE `BLACKLIST` ( `id` int(11) unsigned NOT NULL auto_increment, `phone` varchar(15) NOT NULL default '', PRIMARY KEY (`id`), UNIQUE KEY `phone` (`phone`) ) TYPE=MyISAM COMMENT='Blacklist'; */ #include #include #include #include #include #include #include #include #include #include "itos.h" #include "stoi.h" int main(int argc, char **argv, char **envp) { std::string message,clid,dnid,response; std::string blacklist = "FALSE"; std::string playfile = ""; int d = 0; int counter = 0; int level = 0; int hits = 0; message = "blacklist lookup - Munch'D by Richard - version 1.2 - requires AGI(blacklist.agi|clid,dnid[,playfile])"; level = 3; std::cout << "VERBOSE \"" << message << "\" " << level << std::endl; std::cin >> response; for (int i = 1; i < argc; i++) { if (i == 1) { clid = argv[i]; std::cout << "SET VARIABLE __CLID " << clid << std::endl; std::cin >> response; } if (i == 2) { dnid = argv[i]; std::cout << "SET VARIABLE __DNID " << dnid << std::endl; std::cin >> response; } if (i == 3) { playfile = argv[i]; std::cout << "SET VARIABLE __PLAYFILE " << playfile << std::endl; std::cin >> response; } d = i; } if (d >= 2) { int daRec = 0; MYSQL *mysql = NULL; MYSQL_RES *result; MYSQL_ROW row; std::string query; mysql = mysql_init(NULL); if (mysql == NULL) { return -1; } if (!mysql_real_connect(mysql, getMySqlHost().c_str(), \ getMySqlUser().c_str(), \ getMySqlPass().c_str(), \ getDbName().c_str(), \ 3306, NULL, 0)) \ { \ std::cerr << "MySql connection failed! (check authorization information)" << std::endl; } message = "blacklist lookup - called with - clid: " + clid + " dnid: " + dnid; level = 3; std::cout << "VERBOSE \"" << message << "\" " << level << std::endl; std::cin >> response; query = "SELECT * FROM BLACKLIST WHERE phone = '" + clid + "' "; if(mysql_query(mysql, query.c_str()) != 0) { message = "blacklist lookup - query failed - " + query; level = 3; std::cout << "VERBOSE \"" << message << "\" " << level << std::endl; std::cin >> response; return 0; } else { result = mysql_use_result(mysql); for(counter = 0; (row = mysql_fetch_row(result)); counter++) { message = "blacklist lookup - found - clid: " + std::string(row[1]); level = 3; std::cout << "VERBOSE \"" << message << "\" " << level << std::endl; std::cin >> response; daRec = stoi(row[0]); hits++; } if (clid == "9999999999" || clid == "8888888888") { hits = 1; message = "blacklist lookup - invalid - clid: " + clid + " (play message/hangup) "; level = 3; std::cout << "VERBOSE \"" << message << "\" " << level << std::endl; std::cin >> response; } //this section is if it doesn't find that clid in the table that matched the dnid if (hits == 0) { message = "blacklist lookup - not found - clid: " + clid + " (continuing) "; level = 3; std::cout << "VERBOSE \"" << message << "\" " << level << std::endl; std::cin >> response; } if (hits > 0) { blacklist = "TRUE"; if (!playfile.empty()) { message = "blacklist lookup - playfile - " + playfile + " (playing) "; level = 3; std::cout << "VERBOSE \"" << message << "\" " << level << std::endl; std::cin >> response; std::cout << "EXEC PLAYBACK \"" << playfile << "\" \"\" " << std::endl; std::cin >> response; } message = "blacklist lookup - hangup - clid: " + clid + " "; level = 3; std::cout << "VERBOSE \"" << message << "\" " << level << std::endl; std::cin >> response; std::cout << "HANGUP " << std::endl; std::cin >> response; } mysql_free_result(result); } std::cout << "SET VARIABLE __BLACKLIST " << blacklist << std::endl; std::cin >> response; } return 1; }