为什么glox不起作用

Why gloox does not work?

本文关键字:不起作用 glox 为什么      更新时间:2023-10-16

我正在尝试使用C++glox库,首先我尝试从这里运行示例
https://github.com/knatten/blog.knatten.org/blob/master/gloox/bot.cpp

然后我尝试了另一个给定的例子,但我甚至看不到我的客户是在线的。。。如何发送至少发送状态信息并联机?我的电脑有问题吗?我在用Ubuntu。

#include <gloox/client.h>
#include <gloox/messagehandler.h>
#include <gloox/message.h>
#include <gloox/presencehandler.h>
#include <gloox/connectionlistener.h>
#include <iostream>
#include <string>
using namespace std;
using namespace gloox;
//my one
const string LOGIN = "gmail.com"; 
ostream& operator<<(ostream& os, Message::MessageType type) {
    switch (type) {
        case Message::Chat:
            os << "Chat";
            break;
        case Message::Error:
            os << "Error";
            break;
        case Message::Groupchat:
            os << "Groupchat";
            break;
        case Message::Headline:
            os << "Headline";
            break;
        case Message::Normal:
            os << "Normal";
            break;
        case Message::Invalid:
            os << "Invalid";
            break;
        default:
            os << "unknown type";
            break;
    }
return os;
}
ostream& operator<<(ostream& os, const Message& stanza) {
    os << "type:'" << stanza.subtype() <<  "' from:'" << stanza.from().full() << "' body:'" << stanza.body() << "'";
    return os;
}
class Bot : public MessageHandler, 
            /*public PresenceHandler,*/
            public ConnectionListener
            /*,public RosterListener*/{
 public:
   Bot(){
      JID jid( "mmaaria123@gmail.com/home" );
      client = new Client( jid, "mmaaria123" );
      client->registerConnectionListener( this );
      client->registerMessageHandler( this );
      client->connect(true);
   }
    virtual void onConnect() {
        cout << "It is connected good:)"  << endl;
        sleep(5);
        client->disconnect();
    }
    virtual void onDisconnect(ConnectionError e) {
        cout << "ConnListener::onDisconnect() " << endl;
    }
    virtual bool onTLSConnect(const CertInfo& Info) {
       time_t tm = Info.date_from;
       time_t tm_to = Info.date_to;
       cout << "t Certificate information to " << LOGIN << endl;
       cout << "t========================================" << endl;
      // number code << "tServer status: " << Info.status;
        if (Info.status !=0)
            {
            cout << "t !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
            cout << "t !!!  The certificate has a problem !!!" << endl;
            cout << "t !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
            // parsing binary Status Cert
            if ((CertInvalid) & Info.status)
                {
                    cout << "t- The certificate is not trusted " << endl;
                }
            if (( CertSignerUnknown) & Info.status)
                {
                    cout << "t- The certificate hasn't got a kown issuer" << endl;
                }
            if ((CertRevoked) & Info.status)
                {
                    cout << "t- The certificate has been revoked " << endl;
                }
            if ((CertExpired) & Info.status)
                {
                    cout << "t- The certificate has expired " << endl;
                }
            if ((CertNotActive) & Info.status)
                {
                    cout << "t- The certificate is not yet active " << endl;
                }
            if ((CertWrongPeer) & Info.status)
                {
                    cout << "t- The certificate has not issued for the peer we're connected to " << endl;
                }
            if ((CertSignerNotCa) & Info.status)
                {
                    cout << "t- The signer is not CA " << endl;
                }
            cout << endl;
            }
            // end parsing
        else
            // if Info.status=0 sertificate is valide
            cout << " *** Cert is OK!" << endl;
       cout << "tChain: " << Info.chain << endl;
       cout << "tIssuer: " << Info.issuer << endl;
       cout << "tServer: " << Info.server << endl;
       cout << "tCert date from: " << ctime(&tm);
       cout << "tCert date to: " << ctime(&tm_to);
       cout << "tProtocol: " << Info.protocol << endl;
       cout << "tCipher: " << Info.cipher << endl;
       cout << "tMAC: " << Info.mac << endl;
       cout << "tCompression: " << Info.compression << endl;
       cout << "t========================================" << endl;
     return true;
    }
   virtual void handleMessage( const Message& stanza,
                               MessageSession* session = 0 ){
     Message msg(Message::Chat, stanza.from(), "hello world" );
     client->send( msg );
   }
 private:
   Client* client;
};
int main( int argc, char* argv[] ){
    cout << "1" << endl;
    Bot b;
}

在控制台中打印证书不受信任证书没有已知的颁发者但是onTLSConnect总是返回true,所以它至少应该是在线的。。。至少应打印"it is connected good:)"

检查您的代码,onTLSConnect只有一个return语句,那就是末尾的return true;。它从不在任何地方返回false