我正在尝试使用 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>\n\n");
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.c https://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_CONNECT
、XMPP_CONN_DISCONNECT
或 XMPP_CONN_FAIL
之一。当您的连接处理程序函数被调用时,此参数会告诉您调用它的原因。
error
- 当断开连接时 (XMPP_CONN_FAIL),这包含来自操作系统的套接字级错误代码(否则为 0)。
stream_error
- 可能的流错误之一,列于 strophe.h:171 , 及其含义记录在 RFC6120 section 4.9.3 中.
userdata
- 这包含您作为 userdata
参数传递给 xmpp_connect_client()
的任何内容。如果您要保留一些每个连接的状态,并且不想使用全局变量或有多个连接,这将很有用。
最后,您不必在 xmpp_connect_client()
中指定 "talk.google.com"
,我建议改为传递 NULL。
关于c - xmpp 的 libstrophe 库的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20745650/