c-xmpp的libstrophe库的使用



我正试图使用Libstrophe在C中创建一个聊天客户端。我参考了以下代码示例https://github.com/metajack/libstrophe/blob/master/examples/active.c该代码调用xmpp_connect_client(…)来建立与xmpp服务器的连接。

int main(int argc, char **argv)
{
xmpp_ctx_t *ctx;
xmpp_conn_t *conn;
if (argc != 3) {
fprintf(stderr, "Usage: active <jid> <pass>nn");
return 1;
}
/* initialize lib */
xmpp_initialize();
/* create a context */
ctx = xmpp_ctx_new(NULL, NULL);
/* create a connection */
conn = xmpp_conn_new(ctx);
/* setup authentication information */
xmpp_conn_set_jid(conn, argv[1]);
xmpp_conn_set_pass(conn, argv[2]);
/* initiate connection */
xmpp_connect_client(conn, "talk.google.com", 0, conn_handler, ctx);
/* start the event loop */
xmpp_run(ctx);
/* release our connection and context */
xmpp_conn_release(conn);
xmpp_ctx_free(ctx);
/* shutdown lib */
xmpp_shutdown();
return 0;

}但是身份验证是在哪里进行的呢?我查找了libstrophe的源代码,找到了C文件auth.Chttps://github.com/metajack/libstrophe/blob/master/src/auth.c它有一个名为_auth(..)的函数。我尝试在代码中使用_auth(..),但它无法正确执行身份验证。即它不会通知我错误的用户名或密码。有人能建议我正确的方式来验证我的实体吗。

libstrophe在必要时自动进行身份验证。这发生在xmpp_run()内部。它使用的凭据是使用以下行设置的:

/* setup authentication information */
xmpp_conn_set_jid(conn, argv[1]);
xmpp_conn_set_pass(conn, argv[2]);

jid是您的地址(例如"user@jabber.org","user@gmail.com","user@dukgo.com",等等),并且pass是您的密码。

您的示例缺少conn_handler功能,该功能将向传递身份验证错误

您的conn_handler函数应该有这样的签名:

void conn_handler(xmpp_conn_t * const conn, const xmpp_conn_event_t status, 
const int error, xmpp_stream_error_t * const stream_error,
void * const userdata)

参数为:

conn-您的连接对象。

status-XMPP_CONN_CONNECTXMPP_CONN_DISCONNECTXMPP_CONN_FAIL之一。当您的连接处理程序函数被调用时,这个参数会"告诉"您调用它的原因。

error-断开连接时(XMPP_CONN_FAIL),它包含来自操作系统的套接字级错误代码(否则为0)。

stream_error——可能的流错误之一,列在strophe.h:171中,其含义记录在RFC6120第4.9.3节中。

userdata-它包含作为userdata参数传递给xmpp_connect_client()的任何内容。如果您有一些每个连接的状态要保留,并且您不想使用全局变量或有多个连接,那么这将非常有用。

最后,您不应该在xmpp_connect_client()中指定"talk.google.com",我建议您传递NULL。

相关内容

  • 没有找到相关文章

最新更新