首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ilibjingle与Openfire服务器-无法登录

ilibjingle与Openfire服务器-无法登录
EN

Stack Overflow用户
提问于 2011-07-29 09:32:02
回答 1查看 1.4K关注 0票数 1

我刚刚在我的Suse-Linux EC2实例中安装了openfire服务器,并且我已经通过在管理员之外创建一个名为'balaji‘的用户来配置openfire服务器。

然后,我为iOS平台安装了ilibjingle代码,并且能够构建它。我在模拟器中运行它,它在我的gmail-id上工作得很好。它登录了,然后从花名册列表中带来了用户。

然后我将代码修改为指向我的openfire服务器IP地址,并给出了用户名'balaji‘(我在openfire中创建的那个)和适当的密码。我在openfire服务器中也有一个自签名的SSL证书。当我运行这段代码时,它可以连接,但不能登录(我相信)。ilibjingle代码应该是从连接到登录到LoggedIn到花名册列表。当我运行我的openfire服务器时,它从连接到登录,但除此之外什么也没有。

可能出了什么问题?我应该修改我的openfire服务器中的任何东西来使其工作吗?这是我的iPhone代码。

在rootviewcontroller.mm中,我有以下代码片段。

代码语言:javascript
复制
-(void) _mainGtalkThread:(id)sender
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    //you need to setup name and passwd manuelly here
    char *name = "balaji";
    char *password = "mypasswd";
    [self gtalk_main:(char*)name userpassword:(char*)password];
    [pool release];
}


-(int) gtalk_main:(char*)un userpassword:(char*)password 
{
// This app has three threads. The main thread will run the XMPP client,
// which will print to the screen in its own thread. A second thread
// will get input from the console, parse it, and pass the appropriate
// message back to the XMPP client's thread. A third thread is used
// by MediaSessionClient as its worker thread.

buzz::Jid jid;
talk_base::InsecureCryptStringImpl pass;

std::string username = un;
if (username.find('@') == std::string::npos) {
    username.append("@localhost");
}
jid = buzz::Jid(username);
if (!jid.IsValid() || jid.node() == "") {
    printf("Invalid JID. JIDs should be in the form user@domain\n");
    return 1;
}
pass.password() = password;

buzz::XmppClientSettings xcs;

xcs.set_user(jid.node());
//xcs.set_resource("call");
xcs.set_host(jid.domain());
xcs.set_pass(talk_base::CryptString(pass));
xcs.set_use_tls(false);
xcs.set_allow_plain(true);

xcs.set_server(talk_base::SocketAddress("50.37.185.206", DEFAULT_PORT));
printf("Logging in as %s with user as %s\n", jid.Str().c_str(), jid.node().c_str());

talk_base::InitializeSSL();

talk_base::Thread athread;
talk_base::ThreadManager::SetCurrent(&athread);

talk_base::Thread* main_thread = talk_base::Thread::Current();
assert(main_thread!=NULL);

XmppPump pump;
//CallClient *client = new CallClient(pump.client());
gtalkClient_ = new gtalkClient(pump.client(), self);

pump.DoLogin(xcs, new XmppSocket(true), NULL);
main_thread->Run();

return 0;
}

在另一个文件'gtalkclient.mm‘中,我有以下内容:

代码语言:javascript
复制
gtalkClient::gtalkClient(buzz::XmppClient* xmpp_client, void * controller) :
xmpp_client_(xmpp_client), controller_(controller), media_engine_(NULL),
media_client_(NULL), call_(NULL), incoming_call_(false), auto_accept_(false),
pmuc_domain_("conference.localhost"), local_renderer_(NULL), remote_renderer_(NULL),
roster_(new RosterMap), portallocator_flags_(0)
{
    xmpp_client_->SignalStateChange.connect(this, &gtalkClient::OnStateChange);
}


void gtalkClient::OnStateChange(buzz::XmppEngine::State state) 
{         
    RootViewController * tvc = (RootViewController*)controller_;
    switch (state) {
      case buzz::XmppEngine::STATE_START:
        printf("connecting...");
      [tvc.roster_ removeAllObjects];
      [tvc.roster_ addObject:@"connecting..."];
      [tvc reloadTableViewData];
        break;

      case buzz::XmppEngine::STATE_OPENING:
        printf("logging in...");
      [tvc.roster_ removeAllObjects];
      [tvc.roster_ addObject:@"logging in..."];
      [tvc reloadTableViewData];
        break;

      case buzz::XmppEngine::STATE_OPEN:
        printf("logged in...");
      [tvc.roster_ removeAllObjects];
      [tvc.roster_ addObject:@"logged in..."];
      [tvc reloadTableViewData];
        InitPhone();
        InitPresence();
      // prepare to add roster
      [tvc.roster_ removeAllObjects];
        break;

      case buzz::XmppEngine::STATE_CLOSED:
        buzz::XmppEngine::Error error = xmpp_client_->GetError(NULL);
        printf("logged out...%s", strerror(error).c_str());
      [tvc.roster_ removeAllObjects];
      [tvc.roster_ addObject:@"logged out..."];
      [tvc reloadTableViewData];
    Quit();
      }
    }
EN

回答 1

Stack Overflow用户

发布于 2011-12-22 15:15:01

当我用我的openfire server.Its运行libjingle示例程序时,我也遇到了同样的问题,因为新版本的libjingle不支持未知机构的证书。

因此,您需要撤消在rev65上对xmppsocket.cc所做的更改(当libjingle更新到0.5.6版时):

此链接将帮助您查看两个版本http://code.google.com/p/libjingle/source/diff?spec=svn95&r=65&format=side&path=/trunk/talk/examples/login/xmppsocket.cc&old_path=/trunk/talk/examples/login/xmppsocket.cc&old=30之间的差异

在此提交中,他们删除了允许未知证书颁发机构的证书的两行。

我按照上面的说明解决了这个问题,或者你可以点击下面的链接来获得完整的想法。http://code.google.com/p/libjingle/issues/detail?id=250

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6867727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档