Пример #1
0
void cIPLog::GetLastLogin(const string &who, bool isNick, int limit, ostream &os)
{
	string ip;
	if(isNick)
		os << autosprintf(_("Nick %s has lately been in the hub with the following IP"), who.c_str()) << "\n";
	else
		os << autosprintf(_("IP %s has lately been in the hub with following nicknames"), who.c_str()) << "\n";

	MakeSearchQuery(who, isNick, 1, limit);
	SetBaseTo(&mModel);

	os << "\n ";
	os << setw(25) << setiosflags(ios::left) << toUpper(_("Date"));
	os << (isNick ? "IP" : toUpper(_("Nickname"))) << "\n";
	os << " " << string(25+20,'=') << endl;

	db_iterator it;
	for(it = db_begin(); it != db_end(); ++it) {
		cBanList::Num2Ip(mModel.mIP, ip);
		os << " " << setw(25) << setiosflags(ios::left) << cTime(mModel.mDate,0).AsDate();
		os << (isNick ? ip : mModel.mNick) << endl;
	}

	mQuery.Clear();
}
Пример #2
0
int cMsgList::DeliverMessagesSinceSync(unsigned sync)
{
	db_iterator it;
	int n = 0;
	cUser *user = NULL;
	nMySQL::cQuery DelQ(mQuery);

	SetBaseTo(&mModel);
	mQuery.Clear();
	SelectFields(mQuery.OStream());
	mQuery.OStream() << "WHERE date_sent >=" << sync;


	for(it = db_begin(); it != db_end(); ++it, ++n ) {
		if (!user || user->mNick != mModel.mReceiver)
			user = mServer->mUserList.GetUserByNick(mModel.mReceiver);

		if(user) {
			DeliverModelToUser(user);
			DelQ.Clear();
			DelQ.OStream() << "DELETE FROM " << mMySQLTable.mName;
			WherePKey(DelQ.OStream());
			DelQ.Query();
		}
	}

	DelQ.Clear();
	mQuery.Clear();
	return n;
}
Пример #3
0
int cMsgList::DeliverMessagesForUser(cUser *dest)
{
	db_iterator it;
	int n = 0;
	long max_date = 0;

	mQuery.Clear();
	SelectFields(mQuery.OStream());
	mQuery.OStream() << "WHERE "  << "receiver" << "='" ;
	WriteStringConstant(mQuery.OStream(),dest->mNick);
	mQuery.OStream()<< "'";

	SetBaseTo(&mModel);

	for( it = db_begin(); it != db_end(); ++it, ++n ) {
		if (mModel.mDateSent > max_date)
			max_date = mModel.mDateSent;
		DeliverModelToUser(dest);
	}

	mQuery.Clear();
	mQuery.OStream() << "DELETE FROM " << mMySQLTable.mName << " WHERE receiver = '" ;
	WriteStringConstant(mQuery.OStream(),dest->mNick);
	mQuery.OStream() << "' AND date_sent <= " << max_date;
	mQuery.Query();

	return n;
}
Пример #4
0
void cIPLog::GetHistory(const string &who, bool isNick, int limit, ostream &os)
{
	string ip;
	if(isNick)
		os << autosprintf(_("Last %d events of nick %s:"), limit, who.c_str()) << "\r\n";
	else
		os << autosprintf(_("Last %d events of IP %s:"), limit, who.c_str()) << "\r\n";

	MakeSearchQuery(who, isNick, -1, limit);
	SetBaseTo(&mModel);

	const char *Actions[]={_("connect"),_("login"),_("logout"),_("disconnect")};
	const char *Infos[]={
	    "--",
		_("bad nick or nick temporarily banned"),
		_("used different nick in chat"),
		_("kicked"),
		_("redirected"),
		_("exit from the hub"),
		_("critical hub load"),
		_("timeout"),
		_("user did nothing for too long time"),
		_("hub full"),
		_("share limit"),
		_("no tag or not valid"),
		_("tag breaks hub rules"),
		_("wrong password"),
		_("error in login sequence"),
		_("syntax error in some messages"),
		_("invalid key")
	};

	os << "\n ";
	os << setw(20) << setiosflags(ios::left) << toUpper(_("Date"));
	os << setw(20) << setiosflags(ios::left) << toUpper(_("Action"));
	os << setw(15) << setiosflags(ios::left) << (isNick ? "IP" : toUpper(_("Nickname")));
	os << toUpper(_("Info")) << "\n";
	os << " " << string(20+20+15+25,'=') << endl;

	db_iterator it;
	for(it = db_begin(); it != db_end(); ++it) {
		cBanList::Num2Ip(mModel.mIP, ip);
		os << " " <<  setw(20) << setiosflags(ios::left) << cTime(mModel.mDate,0).AsDate();
		os << setw(20) << setiosflags(ios::left);
		if(mModel.mType < 4)
			os << Actions[mModel.mType];
		else
			os << mModel.mType;
		os << setw(15) << setiosflags(ios::left) << (isNick ? ip : mModel.mNick.substr(0,14));
		if(mModel.mInfo < 16) {
			if(strlen(Infos[mModel.mInfo]) > 0)
				os << Infos[mModel.mInfo];
		} else
			os << mModel.mInfo;
		os << endl;
	}

	mQuery.Clear();
}
Пример #5
0
Файл: main.c Проект: abreen/ascd
int main(int argc, char *argv[])
{
    struct sockaddr_un addr;

    signal(SIGINT, handle_sigint);
    signal(SIGTERM, handle_sigterm);
    signal(SIGQUIT, handle_sigquit);

    if (options(argc, argv) < 0) {
        usage();
        goto failure;
    }

    if (flags & HELP) {
        usage();
        goto success;
    }

    if (flags & DAEMON)
        if (daemon(1, 1) < 0)
            goto failure;

    if (db_start() < 0)
        goto failure;

    if ((control_sock = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0)
        goto failure;

    addr.sun_family = AF_UNIX;
    strncpy(addr.sun_path, CONTROL_SOCKET_PATH, UNIX_PATH_MAX);

    if (bind(control_sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
        goto failure;

    if (handle_messages() < 0)
        goto failure;

    close(control_sock);
    unlink(CONTROL_SOCKET_PATH);

    if (db_end() < 0)
        goto failure;

    return 0;

  failure:
    if (control_sock != -1) {
        close(control_sock);
        unlink(CONTROL_SOCKET_PATH);
    }

    return 1;

  success:
    return 0;
}
Пример #6
0
int cMsgList::PrintSubjects(ostream &os, const string &nick, bool IsSender)
{
	int n = 0;
	mQuery.Clear();
	SelectFields(mQuery.OStream());
	mQuery.OStream() << "WHERE "  << (IsSender ? "sender" : "receiver") << "='";
	WriteStringConstant(mQuery.OStream(), nick );
	mQuery.OStream() << "'";
	db_iterator it;
	SetBaseTo(&mModel);
	for(it = db_begin(); it != db_end(); ++it) {
		os << mModel.AsSubj() << endl;
		n++;
	}
	mQuery.Clear();
	return 0;
}
Пример #7
0
int
main(int argc, char*argv[])
{
    int                 i2c_device;
    MYSQL               *inst;
    MYSQL_STMT          *stmt;
    station_state_t     station_state[256];
    reading_t           *sensor_state   = NULL;
    struct sigaction    sigact;
    int                 i;

    openlog("sensord", 0, LOG_LOCAL1);

    if ((i2c_device = open(I2C_DEVICE, O_RDWR)) < 0)
    {
        fprintf(stderr, "Failed to open %s: %s\n", I2C_DEVICE, strerror(errno));
        return 1;
    }
    if (ioctl(i2c_device, I2C_SLAVE, (long)I2C_SLAVE_ADDRESS) < 0)
    {
        fprintf(stderr, "ioctl(I2C_SLAVE) failed: %s\n", strerror(errno));
        close(i2c_device);
        return 1;
    }

    if (db_start(&inst, &stmt) != 0)
    {
        fprintf(stderr, "Database initialisation failed\n");
        return 1;
    }

    /*
     * Set up signal handling:
     *  ignore HUP
     *  terminate on INT, TERM
     */
    sigemptyset(&sigact.sa_mask);
    sigact.sa_flags = 0;

    sigact.sa_handler = SIG_IGN;
    sigaction(SIGHUP, &sigact, NULL);

    sigact.sa_handler = set_shutdown_flag;
    sigaction(SIGINT, &sigact, NULL);
    sigaction(SIGTERM, &sigact, NULL);

    memset(station_state, 0, sizeof(station_state));

    syslog(LOG_INFO, "started; entering event loop");

    /*
     * Detach ourselves from the controlling tty
     */
    daemon(0, 0);

    /*
     * Main event loop
     */
    while (!Shutdown)
    {
        char    i2c_message[256];
        int     n;

        /*
         * Read current state from the sensor receiver
         */
        if ((n = read(i2c_device, i2c_message, sizeof(i2c_message))) < 0)
        {
            fprintf(stderr, "message read failed: %s\n", strerror(errno));
            return 1;
        }

        if (!process_message(i2c_message, n, station_state, &sensor_state, stmt))
        {
            fprintf(stderr, "message process failed\n");
            return 1;
        }

        /*
         * Sensors send messages every 64 seconds, so this will ensure we don't miss 
         * any updates.
         */
        for (i = 0; !Shutdown && i < 45; ++i)
            sleep(1);
    }

    db_end(inst, stmt);

    close(i2c_device);

    syslog(LOG_INFO, "terminating");
    closelog();

    return 0;
}