Beispiel #1
0
/*
 * Соеденение с сервером и аутентификация
 */
LmConnection* jid_connect(const struct _jid *jid, GMainContext *context) {
  LmConnection  *new_connect;
  GError        *error = NULL;
  
  // Проверяем context
  if(!context)
    context = g_main_context_default();

  // Создаём соединение и пытаемся соедениться
  new_connect = lm_connection_new_with_context(jid->server, 
                                          context);
  if(!lm_connection_open_and_block(new_connect, &error)) {
    g_print ("Couldn't open connection to '%s':\n%s\n",
            jid->server, error->message);
    return NULL;
  }
  // Авторизируемся
  if(!lm_connection_authenticate_and_block(new_connect, jid->username,
                               jid->password, jid->resource, &error)) {
    g_print("Couldn't authenticate with '%s' '%s':\n%s\n",
             jid->username, jid->password, error->message);
    return NULL;
  }

  printf("Established connect with %s\n", jid->server);
  return new_connect;
}
Beispiel #2
0
gboolean xmpp_connect(Xinb *x)
{
    gchar *server = g_hash_table_lookup(x->config, "server");
    gchar *username = g_hash_table_lookup(x->config, "username");
    gchar *password = g_hash_table_lookup(x->config, "password");
    gchar *resource = g_hash_table_lookup(x->config, "resource");
    
    x->conn = lm_connection_new_with_context(server, x->context);
    x->state = LM_CONNECTION_STATE_OPENING;
    
    if(!lm_connection_open_and_block(x->conn, &(x->gerror))) {
        log_record(x, LOGS_ERR, "Couldn't open new connection to '%s': %s",
                   server, x->gerror->message);
        g_clear_error(&(x->gerror));
        return FALSE;
    }
    x->state = LM_CONNECTION_STATE_OPEN;

    if(!lm_connection_authenticate_and_block(x->conn,  username, password,
                                             resource, &(x->gerror))) {
        log_record(x, LOGS_ERR, "Couldn't authenticate with '%s', '%s': %s",
                   username, password, x->gerror->message);
        g_clear_error(&(x->gerror));
        return FALSE;
    }
    x->state = LM_CONNECTION_STATE_AUTHENTICATED;
    
    log_record(x, LOGS_INFO, "'%s@%s/%s' has been connected",
               username, server, resource);
    
    return TRUE;
}
Beispiel #3
0
boolean
xmpp_connect (const char *user, const char * passwd, const char * server, unsigned short port)
{

  GError * error = NULL;
  LmMessage * m;
  LmMessage * reply;
  LmMessageNode * query;
  LmMessageNode * item;
  gboolean success;

  lm_connection_set_server (connection, server);
  lm_connection_set_port (connection, port);

  g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, _("Connecting to %s..."), server);
  success = lm_connection_open_and_block (connection, &error);
  if (!success) goto error;

  g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, _("Authenticating with JID %s..."), user);
  success = lm_connection_authenticate_and_block (connection, user, passwd, CONN_XMPP_RESOURCE, &error);
  if (!success) goto error;
  g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, _("Connected successfully."), user);

  /* Fetch roster */
  m = lm_message_new_with_sub_type (NULL, LM_MESSAGE_TYPE_IQ, LM_MESSAGE_SUB_TYPE_GET);
  query = lm_message_node_add_child (m->node, "query", NULL);
  lm_message_node_set_attributes (query, "xmlns", "jabber:iq:roster", NULL);
  reply = lm_connection_send_with_reply_and_block (connection, m, &error);
  query = lm_message_node_get_child (reply->node, "query");
  item  = lm_message_node_get_child (query, "item");
  while (item)
    {
      xmpp_user_t user;
      const gchar *jid, *name;
      jid = lm_message_node_get_attribute (item, "jid");
      name = lm_message_node_get_attribute (item, "name");
      user = intern_user (jid);
      user->name = g_strdup (name);
      user->status = OFFLINE;
      item = item->next;
    }
  lm_message_unref (reply);
  lm_message_unref (m);

  m = lm_message_new_with_sub_type (NULL, LM_MESSAGE_TYPE_PRESENCE, LM_MESSAGE_SUB_TYPE_AVAILABLE);
  lm_connection_send(connection, m, NULL);
  lm_message_unref (m);

  return TRUE;

  /* Error handling */
 error:
  g_message ("%s", error->message);
  return FALSE;
}