我刚刚在Suse-Linux EC2实例中安装了openfire服务器,除了管理员之外,我还创建了一个名为'balaji'的用户来配置openfire服务器。
然后我为iOS平台安装了ilibjingle代码,我就可以构建它了。我在模拟器中运行了它,它在我的gmail id上运行得很好。它登录了,然后从花名册中取出用户。
然后我修改了代码,指向我的openfire服务器IP地址,并给出了用户名'balaji'(我在openfire中创建的)和适当的密码。我在openfire服务器上也有一个自签名SSL证书。当我运行这段代码时,它能够连接,但无法登录(我相信)。ilibjingle代码应该从Connect到Login到LoggedIn到花名册列表。当我运行我的openfire服务器时,它从连接到登录,但除此之外什么也没有。
可能出了什么问题?我是否应该修改我的openfire服务器中的任何内容以使此工作?这是我的iPhone代码。
在rootviewcontroller中。mm,我有以下代码片段:
-(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@domainn");
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 %sn", 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',我有以下内容:
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, >alkClient::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();
}
}
在使用openfire
服务器运行libjingle
示例程序时,我也遇到了同样的问题。这是因为新版本的libjingle
不支持未知权威的证书。
所以你需要撤销xmppsocket.cc
在rev65上所做的更改(当libjingle
更新到0.5.6版本时):
这个链接将帮助您看到两个版本之间的差异http://code.google.com/p/libjingle/source/diff?spec=svn95& r = 65,格式= side&路径=/箱子/讨论/例子/登录/xmppsocket.cc& old_path =/箱子/讨论//登录/xmppsocket.cc&例子;老= 30
在这个提交中,他们删除了允许未知证书颁发机构的证书的两行。
我按照上面的说明解决了这个问题或者你可以点击下面的链接来获得完整的想法。http://code.google.com/p/libjingle/issues/detail?id=250。