示例#1
0
static gboolean
reconnect(void)
{
    if(wantconnection && lm_connection_get_state(connection)
            == LM_CONNECTION_STATE_CLOSED) {
        xmpp_connect();
    }
    return TRUE;
} /* reconnect */
示例#2
0
文件: IoLoudmouth.c 项目: ADTSH/io
/*doc Loudmouth status
Returns status connection. Possible return values are:
<ul>
  <li><code>Loudmouth types CLOSED</code></li>
  <li><code>Loudmouth types OPENING</code></li>
  <li><code>Loudmouth types OPEN</code></li>
  <li><code>Loudmouth types AUTHENTICATING</code></li>
  <li><code>Loudmouth types AUTHENTICATED</code></li>
</ul>*/
IoObject *IoLoudmouth_status(IoLoudmouth *self, IoObject *locals, IoMessage *m) {
  IoSeq *status = IOSYMBOL("unknown");
  switch(lm_connection_get_state(LMCONN(self))) {
    case LM_CONNECTION_STATE_CLOSED:         status = IOSYMBOL("closed");         break;
    case LM_CONNECTION_STATE_OPENING:        status = IOSYMBOL("opening");        break;
    case LM_CONNECTION_STATE_OPEN:           status = IOSYMBOL("open");           break;
    case LM_CONNECTION_STATE_AUTHENTICATING: status = IOSYMBOL("authenticating"); break;
    case LM_CONNECTION_STATE_AUTHENTICATED:  status = IOSYMBOL("authenticated");
  }

  return status;
}
示例#3
0
static void
server_cleanup(XMPP_SERVER_REC *server)
{
	if (!IS_XMPP_SERVER(server))
		return;
	if (server->timeout_tag)
		g_source_remove(server->timeout_tag);
	if (lm_connection_get_state(server->lmconn) !=
	    LM_CONNECTION_STATE_CLOSED)
		lm_connection_close(server->lmconn, NULL);
	lm_connection_unref(server->lmconn);
	g_free(server->jid);
	g_free(server->user);
	g_free(server->domain);
	g_free(server->resource);
	g_free(server->ping_id);
}
示例#4
0
static void
rd_cleanup(struct register_data *rd)
{
	register_data = g_slist_remove(register_data, rd);
	g_free(rd->username);
	g_free(rd->domain);
	g_free(rd->password);
	g_free(rd->address);
	g_free(rd->id);
	if (rd->handler != NULL) {
		if (lm_message_handler_is_valid(rd->handler))
			lm_message_handler_invalidate(rd->handler);
		lm_message_handler_unref(rd->handler);
	}
	if (lm_connection_get_state(rd->lmconn) != LM_CONNECTION_STATE_CLOSED)
		lm_connection_close(rd->lmconn, NULL);
	lm_connection_unref(rd->lmconn);
	g_free(rd);
}
示例#5
0
void
xmpp_disconnect() {
    LmMessage *m;
    const gchar *conf_server = get_settings_str(SERVER);
    wantconnection = 0;
    if (connection == NULL)
        return;
    if (lm_connection_get_state(connection)
            == LM_CONNECTION_STATE_AUTHENTICATED) {
        m = lm_message_new_with_sub_type(NULL, LM_MESSAGE_TYPE_PRESENCE,
                                         LM_MESSAGE_SUB_TYPE_UNAVAILABLE);
        lm_connection_send(connection, m, NULL);
    }
    if(lm_connection_is_open(connection)) {
        ui_print("Closing connection to %s\n", conf_server);
        lm_connection_close(connection, NULL);
        g_printerr("Disconnected\n");
    }
    lm_connection_unref(connection);
    connection = NULL;
} /* xmpp_disconnect */