示例#1
0
bool AttentionPlugin::incomingStanza(int account, const QDomElement& stanza) {
    if (enabled) {
        if(stanza.tagName() == "message"
           && stanza.attribute("type") == "headline"
           && !stanza.firstChildElement("attention").isNull()) {

            if(disableDnd && accInfoHost->getStatus(account) == "dnd")
                return false;

            QString from = stanza.attribute("from");

            int i = blockedJids_.size();
            if(findAcc(account, from, i)) {
                Blocked &B = blockedJids_[i];
                if(QDateTime::currentDateTime().secsTo(B.LastMes) > -timeout_) {
                    return false;
                } else {
                    B.LastMes = QDateTime::currentDateTime();
                }
            } else {
                Blocked B = { account, from, QDateTime::currentDateTime() };
                blockedJids_ << B;
            }

            const QString optAway = "options.ui.notifications.passive-popups.suppress-while-away";
            QVariant suppressAway = psiOptions->getGlobalOption(optAway);
            const QString optDnd = "options.ui.notifications.passive-popups.suppress-while-dnd";
            QVariant suppressDnd = psiOptions->getGlobalOption(optDnd);
            int interval = popup->popupDuration(POPUP_OPTION);
            if(infPopup && (accInfoHost->getStatus(account) == "away" || accInfoHost->getStatus(account) == "xa")) {
                psiOptions->setGlobalOption(optAway, false);
                popup->setPopupDuration(POPUP_OPTION, -1);
            }
            psiOptions->setGlobalOption(optDnd, disableDnd);

            showPopup(account, from.split("/").first(), from + tr(" sends Attention message to you!"));
            psiOptions->setGlobalOption(optAway, suppressAway);
            psiOptions->setGlobalOption(optDnd, suppressDnd);
            popup->setPopupDuration(POPUP_OPTION, interval);

            if(psiOptions->getGlobalOption("options.ui.notifications.sounds.enable").toBool())
                playSound(soundFile);

            /*QTextEdit *te = activeTab->getEditBox();
              if(te)
              nudgeWindow_ = te->window();

              else
              nudgeWindow_ = qApp->activeWindow();*/



            if(nudgeWindow_ && nudgeWindow_->isVisible())
                nudge();
        }

        else if(stanza.tagName() == "iq" && stanza.attribute("type") == "get")
        {
            QDomElement query = stanza.firstChildElement("query");
            if(!query.isNull() && query.attribute("xmlns") == "http://jabber.org/protocol/disco#info")
            {
                if(query.attribute("node") == "http://psi-dev.googlecode.com/caps#at-pl") {
                    QString reply = QString("<iq type=\"result\" to=\"%1\" id=\"%2\">"
                                            "<query xmlns=\"http://jabber.org/protocol/disco#info\" node=\"http://psi-dev.googlecode.com/caps#at-pl\">"
                                            "<feature var=\"urn:xmpp:attention:0\"/></query></iq>")
                                            .arg(stanzaSender->escape(stanza.attribute("from")), stanzaSender->escape(stanza.attribute("id")));
                    stanzaSender->sendStanza(account, reply);
                    return true;
                }
            }
        }
    }
    return false;
}
示例#2
0
bool StopSpam::processMuc(int account, const QDomElement& stanza) {
	if(stanza.tagName() == "presence") {
		QStringList jidList = stanza.attribute("from").split("/");
		int i =  mucUsers_.size();
		if(findMuc(jidList.first(),jidList.last(), i)) {
			MucUser &mu = mucUsers_[i];
			QDomNodeList nodeList = stanza.elementsByTagName("x");
			for(int i = nodeList.size(); i> 0;) {
				QDomNode node = nodeList.at(--i).firstChild();
				while(!node.isNull()) {
					QDomElement item = node.toElement();
					if(item.tagName() == "item") {
						mu.affiliation = item.attribute("affiliation");
						mu.role = item.attribute("role");
						mu.jid = item.attribute("jid");
						break;
					}
					node = node.nextSibling();
				}
			}
		}
		else {
			MucUser mu;
			mu.mucJid = jidList.first();
			mu.nick = jidList.last();
			QDomNodeList nodeList = stanza.elementsByTagName("x");
			for(int i = nodeList.size(); i> 0;) {
				QDomNode node = nodeList.at(--i).firstChild();
				while(!node.isNull()) {
					QDomElement item = node.toElement();
					if(item.tagName() == "item") {
						mu.affiliation = item.attribute("affiliation");
						mu.role = item.attribute("role");
						mu.jid = item.attribute("jid");
						break;
					}
					node = node.nextSibling();
				}
			}
			mucUsers_ << mu;
		}
	}
	else if(stanza.tagName() == "message" && stanza.attribute("type") == "chat") {
		QDomElement subj = stanza.firstChildElement("subject");
		if (subj.text() == "StopSpam" || subj.text() == "StopSpam Question") return false;

		QString valF = stanza.attribute("from");
		if (contactInfo->isConference(account, valF)) return false;

		MucUser mu;
		QStringList jidList = valF.split("/");
		int i =  mucUsers_.size();
		if(findMuc(jidList.first(),jidList.last(), i)) {
			mu = mucUsers_[i];
		} else {
			mu.affiliation = "";
			mu.jid = "";
			mu.mucJid = "";
			mu.nick = "";
			mu.role = "";
		}

		bool find = false;

		if(mu.affiliation == "owner" && !Owner)
			find = true;
		else if( mu.affiliation == "admin" && !Admin)
			find = true;
		else if(mu.affiliation == "none" && !None)
			find = true;
		else if(mu.affiliation == "member" && !Member)
			find = true;
		if(find)
			return false;

		if(mu.role == "moderator" && !Moder)
			find = true;
		else if(mu.role == "participant" && !Participant)
			find = true;
		else if(mu.role == "visitor" && !Visitor)
			find = true;
		if(find)
			return false;

		QStringList UnblockedJids = Unblocked.split("\n");
		if(UnblockedJids.contains(valF, Qt::CaseInsensitive))
			return false;

		for(int i = 0; i < Jids.size(); i++) {
			QString jid_ = Jids.at(i);
			if(jid_.isEmpty())
				continue;
			if(mu.jid.contains(jid_, Qt::CaseInsensitive)
				|| mu.nick.contains(jid_, Qt::CaseInsensitive)
				|| mu.mucJid.contains(jid_, Qt::CaseInsensitive)) {
				if(!selected[i].toBool())
					return false;
				break;
			}
		}

		QDomElement Body = stanza.firstChildElement("body");
		if(Body.isNull())
			return false;

		if(BlockAll) {
			updateCounter(stanza, false);

			if(EnableBlockAllMes)
				stanzaHost->sendMessage(account, valF,  BlockAllMes, "StopSpam", "chat");

			return true;
		}

		QString BodyText = Body.text();
		if(BodyText == Answer) {
			Unblocked += valF + "\n";
			QVariant vUnblocked(Unblocked);
			psiOptions->setPluginOption(constUnblocked, vUnblocked);
			psiOptions->setPluginOption(constLastUnblock, QVariant(QDate::currentDate().toString("yyyyMMdd")));
			stanzaHost->sendMessage(account, valF,  Congratulation, "StopSpam", "chat");
			updateCounter(stanza, true);
			return true;
		}
		else {
			int i = BlockedJids.size();
			if(findAcc(account, valF, i)) {
				Blocked &B = BlockedJids[i];
				if(B.count < Times) {
					stanzaHost->sendMessage(account, valF,  Question, "StopSpam Question", "chat");
					updateCounter(stanza, false);
					B.count++;
					B.LastMes = QDateTime::currentDateTime();
					return true;
				}
				else {
					if(QDateTime::currentDateTime().secsTo(B.LastMes) >= -ResetTime*60) {
						updateCounter(stanza, false);
						return true;
					}
					else {
						B.count = 1;
						B.LastMes = QDateTime::currentDateTime();
						stanzaHost->sendMessage(account, valF,  Question, "StopSpam Question", "chat");
						updateCounter(stanza, false);
						return true;
					}
				}
			}
			else {
				Blocked B = { account, valF, 1, QDateTime::currentDateTime() };
				BlockedJids << B;
				stanzaHost->sendMessage(account, valF,  Question, "StopSpam Question", "chat");
				updateCounter(stanza, false);
				return true;
			}
		}
	}

	return false;
}
示例#3
0
int main(){
int listen_sock;
int server_len, client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;

listen_sock = socket(AF_INET, SOCK_STREAM, 0);
if (listen_sock == -1)
 {
    printf("khong tao duoc socket\n");
    return 0;
 }
 printf("Tao socket thanh cong\n");

server_address.sin_family = AF_INET;
inet_aton("127.0.0.1",&server_address.sin_addr);
server_address.sin_port = htons(5500);
server_len = sizeof(server_address);

if(bind(listen_sock, (struct sockaddr *)&server_address,server_len)<0)
{
	printf("bind failed.\n");
    return 0;
}
printf("bind done\n");
int check = listen(listen_sock, 10);
if (check == -1)
 {
 printf("error");
 return 0;
 }
printf("waiting connect ...\n");
while(1) {

client_len = sizeof(client_address);
conn_sock = accept(listen_sock,(struct sockaddr *)&client_address, &client_len);
if(conn_sock==-1){
	printf("error connect\n");
	return 0;
}else{
	printf("Accept new connection\n");
}
if(fork() == 0){
	close(listen_sock);
    //thiet lap truyen nhan giu lieu lien tuc
	int sentBytes,revedBytes,i;
    time_t start;
    struct tm * timeinfo;
    char name[30];
    char pass[16];
    struct userinfo acc1;
    char s[2]="|";
    char *token;
    int flag;
    char str_flag[3];
    char filename[]="data.txt";
    int stop = 0;
    FILE *f;
    FILE *result;
    int login;
    while((revedBytes = recv(conn_sock,buff,1024,0)) >= 0){
        buff[revedBytes]='\0';
        token = strtok(buff, s);
        strcpy(str_flag,token);
        flag=atoi(str_flag);
        //nhan va kiem tra co bao
        switch(flag){
            case 0:
                //kiem tra dang nhap neu dang nhap thang cong tra ve buff[0] = 5 
                //neu khong dung tra ve buff[0]=4 va buff[1] la ma loi
                printf("Dang nhap\n");
                token =strtok(NULL,s);
                strcpy(name,token);
                token=strtok(NULL,s);
                strcpy(pass,token);
                login = checklogin(name,pass);
                if(login==1){
                result =fopen(name,"w");
                buff[0] = 5;
                sentBytes = send(conn_sock,buff,1024,0);
                }else{
                    buff[0] = 4;
                    buff[1] = login;
                    sentBytes = send(conn_sock,buff,1024,0);
                }
            break;
            case 1: 
                token =strtok(NULL,s);
                strcpy(name,token);
                token=strtok(NULL,s);
                strcpy(pass,token);
                if(findAcc(name)==1){
                    buff[0] = 4;
                    buff[1] = 1;
                    buff[2] = '\0';
                    sentBytes = send(conn_sock,buff,1024,0);
                    break;
                }
                f =fopen(filename,"a");
                fprintf(f, "%s\t%s\n",name,pass );
                fclose(f);
                buff[0] = 5;
                buff[1] = '\0';
                sentBytes = send(conn_sock,buff,1024,0);
            break;
            case 2:
                side = 1 ;xside = 0;
                time (&start );
                timeinfo = localtime ( &start );
                fprintf(result,"IP address is: %s\n", inet_ntoa(client_address.sin_addr));
                fprintf (result,"time start :%s\n", asctime (timeinfo) );
                InitGen();
                while(1){
                    if(side == computerside){
                        ComputerThink();
                        printf("%d may choi\n",side);
                        fprintf(result,"%s-%s\n",indexChar(newmove.from),indexChar(newmove.dest));
                        UpdateNewMove();
                        buff[0] = 3;
                        buff[1] = newmove.from;
                        buff[2] = newmove.dest;
                        buff[3] = check_thua();stop = buff[3];
                        buff[4] = '\0';
                        send(conn_sock,buff,1024,0);
                        if(stop == 1)  break;
                    }
                    else 
                        if(GetHumanMove(0,1)==0){
                        fprintf(result,"%s-%s\t",indexChar(newmove.from),indexChar(newmove.dest));
                        UpdateNewMove();
                        printf("%d nguoi choi\n",side);                     
                        buff[0] = 3;
                        buff[1] = 1;
                        buff[2] = 0;
                        buff[3] = check_thang(); stop = buff[3];
                        buff[4] = '\0';
                        send(conn_sock,buff,1024,0);
                        //tra ve neu di thanh cong
                        if(stop == 1) break;
                    };
                    side = xside; xside = 1-xside;
                    printf("%d-%d-%d\n",side,newmove.from,newmove.dest);
            	}
            printf("Dung choi\n");
            time (&start );
            timeinfo = localtime ( &start );
            fprintf (result,"time end :%s\n", asctime (timeinfo));
            fclose(result);
            result = fopen(name,"r");
            while(!feof(result)){
                if (fgets(buff,81,result) != NULL ){
                sentBytes=send(conn_sock,buff,1024,0);
                }
            }
            buff[0] = 'Q';
            buff[1] = '\0';
            sentBytes=send(conn_sock,buff,1024,0);
            break;
            default:
            break;
        	    
        }
    }
    close(conn_sock);
    exit(0);
}
signal(SIGCHLD,sig_chld);
close(conn_sock);
}
return 1;
}
示例#4
0
bool StopSpam::incomingStanza(int account, const QDomElement& stanza) {
	if (enabled) {
		if(stanza.tagName() == "iq") {
			QDomElement query = stanza.firstChildElement("query");
			if(!Unblocked.isEmpty()
				&& !query.isNull()
				&& query.attribute("xmlns") == "jabber:iq:roster") {
				QStringList Roster = accInfoHost->getRoster(account);
				QStringList UnblockedList = Unblocked.split("\n");
				while(!Roster.isEmpty()) {
					QString jid = Roster.takeFirst();
					UnblockedList.removeOne(jid);
				}
				Unblocked = "";
				while(!UnblockedList.isEmpty()) {
					QString jid = UnblockedList.takeFirst();
					if(jid != "") {
						Unblocked += jid + "\n";
					}
				}
				psiOptions->setPluginOption(constUnblocked, QVariant(Unblocked));
			}
		}


		QString from = stanza.attribute("from");
		QString to = stanza.attribute("to");
		QString valF = from.split("/").takeFirst();
		QString valT = to.split("/").takeFirst();

		if(valF.toLower() == valT.toLower()
			|| valF.toLower() == accInfoHost->getJid(account).toLower())
			return false;

		if(!from.contains("@"))
			return false;

		// Нам необходимо сделать эту проверку здесь,
		// иначе мы рискуем вообще ее не сделать
		if (stanza.tagName() == "message") {
			bool findInvite = false;
			QString invFrom;
			QDomElement x = stanza.firstChildElement("x");
			while(!x.isNull()) {
				QDomElement invite = x.firstChildElement("invite");
				if(!invite.isNull()) {
					findInvite = true;
					invFrom = invite.attribute("from");
					break;
				}
				x = x.nextSiblingElement("x");
			}
			if(findInvite) {  // invite to MUC
				QStringList r = accInfoHost->getRoster(account);
				if(r.contains(invFrom.split("/").first(), Qt::CaseInsensitive))
					return false;
				else {
					bool findRule = false;
					for(int i = 0; i < Jids.size(); i++) {
						QString jid_ = Jids.at(i);
						if(jid_.isEmpty())
							continue;
						if(invFrom.contains(jid_, Qt::CaseInsensitive)) {
							findRule = true;
							if(!selected[i].toBool())
								return false;
							break;
						}
					}
					if(!findRule && DefaultAct)
						return false;
					else {
						updateCounter(stanza, false);
						return true;
					}
				}
			}
		}

		if(contactInfo->isConference(account, valF)
			|| contactInfo->isPrivate(account, from)
			|| findMucNS(stanza))
			{
			if(UseMuc)
				return processMuc(account, stanza);
			else
				return false;
		}

		QStringList Roster = accInfoHost->getRoster(account);
		if(Roster.isEmpty() || Roster.contains("-1"))
			return false;
		if(Roster.contains(valF, Qt::CaseInsensitive))
			return false;

		QStringList UnblockedJids = Unblocked.split("\n");
		if(UnblockedJids.contains(valF, Qt::CaseInsensitive))
			return false;

		bool findRule = false;
		for(int i = 0; i < Jids.size(); i++) {
			QString jid_ = Jids.at(i);
			if(jid_.isEmpty())
				continue;
			if(from.contains(jid_, Qt::CaseInsensitive)) {
				findRule = true;
				if(!selected[i].toBool())
					return false;
				break;
			}
		}
		if(!findRule && DefaultAct)
			return false;

		if (stanza.tagName() == "message") {
			QString subj = stanza.firstChildElement("subject").text();
			QString type = "";
			type = stanza.attribute("type");
			if(type == "error" && subj == "StopSpam Question") {
				updateCounter(stanza, false);
				return true;
			}

			if (subj == "AutoReply" || subj == "StopSpam" || subj == "StopSpam Question")
				return false;

			if(type == "groupchat" || type == "error")
				return false;

			QDomElement captcha = stanza.firstChildElement("captcha");
			if(!captcha.isNull() && captcha.attribute("xmlns") == "urn:xmpp:captcha")
				return false; // CAPTCHA

			QDomElement Body = stanza.firstChildElement("body");
			if(!Body.isNull()) {
				QString BodyText = Body.text();
				if(BodyText == Answer) {
					Unblocked += valF + "\n";
					psiOptions->setPluginOption(constUnblocked, QVariant(Unblocked));
					psiOptions->setPluginOption(constLastUnblock, QVariant(QDate::currentDate().toString("yyyyMMdd")));
					stanzaHost->sendMessage(account, from, Congratulation, "StopSpam", "chat");
					updateCounter(stanza, true);
					if(LogHistory)
						logHistory(stanza);
					return true;
				}
				else {
					int i = BlockedJids.size();
					if(findAcc(account, valF, i)) {
						Blocked &B = BlockedJids[i];
						if(B.count < Times) {
							stanzaHost->sendMessage(account, from,  Question, "StopSpam Question", "chat");
							updateCounter(stanza, false);
							if(LogHistory)
								logHistory(stanza);
							B.count++;
							B.LastMes = QDateTime::currentDateTime();
							return true;
						}
						else {
							if(QDateTime::currentDateTime().secsTo(B.LastMes) >= -ResetTime*60) {
								updateCounter(stanza, false);
								if(LogHistory)
									logHistory(stanza);
								return true;
							}
							else {
								B.count = 1;
								B.LastMes = QDateTime::currentDateTime();
								stanzaHost->sendMessage(account, from,  Question, "StopSpam Question", "chat");
								updateCounter(stanza, false);
								if(LogHistory)
									logHistory(stanza);
								return true;
							}
						}
					}
					else {
						Blocked B = { account, valF, 1, QDateTime::currentDateTime() };
						BlockedJids << B;
						stanzaHost->sendMessage(account, from,  Question, "StopSpam Question", "chat");
						updateCounter(stanza, false);
						if(LogHistory)
							logHistory(stanza);
						return true;
					}
				}
			}
			updateCounter(stanza, false);
			return true;
		}

		if (stanza.tagName() == "presence") {
			QString type = stanza.attribute("type");
			if(type == "subscribe") {
				stanzaHost->sendMessage(account, from,  Question, "StopSpam Question", "chat");
				stanzaHost->sendStanza(account, "<presence type=\"unsubscribed\" to=\"" + valF + "\" />");
				updateCounter(stanza, false);
				if(LogHistory)
					logHistory(stanza);
				return true;
			}
			else
				return false;
		}

		if (stanza.tagName() == "iq" && stanza.attribute("type") == "set") {
			QString msg = QString("<iq type=\"error\" id=\"%1\" ").arg(stanza.attribute("id"));
			if(!from.isEmpty())
				msg += QString("to=\"%1\"").arg(from);
			msg += " />";
			stanzaHost->sendStanza(account, msg);
			updateCounter(stanza, false);
			return true;
		}

		return false;
	}
	return false;
}