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